Annotation of embedaddon/mpd/src/mp.c, revision 1.1

1.1     ! misho       1: 
        !             2: /*
        !             3:  * mp.c
        !             4:  *
        !             5:  * Written by Archie Cobbs <archie@freebsd.org>
        !             6:  * Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
        !             7:  * See ``COPYRIGHT.whistle''
        !             8:  */
        !             9: 
        !            10: #include "ppp.h"
        !            11: #include "mp.h"
        !            12: #include "iface.h"
        !            13: #include "link.h"
        !            14: #include "fsm.h"
        !            15: #include "input.h"
        !            16: #include "util.h"
        !            17: 
        !            18: /*
        !            19:  * MpSetDiscrim()
        !            20:  *
        !            21:  * Figure out and set my discriminator
        !            22:  */
        !            23: 
        !            24: void
        !            25: MpSetDiscrim(void)
        !            26: {
        !            27:   u_int32_t            magic[2];
        !            28:   struct u_addr                ipaddr;
        !            29:   struct sockaddr_dl   hwa;
        !            30: 
        !            31:   /* Try Ethernet address first */
        !            32:   if (GetEther(NULL, &hwa) >= 0) {
        !            33:     self_discrim.class = DISCRIM_CLASS_802_1;
        !            34:     memcpy(self_discrim.bytes, LLADDR(&hwa), self_discrim.len = hwa.sdl_alen);
        !            35:     return;
        !            36:   }
        !            37: 
        !            38:   /* Then try an IP address */
        !            39:   if (GetAnyIpAddress(&ipaddr, NULL) >= 0) {
        !            40:     self_discrim.class = DISCRIM_CLASS_IPADDR;
        !            41:     memcpy(self_discrim.bytes, &ipaddr.u.ip4, self_discrim.len = sizeof(ipaddr.u.ip4));
        !            42:     return;
        !            43:   }
        !            44: 
        !            45:   /* Then just use a coupla magic numbers */
        !            46:   magic[0] = GenerateMagic();
        !            47:   magic[1] = GenerateMagic();
        !            48:   self_discrim.class = DISCRIM_CLASS_MAGIC;
        !            49:   memcpy(self_discrim.bytes, magic, self_discrim.len = sizeof(magic));
        !            50: }
        !            51: 
        !            52: /*
        !            53:  * MpDiscrimEqual()
        !            54:  *
        !            55:  * Returns TRUE if the two discriminators are equal.
        !            56:  */
        !            57: 
        !            58: int
        !            59: MpDiscrimEqual(Discrim d1, Discrim d2)
        !            60: {
        !            61:   if (d1->class != d2->class && d1->len != d2->len)
        !            62:     return(FALSE);
        !            63:   return(!memcmp(&d1->bytes, &d2->bytes, d1->len));
        !            64: }
        !            65: 
        !            66: /*
        !            67:  * MpDiscrimName()
        !            68:  */
        !            69: 
        !            70: static const char *
        !            71: MpDiscrimName(int class)
        !            72: {
        !            73:   switch (class)
        !            74:   {
        !            75:     case DISCRIM_CLASS_NULL:
        !            76:       return("NULL");
        !            77:     case DISCRIM_CLASS_LOCAL:
        !            78:       return("LOCAL");
        !            79:     case DISCRIM_CLASS_IPADDR:
        !            80:       return("IP Address");
        !            81:     case DISCRIM_CLASS_802_1:
        !            82:       return("802.1");
        !            83:     case DISCRIM_CLASS_MAGIC:
        !            84:       return("Magic");
        !            85:     case DISCRIM_CLASS_PSN:
        !            86:       return("PSN");
        !            87:     default:
        !            88:       return("???");
        !            89:   }
        !            90: }
        !            91: 
        !            92: /*
        !            93:  * MpDiscrimText()
        !            94:  */
        !            95: 
        !            96: char *
        !            97: MpDiscrimText(Discrim dis, char *buf, size_t len)
        !            98: {
        !            99:   int          k;
        !           100: 
        !           101:   snprintf(buf, len, "[%s]", MpDiscrimName(dis->class));
        !           102:   for (k = 0; k < dis->len && k < sizeof(dis->bytes); k++)
        !           103:     snprintf(buf + strlen(buf),
        !           104:       len - strlen(buf), " %02x", dis->bytes[k]);
        !           105:   return(buf);
        !           106: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>