X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/a945058fa79c1bba7adf12268d9d2baa56e35316..refs/pull/377/head:/addrtoname.c diff --git a/addrtoname.c b/addrtoname.c index c92870dc..eb0b2aee 100644 --- a/addrtoname.c +++ b/addrtoname.c @@ -21,11 +21,8 @@ * Internet, ethernet, port, and protocol string to address * and address to string conversion routines */ -#ifndef lint -static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.119 2007-08-08 14:06:34 hannes Exp $ (LBL)"; -#endif +#define NETDISSECT_REWORKED #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -81,7 +78,7 @@ extern int ether_ntohost(char *, const struct ether_addr *); #define HASHNAMESIZE 4096 struct hnamemem { - u_int32_t addr; + uint32_t addr; const char *name; struct hnamemem *nxt; }; @@ -158,7 +155,7 @@ static struct enamemem nsaptable[HASHNAMESIZE]; static struct enamemem bytestringtable[HASHNAMESIZE]; struct protoidmem { - u_int32_t p_oui; + uint32_t p_oui; u_short p_proto; const char *p_name; struct protoidmem *p_nxt; @@ -170,7 +167,7 @@ static struct protoidmem protoidtable[HASHNAMESIZE]; * A faster replacement for inet_ntoa(). */ const char * -intoa(u_int32_t addr) +intoa(uint32_t addr) { register char *cp; register u_int byte; @@ -199,8 +196,8 @@ intoa(u_int32_t addr) return cp + 1; } -static u_int32_t f_netmask; -static u_int32_t f_localnet; +static uint32_t f_netmask; +static uint32_t f_localnet; /* * Return a name for the IP address pointed to by ap. This address @@ -222,10 +219,10 @@ static u_int32_t f_localnet; * also needs to check whether they're present in the packet buffer. */ const char * -getname(const u_char *ap) +getname(netdissect_options *ndo, const u_char *ap) { register struct hostent *hp; - u_int32_t addr; + uint32_t addr; static struct hnamemem *p; /* static for longjmp() */ memcpy(&addr, ap, sizeof(addr)); @@ -244,14 +241,14 @@ getname(const u_char *ap) * given, f_netmask and f_localnet are 0 and the test * evaluates to true) */ - if (!nflag && + if (!ndo->ndo_nflag && (addr & f_netmask) == f_localnet) { hp = gethostbyaddr((char *)&addr, 4, AF_INET); if (hp) { char *dotp; p->name = strdup(hp->h_name); - if (Nflag) { + if (ndo->ndo_Nflag) { /* Remove domain qualifications */ dotp = strchr(p->name, '.'); if (dotp) @@ -270,33 +267,39 @@ getname(const u_char *ap) * is assumed to be in network byte order. */ const char * -getname6(const u_char *ap) +getname6(netdissect_options *ndo, const u_char *ap) { register struct hostent *hp; - struct in6_addr addr; + union { + struct in6_addr addr; + struct for_hash_addr { + char fill[14]; + uint16_t d; + } addra; + } addr; static struct h6namemem *p; /* static for longjmp() */ register const char *cp; char ntop_buf[INET6_ADDRSTRLEN]; memcpy(&addr, ap, sizeof(addr)); - p = &h6nametable[*(u_int16_t *)&addr.s6_addr[14] & (HASHNAMESIZE-1)]; + p = &h6nametable[addr.addra.d & (HASHNAMESIZE-1)]; for (; p->nxt; p = p->nxt) { if (memcmp(&p->addr, &addr, sizeof(addr)) == 0) return (p->name); } - p->addr = addr; + p->addr = addr.addr; p->nxt = newh6namemem(); /* * Do not print names if -n was given. */ - if (!nflag) { + if (!ndo->ndo_nflag) { hp = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET6); if (hp) { char *dotp; p->name = strdup(hp->h_name); - if (Nflag) { + if (ndo->ndo_Nflag) { /* Remove domain qualifications */ dotp = strchr(p->name, '.'); if (dotp) @@ -464,7 +467,7 @@ lookup_protoid(const u_char *pi) } const char * -etheraddr_string(register const u_char *ep) +etheraddr_string(netdissect_options *ndo, register const u_char *ep) { register int i; register char *cp; @@ -476,7 +479,7 @@ etheraddr_string(register const u_char *ep) if (tp->e_name) return (tp->e_name); #ifdef USE_ETHER_NTOHOST - if (!nflag) { + if (!ndo->ndo_nflag) { char buf2[BUFSIZE]; /* @@ -501,7 +504,7 @@ etheraddr_string(register const u_char *ep) *cp++ = hex[*ep++ & 0xf]; } - if (!nflag) { + if (!ndo->ndo_nflag) { snprintf(cp, BUFSIZE - (2 + 5*3), " (oui %s)", tok2str(oui_values, "Unknown", oui)); } else @@ -539,7 +542,7 @@ le64addr_string(const u_char *ep) } const char * -linkaddr_string(const u_char *ep, const unsigned int type, const unsigned int len) +linkaddr_string(netdissect_options *ndo, const u_char *ep, const unsigned int type, const unsigned int len) { register u_int i; register char *cp; @@ -549,7 +552,7 @@ linkaddr_string(const u_char *ep, const unsigned int type, const unsigned int le return (""); if (type == LINKADDR_ETHER && len == ETHER_ADDR_LEN) - return (etheraddr_string(ep)); + return (etheraddr_string(ndo, ep)); if (type == LINKADDR_FRELAY) return (q922_string(ep)); @@ -577,7 +580,7 @@ etherproto_string(u_short port) { register char *cp; register struct hnamemem *tp; - register u_int32_t i = port; + register uint32_t i = port; char buf[sizeof("0000")]; for (tp = &eprototable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) @@ -660,7 +663,7 @@ const char * tcpport_string(u_short port) { register struct hnamemem *tp; - register u_int32_t i = port; + register uint32_t i = port; char buf[sizeof("00000")]; for (tp = &tporttable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) @@ -679,7 +682,7 @@ const char * udpport_string(register u_short port) { register struct hnamemem *tp; - register u_int32_t i = port; + register uint32_t i = port; char buf[sizeof("00000")]; for (tp = &uporttable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) @@ -699,7 +702,7 @@ ipxsap_string(u_short port) { register char *cp; register struct hnamemem *tp; - register u_int32_t i = port; + register uint32_t i = port; char buf[sizeof("0000")]; for (tp = &ipxsaptable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) @@ -721,7 +724,7 @@ ipxsap_string(u_short port) } static void -init_servarray(void) +init_servarray(netdissect_options *ndo) { struct servent *sv; register struct hnamemem *table; @@ -740,7 +743,7 @@ init_servarray(void) while (table->name) table = table->nxt; - if (nflag) { + if (ndo->ndo_nflag) { (void)snprintf(buf, sizeof(buf), "%d", port); table->name = strdup(buf); } else @@ -753,7 +756,7 @@ init_servarray(void) /* in libpcap.a (nametoaddr.c) */ #if defined(WIN32) && !defined(USE_STATIC_LIBPCAP) -__declspec(dllimport) +extern __declspec(dllimport) #else extern #endif @@ -1129,32 +1132,32 @@ init_ipxsaparray(void) /* * Initialize the address to name translation machinery. We map all - * non-local IP addresses to numeric addresses if fflag is true (i.e., - * to prevent blocking on the nameserver). localnet is the IP address + * non-local IP addresses to numeric addresses if ndo->ndo_fflag is true + * (i.e., to prevent blocking on the nameserver). localnet is the IP address * of the local network. mask is its subnet mask. */ void -init_addrtoname(u_int32_t localnet, u_int32_t mask) +init_addrtoname(netdissect_options *ndo, uint32_t localnet, uint32_t mask) { - if (fflag) { + if (ndo->ndo_fflag) { f_localnet = localnet; f_netmask = mask; } - if (nflag) + if (ndo->ndo_nflag) /* * Simplest way to suppress names. */ return; init_etherarray(); - init_servarray(); + init_servarray(ndo); init_eprotoarray(); init_protoidarray(); init_ipxsaparray(); } const char * -dnaddr_string(u_short dnaddr) +dnaddr_string(netdissect_options *ndo, u_short dnaddr) { register struct hnamemem *tp; @@ -1165,7 +1168,7 @@ dnaddr_string(u_short dnaddr) tp->addr = dnaddr; tp->nxt = newhnamemem(); - if (nflag) + if (ndo->ndo_nflag) tp->name = dnnum_string(dnaddr); else tp->name = dnname_string(dnaddr);