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>