Annotation of embedaddon/mpd/src/proto.c, revision 1.1
1.1 ! misho 1:
! 2: /*
! 3: * proto.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:
! 12: /*
! 13: * DEFINITIONS
! 14: */
! 15:
! 16: /* Protocol number <-> name mapping */
! 17: struct protoname {
! 18: u_short proto;
! 19: const char *name;
! 20: };
! 21:
! 22: /*
! 23: * INTERNAL VARIABLES
! 24: */
! 25:
! 26: /* These are protocols we use and keep stats on */
! 27: static const struct protoname statProtos[] = {
! 28: { 0, "Unknown" },
! 29: { PROTO_IP, "IP" },
! 30: { PROTO_VJUNCOMP, "VJUNCOMP" },
! 31: { PROTO_VJCOMP, "VJCOMP" },
! 32: { PROTO_IPV6, "IPv6" },
! 33: { PROTO_MP, "MP" },
! 34: { PROTO_IPCP, "IPCP" },
! 35: { PROTO_IPV6CP, "IPV6CP" },
! 36: { PROTO_ICOMPD, "ICOMPD" },
! 37: { PROTO_COMPD, "COMPD" },
! 38: { PROTO_ICCP, "ICCP" },
! 39: { PROTO_CCP, "CCP" },
! 40: { PROTO_LCP, "LCP" },
! 41: { PROTO_PAP, "PAP" },
! 42: { PROTO_LQR, "LQR" },
! 43: { PROTO_CHAP, "CHAP" },
! 44: { PROTO_ICRYPT, "ICRYPT" },
! 45: { PROTO_CRYPT, "CRYPT" },
! 46: { PROTO_IECP, "IECP" },
! 47: { PROTO_ECP, "ECP" },
! 48: { PROTO_SPAP, "SPAP" },
! 49: { PROTO_ATCP, "ATCP" },
! 50: { PROTO_EAP, "EAP" },
! 51: };
! 52: #define NUM_STAT_PROTOCOLS (sizeof(statProtos) / sizeof(*statProtos))
! 53:
! 54: /*
! 55: * These are other protocols we recognize but don't use
! 56: * Reference: ftp://ftp.isi.edu/in-notes/iana/assignments/ppp-numbers
! 57: */
! 58:
! 59: static const struct protoname protoNames[] = {
! 60: #ifdef PROTO_NAME_LIST
! 61:
! 62: /* Network layer protocols */
! 63: { 0x0001, "Padding Protocol" },
! 64: { 0x0021, "Internet Protocol" },
! 65: { 0x0023, "OSI Network Layer" },
! 66: { 0x0025, "Xerox NS IDP" },
! 67: { 0x0027, "DECnet Phase IV" },
! 68: { 0x0029, "Appletalk" },
! 69: { 0x002b, "Novell IPX" },
! 70: { 0x002d, "Van Jacobson Compressed TCP/IP" },
! 71: { 0x002f, "Van Jacobson Uncompressed TCP/IP" },
! 72: { 0x0031, "Bridging PDU" },
! 73: { 0x0033, "Stream Protocol (ST-II)" },
! 74: { 0x0035, "Banyan Vines" },
! 75: { 0x0037, "reserved (until 1993)" },
! 76: { 0x0039, "AppleTalk EDDP" },
! 77: { 0x003b, "AppleTalk SmartBuffered" },
! 78: { 0x003d, "Multi-Link" },
! 79: { 0x003f, "NETBIOS Framing" },
! 80: { 0x0041, "Cisco Systems" },
! 81: { 0x0043, "Ascom Timeplex" },
! 82: { 0x0045, "Fujitsu Link Backup and Load Balancing (LBLB)" },
! 83: { 0x0047, "DCA Remote Lan" },
! 84: { 0x0049, "Serial Data Transport Protocol (PPP-SDTP)" },
! 85: { 0x004b, "SNA over 802.2" },
! 86: { 0x004d, "SNA" },
! 87: { 0x004f, "IP6 Header Compression" },
! 88: { 0x0051, "KNX Bridging Data" },
! 89: { 0x0053, "Encryption" },
! 90: { 0x0055, "Individual Link Encryption" },
! 91: { 0x0057, "IPv6 over PPP" },
! 92: { 0x0059, "PPP Multiplexing (RFC 3153)" },
! 93: { 0x005b, "Vendor-Specific Network Protocol" },
! 94: { 0x005d, "TRILL Network Protocol (TNP)" },
! 95: { 0x0061, "RTP IPHC Full Header" },
! 96: { 0x0063, "RTP IPHC Compressed TCP" },
! 97: { 0x0065, "RTP IPHC Compressed Non TCP" },
! 98: { 0x0067, "RTP IPHC Compressed UDP 8" },
! 99: { 0x0069, "RTP IPHC Compressed RTP 8" },
! 100: { 0x006f, "Stampede Bridging" },
! 101: { 0x0071, "BAP Bandwidth Allocation Protocol" },
! 102: { 0x0073, "MP+ Protocol" },
! 103: { 0x007d, "reserved (Control Escape) (RFC 1661)" },
! 104: { 0x007f, "reserved (compression inefficient) (RFC 1662)" },
! 105: { 0x00c1, "NTCITS IPI" },
! 106: { 0x00cf, "reserved (PPP NLPID)" },
! 107: { 0x00fb, "compression on single link in multilink group" },
! 108: { 0x00fd, "1st choice compression (RFC 1962)" },
! 109: { 0x00ff, "reserved" },
! 110:
! 111: { 0x0201, "802.1d Hello Packets (RFC 1220)" },
! 112: { 0x0203, "IBM Source Routing BPDU" },
! 113: { 0x0205, "DEC LANBridge100 Spanning Tree" },
! 114: { 0x0207, "Cisco Discovery Protocol" },
! 115: { 0x0209, "Netcs Twin Routing" },
! 116: { 0x0211, "Optical Supervisory Channel Protocol (OSCP)" },
! 117: { 0x0213, "Optical Supervisory Channel Protocol (OSCP)" },
! 118: { 0x0231, "Luxcom" },
! 119: { 0x0233, "Sigma Network Systems" },
! 120: { 0x0235, "Apple Client Server Protocol" },
! 121: { 0x0281, "MPLS Unicast" },
! 122: { 0x0283, "MPLS Multicast" },
! 123: { 0x0285, "IEEE p1284.4 standard - data packets" },
! 124: { 0x0287, "ETSI TETRA Network Protocol Type 1" },
! 125: { 0x0289, "Multichannel Flow Treatment Protocol" },
! 126:
! 127: { 0x2063, "RTP IPHC Compressed TCP No Delta" },
! 128: { 0x2065, "RTP IPHC Context State" },
! 129: { 0x2067, "RTP IPHC Compressed UDP 16" },
! 130: { 0x2069, "RTP IPHC Compressed RTP 16" },
! 131:
! 132: { 0x4001, "Cray Communications Control Protocol" },
! 133: { 0x4003, "CDPD Mobile Network Registration Protocol" },
! 134: { 0x4021, "Stacker LZS" },
! 135:
! 136: /* Network layer control protocols */
! 137:
! 138: { 0x8021, "Internet Protocol Control Protocol" },
! 139: { 0x8023, "OSI Network Layer Control Protocol" },
! 140: { 0x8025, "Xerox NS IDP Control Protocol" },
! 141: { 0x8027, "DECnet Phase IV Control Protocol" },
! 142: { 0x8029, "Appletalk Control Protocol" },
! 143: { 0x802b, "Novell IPX Control Protocol" },
! 144: { 0x802d, "reserved" },
! 145: { 0x802f, "reserved" },
! 146: { 0x8031, "Bridging NCP" },
! 147: { 0x8033, "Stream Protocol Control Protocol" },
! 148: { 0x8035, "Banyan Vines Control Protocol" },
! 149: { 0x8037, "reserved till 1993" },
! 150: { 0x8039, "reserved" },
! 151: { 0x803b, "reserved" },
! 152: { 0x803d, "Multi-Link Control Protocol" },
! 153: { 0x803f, "NETBIOS Framing Control Protocol" },
! 154: { 0x8041, "Cisco Systems Control Protocol" },
! 155: { 0x8043, "Ascom Timeplex" },
! 156: { 0x8045, "Fujitsu LBLB Control Protocol" },
! 157: { 0x8047, "DCA Remote Lan Network Control Protocol (RLNCP)" },
! 158: { 0x8049, "Serial Data Control Protocol (PPP-SDCP)" },
! 159: { 0x804b, "SNA over 802.2 Control Protocol" },
! 160: { 0x804d, "SNA Control Protocol" },
! 161: { 0x804f, "IP6 Header Compression Control Protocol" },
! 162: { 0x8051, "KNX Bridging Control Protocol" },
! 163: { 0x8053, "Encryption Control Protocol" },
! 164: { 0x8055, "Individual Link Encryption Control Protocol" },
! 165: { 0x8057, "IPv6 PPP Control Protocol" },
! 166: { 0x806f, "Stampede Bridging Control Protocol" },
! 167: { 0x8071, "BACP Bandwidth Allocation Control Protocol" },
! 168: { 0x8073, "MP+ Control Protocol" },
! 169: { 0x807d, "Not Used - reserved" },
! 170: { 0x80c1, "NTCITS IPI Control Protocol" },
! 171: { 0x80cf, "Not Used - reserved" },
! 172: { 0x80fb, "compression on single link in multilink group control" },
! 173: { 0x80fd, "Compression Control Protocol" },
! 174: { 0x80ff, "Not Used - reserved" },
! 175:
! 176: { 0x8207, "Cisco Discovery Protocol Control" },
! 177: { 0x8209, "Netcs Twin Routing" },
! 178: { 0x820b, "STP - Control Protocol" },
! 179: { 0x820d, "EDPCP - Extreme Discovery Protocol Ctrl Prtcl" },
! 180: { 0x8235, "Apple Client Server Protocol Control" },
! 181: { 0x8281, "MPLS Control Protocol (RFC 3032)" },
! 182: { 0x8283, "Tag Switching - Multicast" },
! 183: { 0x8285, "IEEE p1284.4 standard - Protocol Control" },
! 184: { 0x8287, "ETSI TETRA NSP1 Control Protocol" },
! 185: { 0x8289, "Multichannel Flow Treatment Protocol" },
! 186:
! 187: /* Link layer control protocols */
! 188:
! 189: { 0xc021, "Link Control Protocol" },
! 190: { 0xc023, "Password Authentication Protocol" },
! 191: { 0xc025, "Link Quality Report" },
! 192: { 0xc027, "Shiva Password Authentication Protocol" },
! 193: { 0xc029, "CallBack Control Protocol (CBCP)" },
! 194: { 0xc02B, "PPP Bandwidth Allocation Control Protocol (RFC 2125)" },
! 195: { 0xc02D, "PPP Bandwidth Allocation Protocol (RFC 2125)" },
! 196: { 0xc05B, "Vendor-Specific Authentication Protocol (RFC 3772)" },
! 197: { 0xc081, "Container Control Protocol", },
! 198: { 0xc223, "Challenge Handshake Authentication Protocol" },
! 199: { 0xc225, "RSA Authentication Protocol" },
! 200: { 0xc227, "Extensible Authentication Protocol" },
! 201: { 0xc26f, "Stampede Bridging Authorization Protocol" },
! 202: { 0xc281, "Proprietary Authentication Protocol", },
! 203: { 0xc283, "Proprietary Authentication Protocol", },
! 204: { 0xc481, "Proprietary Node ID Authentication Protocol", },
! 205: #endif
! 206: };
! 207: #define NUM_PROTO_NAMES (sizeof(protoNames) / sizeof(*protoNames))
! 208:
! 209: /*
! 210: * INTERNAL FUNCTIONS
! 211: */
! 212:
! 213: static int ProtoNameCmp(const void *v1, const void *v2);
! 214:
! 215: /*
! 216: * ProtoName()
! 217: * XXX For unknown protocols this function return pointer
! 218: * on the static variable. It is not good, but I think
! 219: * it should not create troubles as it is used only for logging.
! 220: */
! 221:
! 222: const char *
! 223: ProtoName(int proto)
! 224: {
! 225: int k;
! 226: static char buf[20];
! 227: struct protoname key, *pn;
! 228:
! 229: /* First check our stat list for known short names */
! 230: for (k = 0; k < NUM_STAT_PROTOCOLS; k++) {
! 231: if (proto == statProtos[k].proto)
! 232: return(statProtos[k].name);
! 233: }
! 234:
! 235: /* Now look in list of all defined protocols */
! 236: key.proto = proto;
! 237: if ((pn = bsearch(&key, protoNames,
! 238: NUM_PROTO_NAMES, sizeof(*pn), ProtoNameCmp)) != NULL)
! 239: return(pn->name);
! 240:
! 241: /* Return hex value */
! 242: buf[19] = 0;
! 243: sprintf(buf, "0x%04x", proto);
! 244: return(buf);
! 245: }
! 246:
! 247: /*
! 248: * ProtoNameCmp()
! 249: */
! 250:
! 251: static int
! 252: ProtoNameCmp(const void *v1, const void *v2)
! 253: {
! 254: struct protoname *const p1 = (struct protoname *) v1;
! 255: struct protoname *const p2 = (struct protoname *) v2;
! 256:
! 257: return(p1->proto - p2->proto);
! 258: }
! 259:
! 260:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>