X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/423ef5b504f6356f5a25bbc32bf568e32ab1e263..refs/heads/tcpdump-4.1:/addrtoname.c diff --git a/addrtoname.c b/addrtoname.c index 64ec7ab7..29826dfb 100644 --- a/addrtoname.c +++ b/addrtoname.c @@ -23,7 +23,7 @@ */ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.114 2005-07-26 17:33:56 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.119 2007-08-08 14:06:34 hannes Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -68,6 +68,10 @@ extern int ether_ntohost(char *, const struct ether_addr *); #include "extract.h" #include "oui.h" +#ifndef ETHER_ADDR_LEN +#define ETHER_ADDR_LEN 6 +#endif + /* * hash tables for whatever-to-name translations * @@ -75,7 +79,6 @@ extern int ether_ntohost(char *, const struct ether_addr *); */ #define HASHNAMESIZE 4096 -#define BUFSIZE 128 struct hnamemem { u_int32_t addr; @@ -83,13 +86,12 @@ struct hnamemem { struct hnamemem *nxt; }; -struct hnamemem hnametable[HASHNAMESIZE]; -struct hnamemem tporttable[HASHNAMESIZE]; -struct hnamemem uporttable[HASHNAMESIZE]; -struct hnamemem eprototable[HASHNAMESIZE]; -struct hnamemem dnaddrtable[HASHNAMESIZE]; -struct hnamemem llcsaptable[HASHNAMESIZE]; -struct hnamemem ipxsaptable[HASHNAMESIZE]; +static struct hnamemem hnametable[HASHNAMESIZE]; +static struct hnamemem tporttable[HASHNAMESIZE]; +static struct hnamemem uporttable[HASHNAMESIZE]; +static struct hnamemem eprototable[HASHNAMESIZE]; +static struct hnamemem dnaddrtable[HASHNAMESIZE]; +static struct hnamemem ipxsaptable[HASHNAMESIZE]; #if defined(INET6) && defined(WIN32) /* @@ -138,7 +140,7 @@ struct h6namemem { struct h6namemem *nxt; }; -struct h6namemem h6nametable[HASHNAMESIZE]; +static struct h6namemem h6nametable[HASHNAMESIZE]; #endif /* INET6 */ struct enamemem { @@ -151,9 +153,9 @@ struct enamemem { struct enamemem *e_nxt; }; -struct enamemem enametable[HASHNAMESIZE]; -struct enamemem nsaptable[HASHNAMESIZE]; -struct enamemem bytestringtable[HASHNAMESIZE]; +static struct enamemem enametable[HASHNAMESIZE]; +static struct enamemem nsaptable[HASHNAMESIZE]; +static struct enamemem bytestringtable[HASHNAMESIZE]; struct protoidmem { u_int32_t p_oui; @@ -162,7 +164,7 @@ struct protoidmem { struct protoidmem *p_nxt; }; -struct protoidmem protoidtable[HASHNAMESIZE]; +static struct protoidmem protoidtable[HASHNAMESIZE]; /* * A faster replacement for inet_ntoa(). @@ -309,7 +311,7 @@ getname6(const u_char *ap) } #endif /* INET6 */ -static char hex[] = "0123456789abcdef"; +static const char hex[] = "0123456789abcdef"; /* Find the hash node that corresponds the ether address 'ep' */ @@ -506,14 +508,20 @@ etheraddr_string(register const u_char *ep) } const char * -linkaddr_string(const u_char *ep, const unsigned int len) +linkaddr_string(const u_char *ep, const unsigned int type, const unsigned int len) { register u_int i; register char *cp; register struct enamemem *tp; - if (len == 6) /* XXX not totally correct... */ - return etheraddr_string(ep); + if (len == 0) + return (""); + + if (type == LINKADDR_ETHER && len == ETHER_ADDR_LEN) + return (etheraddr_string(ep)); + + if (type == LINKADDR_FRELAY) + return (q922_string(ep)); tp = lookup_bytestring(ep, len); if (tp->e_name) @@ -586,25 +594,6 @@ protoid_string(register const u_char *pi) return (tp->p_name); } -const char * -llcsap_string(u_char sap) -{ - register struct hnamemem *tp; - register u_int32_t i = sap; - char buf[sizeof("sap 00")]; - - for (tp = &llcsaptable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) - if (tp->addr == i) - return (tp->name); - - tp->addr = i; - tp->nxt = newhnamemem(); - - snprintf(buf, sizeof(buf), "sap %02x", sap & 0xff); - tp->name = strdup(buf); - return (tp->name); -} - #define ISONSAP_MAX_LENGTH 20 const char * isonsap_string(const u_char *nsap, register u_int nsap_length) @@ -759,7 +748,7 @@ init_eprotoarray(void) } } -static struct protoidlist { +static const struct protoidlist { const u_char protoid[5]; const char *name; } protoidlist[] = { @@ -780,7 +769,7 @@ init_protoidarray(void) { register int i; register struct protoidmem *tp; - struct protoidlist *pl; + const struct protoidlist *pl; u_char protoid[5]; protoid[0] = 0; @@ -804,7 +793,7 @@ init_protoidarray(void) } } -static struct etherlist { +static const struct etherlist { const u_char addr[6]; const char *name; } etherlist[] = { @@ -829,7 +818,7 @@ static struct etherlist { static void init_etherarray(void) { - register struct etherlist *el; + register const struct etherlist *el; register struct enamemem *tp; #ifdef USE_ETHER_NTOHOST char name[256]; @@ -873,41 +862,7 @@ init_etherarray(void) } } -static struct tok llcsap_db[] = { - { LLCSAP_NULL, "null" }, - { LLCSAP_8021B_I, "802.1b-gsap" }, - { LLCSAP_8021B_G, "802.1b-isap" }, - { LLCSAP_IP, "ip-sap" }, - { LLCSAP_PROWAYNM, "proway-nm" }, - { LLCSAP_8021D, "802.1d" }, - { LLCSAP_RS511, "eia-rs511" }, - { LLCSAP_ISO8208, "x.25/llc2" }, - { LLCSAP_PROWAY, "proway" }, - { LLCSAP_SNAP, "snap" }, - { LLCSAP_IPX, "IPX" }, - { LLCSAP_NETBEUI, "netbeui" }, - { LLCSAP_ISONS, "iso-clns" }, - { LLCSAP_GLOBAL, "global" }, - { 0, NULL } -}; - -static void -init_llcsaparray(void) -{ - register int i; - register struct hnamemem *table; - - for (i = 0; llcsap_db[i].s != NULL; i++) { - table = &llcsaptable[llcsap_db[i].v]; - while (table->name) - table = table->nxt; - table->name = llcsap_db[i].s; - table->addr = llcsap_db[i].v; - table->nxt = newhnamemem(); - } -} - -static struct tok ipxsap_db[] = { +static const struct tok ipxsap_db[] = { { 0x0000, "Unknown" }, { 0x0001, "User" }, { 0x0002, "User Group" }, @@ -1163,7 +1118,6 @@ init_addrtoname(u_int32_t localnet, u_int32_t mask) init_etherarray(); init_servarray(); init_eprotoarray(); - init_llcsaparray(); init_protoidarray(); init_ipxsaparray(); }