X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/99c91c3aec40b691641374f58e798bd8d6b657bd..60128eebca8c4975a2f1c6a29e16a76f720cc924:/print-arp.c diff --git a/print-arp.c b/print-arp.c index b007257a..eff97c46 100644 --- a/print-arp.c +++ b/print-arp.c @@ -19,6 +19,8 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ +/* \summary: Address Resolution Protocol (ARP) printer */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -175,7 +177,17 @@ struct atmarp_pkthdr { #define ATMTSA(ap) (aar_tsa(ap)) #define ATMTPA(ap) (aar_tpa(ap)) -static u_char ezero[6]; +static int +isnonzero(const u_char *a, size_t len) +{ + while (len > 0) { + if (*a != 0) + return (1); + a++; + len--; + } + return (0); +} static void atmarp_addr_print(netdissect_options *ndo, @@ -356,7 +368,7 @@ arp_print(netdissect_options *ndo, case ARPOP_REQUEST: ND_PRINT((ndo, "who-has %s", ipaddr_string(ndo, TPA(ap)))); - if (memcmp((const char *)ezero, (const char *)THA(ap), HRD_LEN(ap)) != 0) + if (isnonzero((const u_char *)THA(ap), HRD_LEN(ap))) ND_PRINT((ndo, " (%s)", linkaddr_string(ndo, THA(ap), linkaddr, HRD_LEN(ap)))); ND_PRINT((ndo, " tell %s", ipaddr_string(ndo, SPA(ap))));