X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/e5bf4ceec7bf1a5a08852ad3a449a5f259f9bed5..refs/heads/master:/addrtoname.c diff --git a/addrtoname.c b/addrtoname.c index eb3df77e..43bfc47d 100644 --- a/addrtoname.c +++ b/addrtoname.c @@ -22,9 +22,7 @@ * and address to string conversion routines */ -#ifdef HAVE_CONFIG_H #include -#endif #ifdef HAVE_CASPER #include @@ -33,70 +31,62 @@ #include "netdissect-stdinc.h" -#ifdef _WIN32 - /* - * We have our own ether_ntohost(), reading from the system's - * Ethernet address file. - */ - #include "missing/win_ether_ntohost.h" -#else - #ifdef USE_ETHER_NTOHOST - #if defined(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST) - /* - * OK, just include . - */ - #include - #elif defined(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST) - /* - * OK, just include - */ - #include - #elif defined(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST) - /* - * OK, just include - */ - #include - #elif defined(ARPA_INET_H_DECLARES_ETHER_NTOHOST) - /* - * OK, just include - */ - #include - #elif defined(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST) - /* - * OK, include , after all the other stuff we - * need to include or define for its benefit. - */ +#ifdef USE_ETHER_NTOHOST + #if defined(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST) + /* + * OK, just include . + */ + #include + #elif defined(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST) + /* + * OK, just include + */ + #include + #elif defined(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST) + /* + * OK, just include + */ + #include + #elif defined(ARPA_INET_H_DECLARES_ETHER_NTOHOST) + /* + * OK, just include + */ + #include + #elif defined(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST) + /* + * OK, include , after all the other stuff we + * need to include or define for its benefit. + */ + #define NEED_NETINET_IF_ETHER_H + #else + /* + * We'll have to declare it ourselves. + * If defines struct ether_addr, include + * it. Otherwise, define it ourselves. + */ + #ifdef HAVE_STRUCT_ETHER_ADDR #define NEED_NETINET_IF_ETHER_H - #else - /* - * We'll have to declare it ourselves. - * If defines struct ether_addr, include - * it. Otherwise, define it ourselves. - */ - #ifdef HAVE_STRUCT_ETHER_ADDR - #define NEED_NETINET_IF_ETHER_H - #else /* HAVE_STRUCT_ETHER_ADDR */ + #else /* HAVE_STRUCT_ETHER_ADDR */ struct ether_addr { /* Beware FreeBSD calls this "octet". */ - unsigned char ether_addr_octet[MAC_ADDR_LEN]; + unsigned char ether_addr_octet[MAC48_LEN]; }; - #endif /* HAVE_STRUCT_ETHER_ADDR */ - #endif /* what declares ether_ntohost() */ - - #ifdef NEED_NETINET_IF_ETHER_H - #include /* Needed on some platforms */ - #include /* Needed on some platforms */ - #include - #endif /* NEED_NETINET_IF_ETHER_H */ - - #ifndef HAVE_DECL_ETHER_NTOHOST - /* - * No header declares it, so declare it ourselves. - */ - extern int ether_ntohost(char *, const struct ether_addr *); - #endif /* !defined(HAVE_DECL_ETHER_NTOHOST) */ - #endif /* USE_ETHER_NTOHOST */ -#endif /* _WIN32 */ + #endif /* HAVE_STRUCT_ETHER_ADDR */ + #endif /* what declares ether_ntohost() */ + + #ifdef NEED_NETINET_IF_ETHER_H + #include /* Needed on some platforms */ + #include /* Needed on some platforms */ + #include + #endif /* NEED_NETINET_IF_ETHER_H */ + + #ifndef HAVE_DECL_ETHER_NTOHOST + /* + * No header declares it, so declare it ourselves. + */ + extern int ether_ntohost(char *, const struct ether_addr *); + #endif /* !defined(HAVE_DECL_ETHER_NTOHOST) */ +#endif /* USE_ETHER_NTOHOST */ #include #include @@ -151,14 +141,15 @@ win32_gethostbyaddr(const char *addr, int len, int type) static struct hostent host; static char hostbuf[NI_MAXHOST]; char hname[NI_MAXHOST]; - struct sockaddr_in6 addr6; host.h_name = hostbuf; switch (type) { case AF_INET: return gethostbyaddr(addr, len, type); break; - case AF_INET6: +#ifdef AF_INET6 + case AF_INET6: { + struct sockaddr_in6 addr6; memset(&addr6, 0, sizeof(addr6)); addr6.sin6_family = AF_INET6; memcpy(&addr6.sin6_addr, addr, len); @@ -170,6 +161,8 @@ win32_gethostbyaddr(const char *addr, int len, int type) return &host; } break; + } +#endif /* AF_INET6 */ default: return NULL; } @@ -297,6 +290,7 @@ ipaddr_string(netdissect_options *ndo, const u_char *ap) * (2) Address is foreign and -f was given. (If -f was not * given, f_netmask and f_localnet are 0 and the test * evaluates to true) + * Both addr and f_netmask and f_localnet are in network byte order. */ if (!ndo->ndo_nflag && (addr & f_netmask) == f_localnet) { @@ -361,6 +355,7 @@ ip6addr_string(netdissect_options *ndo, const u_char *ap) /* * Do not print names if -n was given. */ +#ifdef AF_INET6 if (!ndo->ndo_nflag) { #ifdef HAVE_CASPER if (capdns != NULL) { @@ -386,6 +381,7 @@ ip6addr_string(netdissect_options *ndo, const u_char *ap) return (p->name); } } +#endif /* AF_INET6 */ cp = addrtostr6(ap, ntop_buf, sizeof(ntop_buf)); p->name = strdup(cp); if (p->name == NULL) @@ -529,8 +525,7 @@ lookup_nsap(netdissect_options *ndo, const u_char *nsap, k = (ensap[0] << 8) | ensap[1]; j = (ensap[2] << 8) | ensap[3]; i = (ensap[4] << 8) | ensap[5]; - } - else + } else i = j = k = 0; tp = &nsaptable[(i ^ j) & (HASHNAMESIZE-1)]; @@ -588,7 +583,7 @@ lookup_protoid(netdissect_options *ndo, const u_char *pi) } const char * -etheraddr_string(netdissect_options *ndo, const uint8_t *ep) +mac48_string(netdissect_options *ndo, const uint8_t *ep) { int i; char *cp; @@ -609,7 +604,7 @@ etheraddr_string(netdissect_options *ndo, const uint8_t *ep) */ struct ether_addr ea; - memcpy (&ea, ep, MAC_ADDR_LEN); + memcpy (&ea, ep, MAC48_LEN); if (ether_ntohost(buf2, &ea) == 0) { tp->e_name = strdup(buf2); if (tp->e_name == NULL) @@ -640,7 +635,16 @@ etheraddr_string(netdissect_options *ndo, const uint8_t *ep) } const char * -le64addr_string(netdissect_options *ndo, const uint8_t *ep) +eui64_string(netdissect_options *ndo, const uint8_t *ep) +{ + return (linkaddr_string(ndo, ep, LINKADDR_EUI64, EUI64_LEN)); +} + +/* + * EUI-64 with the rightmost octet first. + */ +const char * +eui64le_string(netdissect_options *ndo, const uint8_t *ep) { const unsigned int len = 8; u_int i; @@ -680,8 +684,8 @@ linkaddr_string(netdissect_options *ndo, const uint8_t *ep, if (len == 0) return (""); - if (type == LINKADDR_ETHER && len == MAC_ADDR_LEN) - return (etheraddr_string(ndo, ep)); + if (type == LINKADDR_MAC48 && len == MAC48_LEN) + return (mac48_string(ndo, ep)); if (type == LINKADDR_FRELAY) return (q922_string(ndo, ep, len)); @@ -928,7 +932,7 @@ init_protoidarray(netdissect_options *ndo) } static const struct etherlist { - const nd_mac_addr addr; + const nd_mac48 addr; const char *name; } etherlist[] = { {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, "Broadcast" }, @@ -939,7 +943,7 @@ static const struct etherlist { * Initialize the ethers hash table. We take two different approaches * depending on whether or not the system provides the ethers name * service. If it does, we just wire in a few names at startup, - * and etheraddr_string() fills in the table on demand. If it doesn't, + * and mac48_string() fills in the table on demand. If it doesn't, * then we suck in the entire /etc/ethers file at startup. The idea * is that parsing the local file will be fast, but spinning through * all the ethers entries via NIS & next_etherent might be very slow. @@ -985,9 +989,9 @@ init_etherarray(netdissect_options *ndo) /* * Use YP/NIS version of name if available. */ - /* Same workaround as in etheraddr_string(). */ + /* Same workaround as in mac48_string(). */ struct ether_addr ea; - memcpy (&ea, el->addr, MAC_ADDR_LEN); + memcpy (&ea, el->addr, MAC48_LEN); if (ether_ntohost(name, &ea) == 0) { tp->e_name = strdup(name); if (tp->e_name == NULL) @@ -1119,7 +1123,7 @@ static const struct ipxsap_ent { { 0x030a, "GalacticommWorldgroupServer" }, { 0x030c, "IntelNetport2/HP JetDirect/HP Quicksilver" }, { 0x0320, "AttachmateGateway" }, - { 0x0327, "MicrosoftDiagnostiocs" }, + { 0x0327, "MicrosoftDiagnostics" }, { 0x0328, "WATCOM SQL Server" }, { 0x0335, "MultiTechSystems MultisynchCommServer" }, { 0x0343, "Xylogics RemoteAccessServer/LANModem" }, @@ -1241,7 +1245,7 @@ init_ipxsaparray(netdissect_options *ndo) * Initialize the address to name translation machinery. We map all * 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. + * of the local network, mask is its subnet mask, both in network byte order. */ void init_addrtoname(netdissect_options *ndo, uint32_t localnet, uint32_t mask) @@ -1288,7 +1292,7 @@ newhnamemem(netdissect_options *ndo) static struct hnamemem *ptr = NULL; static u_int num = 0; - if (num <= 0) { + if (num == 0) { num = 64; ptr = (struct hnamemem *)calloc(num, sizeof (*ptr)); if (ptr == NULL) @@ -1308,7 +1312,7 @@ newh6namemem(netdissect_options *ndo) static struct h6namemem *ptr = NULL; static u_int num = 0; - if (num <= 0) { + if (num == 0) { num = 64; ptr = (struct h6namemem *)calloc(num, sizeof (*ptr)); if (ptr == NULL)