X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/b751376719cfe1924aa07ab8fd364ec1a55c04b3..HEAD:/print-arp.c diff --git a/print-arp.c b/print-arp.c index e8838174..950c3b24 100644 --- a/print-arp.c +++ b/print-arp.c @@ -21,14 +21,11 @@ /* \summary: Address Resolution Protocol (ARP) printer */ -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" -#include - +#define ND_LONGJMP_FROM_TCHECK #include "netdissect.h" #include "addrtoname.h" #include "ethertype.h" @@ -65,7 +62,7 @@ struct arp_pkthdr { #define ARPOP_REVREPLY 4 /* response giving protocol address */ #define ARPOP_INVREQUEST 8 /* request to identify peer */ #define ARPOP_INVREPLY 9 /* response identifying peer */ -#define ARPOP_NAK 10 /* NAK - only valif for ATM ARP */ +#define ARPOP_NAK 10 /* NAK - only valid for ATM ARP */ /* * The remaining fields are variable in size, @@ -180,7 +177,7 @@ struct atmarp_pkthdr { static int isnonzero(netdissect_options *ndo, const u_char *a, size_t len) { - while (len > 0) { + while (len != 0) { if (GET_U_1(a) != 0) return (1); a++; @@ -266,11 +263,7 @@ atmarp_print(netdissect_options *ndo, pro = ATMPRO(ap); op = ATMOP(ap); - if (!ND_TTEST_LEN(aar_tpa(ap), ATMTPROTO_LEN(ap))) { - nd_print_trunc(ndo); - ND_DEFAULTPRINT((const u_char *)ap, length); - return; - } + ND_TCHECK_LEN(ATMTPA(ap), ATMTPROTO_LEN(ap)); if (!ndo->ndo_eflag) { ND_PRINT("ARP, "); @@ -347,10 +340,6 @@ atmarp_print(netdissect_options *ndo, out: ND_PRINT(", length %u", length); - return; - -trunc: - nd_print_trunc(ndo); } void @@ -382,15 +371,11 @@ arp_print(netdissect_options *ndo, linkaddr = LINKADDR_FRELAY; break; default: - linkaddr = LINKADDR_ETHER; + linkaddr = LINKADDR_MAC48; break; } - if (!ND_TTEST_LEN(TPA(ap), PROTO_LEN(ap))) { - nd_print_trunc(ndo); - ND_DEFAULTPRINT((const u_char *)ap, length); - return; - } + ND_TCHECK_LEN(TPA(ap), PROTO_LEN(ap)); if (!ndo->ndo_eflag) { ND_PRINT("ARP, "); @@ -437,8 +422,16 @@ arp_print(netdissect_options *ndo, break; case ARPOP_REVREQUEST: - ND_PRINT("who-is %s tell %s", - GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)), + /* + * XXX - GET_LINKADDR_STRING() may return a pointer to + * a static buffer, so we only have one call to it per + * ND_PRINT() call. + * + * This should be done in a cleaner fashion. + */ + ND_PRINT("who-is %s", + GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap))); + ND_PRINT(" tell %s", GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap))); break; @@ -449,8 +442,16 @@ arp_print(netdissect_options *ndo, break; case ARPOP_INVREQUEST: - ND_PRINT("who-is %s tell %s", - GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)), + /* + * XXX - GET_LINKADDR_STRING() may return a pointer to + * a static buffer, so we only have one call to it per + * ND_PRINT() call. + * + * This should be done in a cleaner fashion. + */ + ND_PRINT("who-is %s", + GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap))); + ND_PRINT(" tell %s", GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap))); break; @@ -467,8 +468,4 @@ arp_print(netdissect_options *ndo, out: ND_PRINT(", length %u", length); - - return; -trunc: - nd_print_trunc(ndo); }