Annotation of embedaddon/mpd/src/mp.c, revision 1.1.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>