X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/b638c78b40951d394e14dea3608f87a1cff9786f..febd0bc5aa33b3de9b5864e8c5565fe7b63f519f:/print-arp.c diff --git a/print-arp.c b/print-arp.c index 0d352215..eff97c46 100644 --- a/print-arp.c +++ b/print-arp.c @@ -19,11 +19,13 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ +/* \summary: Address Resolution Protocol (ARP) printer */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include +#include #include @@ -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))));