X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/513f782ae18791f0c925b9235da749b38159b607..e7cfa5e63a27e6fbb75e0bbd151af2c7d0d222e9:/print-arp.c diff --git a/print-arp.c b/print-arp.c index 9cedf343..add9652c 100644 --- a/print-arp.c +++ b/print-arp.c @@ -22,7 +22,7 @@ /* \summary: Address Resolution Protocol (ARP) printer */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include "netdissect-stdinc.h" @@ -34,7 +34,6 @@ #include "ethertype.h" #include "extract.h" -static const char tstr[] = "[|ARP]"; /* * Address Resolution Protocol. @@ -55,6 +54,7 @@ struct arp_pkthdr { #define ARPHRD_ATM2225 19 /* ATM (RFC 2225) */ #define ARPHRD_STRIP 23 /* Ricochet Starmode Radio hardware format */ #define ARPHRD_IEEE1394 24 /* IEEE 1394 (FireWire) hardware format */ +#define ARPHRD_INFINIBAND 32 /* InfiniBand RFC 4391 */ nd_uint16_t ar_pro; /* format of protocol address */ nd_uint8_t ar_hln; /* length of hardware address */ nd_uint8_t ar_pln; /* length of protocol address */ @@ -78,18 +78,18 @@ struct arp_pkthdr { nd_byte ar_tpa[]; /* target protocol address */ #endif #define ar_sha(ap) (((const u_char *)((ap)+1))+ 0) -#define ar_spa(ap) (((const u_char *)((ap)+1))+ EXTRACT_U_1((ap)->ar_hln)) -#define ar_tha(ap) (((const u_char *)((ap)+1))+ EXTRACT_U_1((ap)->ar_hln)+EXTRACT_U_1((ap)->ar_pln)) -#define ar_tpa(ap) (((const u_char *)((ap)+1))+2*EXTRACT_U_1((ap)->ar_hln)+EXTRACT_U_1((ap)->ar_pln)) +#define ar_spa(ap) (((const u_char *)((ap)+1))+ GET_U_1((ap)->ar_hln)) +#define ar_tha(ap) (((const u_char *)((ap)+1))+ GET_U_1((ap)->ar_hln)+GET_U_1((ap)->ar_pln)) +#define ar_tpa(ap) (((const u_char *)((ap)+1))+2*GET_U_1((ap)->ar_hln)+GET_U_1((ap)->ar_pln)) }; #define ARP_HDRLEN 8 -#define HRD(ap) EXTRACT_BE_U_2((ap)->ar_hrd) -#define HRD_LEN(ap) EXTRACT_U_1((ap)->ar_hln) -#define PROTO_LEN(ap) EXTRACT_U_1((ap)->ar_pln) -#define OP(ap) EXTRACT_BE_U_2((ap)->ar_op) -#define PRO(ap) EXTRACT_BE_U_2((ap)->ar_pro) +#define HRD(ap) GET_BE_U_2((ap)->ar_hrd) +#define HRD_LEN(ap) GET_U_1((ap)->ar_hln) +#define PROTO_LEN(ap) GET_U_1((ap)->ar_pln) +#define OP(ap) GET_BE_U_2((ap)->ar_op) +#define PRO(ap) GET_BE_U_2((ap)->ar_pro) #define SHA(ap) (ar_sha(ap)) #define SPA(ap) (ar_spa(ap)) #define THA(ap) (ar_tha(ap)) @@ -115,6 +115,7 @@ static const struct tok arphrd_values[] = { { ARPHRD_STRIP, "Strip" }, { ARPHRD_IEEE1394, "IEEE 1394" }, { ARPHRD_ATM2225, "ATM" }, + { ARPHRD_INFINIBAND, "InfiniBand" }, { 0, NULL } }; @@ -152,15 +153,15 @@ struct atmarp_pkthdr { nd_byte aar_tpa[]; /* target protocol address */ #endif -#define ATMHRD(ap) EXTRACT_BE_U_2((ap)->aar_hrd) -#define ATMSHRD_LEN(ap) (EXTRACT_U_1((ap)->aar_shtl) & ATMARP_LEN_MASK) -#define ATMSSLN(ap) (EXTRACT_U_1((ap)->aar_sstl) & ATMARP_LEN_MASK) -#define ATMSPROTO_LEN(ap) EXTRACT_U_1((ap)->aar_spln) -#define ATMOP(ap) EXTRACT_BE_U_2((ap)->aar_op) -#define ATMPRO(ap) EXTRACT_BE_U_2((ap)->aar_pro) -#define ATMTHRD_LEN(ap) (EXTRACT_U_1((ap)->aar_thtl) & ATMARP_LEN_MASK) -#define ATMTSLN(ap) (EXTRACT_U_1((ap)->aar_tstl) & ATMARP_LEN_MASK) -#define ATMTPROTO_LEN(ap) EXTRACT_U_1((ap)->aar_tpln) +#define ATMHRD(ap) GET_BE_U_2((ap)->aar_hrd) +#define ATMSHRD_LEN(ap) (GET_U_1((ap)->aar_shtl) & ATMARP_LEN_MASK) +#define ATMSSLN(ap) (GET_U_1((ap)->aar_sstl) & ATMARP_LEN_MASK) +#define ATMSPROTO_LEN(ap) GET_U_1((ap)->aar_spln) +#define ATMOP(ap) GET_BE_U_2((ap)->aar_op) +#define ATMPRO(ap) GET_BE_U_2((ap)->aar_pro) +#define ATMTHRD_LEN(ap) (GET_U_1((ap)->aar_thtl) & ATMARP_LEN_MASK) +#define ATMTSLN(ap) (GET_U_1((ap)->aar_tstl) & ATMARP_LEN_MASK) +#define ATMTPROTO_LEN(ap) GET_U_1((ap)->aar_tpln) #define aar_sha(ap) ((const u_char *)((ap)+1)) #define aar_ssa(ap) (aar_sha(ap) + ATMSHRD_LEN(ap)) #define aar_spa(ap) (aar_ssa(ap) + ATMSSLN(ap)) @@ -177,10 +178,10 @@ struct atmarp_pkthdr { #define ATMTPA(ap) (aar_tpa(ap)) static int -isnonzero(const u_char *a, size_t len) +isnonzero(netdissect_options *ndo, const u_char *a, size_t len) { while (len > 0) { - if (EXTRACT_U_1(a) != 0) + if (GET_U_1(a) != 0) return (1); a++; len--; @@ -266,7 +267,7 @@ atmarp_print(netdissect_options *ndo, op = ATMOP(ap); if (!ND_TTEST_LEN(aar_tpa(ap), ATMTPROTO_LEN(ap))) { - ND_PRINT("%s", tstr); + nd_print_trunc(ndo); ND_DEFAULTPRINT((const u_char *)ap, length); return; } @@ -349,7 +350,7 @@ atmarp_print(netdissect_options *ndo, return; trunc: - ND_PRINT("%s", tstr); + nd_print_trunc(ndo); } void @@ -359,6 +360,7 @@ arp_print(netdissect_options *ndo, const struct arp_pkthdr *ap; u_short pro, hrd, op, linkaddr; + ndo->ndo_protocol = "arp"; ap = (const struct arp_pkthdr *)bp; ND_TCHECK_SIZE(ap); @@ -385,7 +387,7 @@ arp_print(netdissect_options *ndo, } if (!ND_TTEST_LEN(TPA(ap), PROTO_LEN(ap))) { - ND_PRINT("%s", tstr); + nd_print_trunc(ndo); ND_DEFAULTPRINT((const u_char *)ap, length); return; } @@ -421,7 +423,7 @@ arp_print(netdissect_options *ndo, case ARPOP_REQUEST: ND_PRINT("who-has "); tpaddr_print_ip(ndo, ap, pro); - if (isnonzero((const u_char *)THA(ap), HRD_LEN(ap))) + if (isnonzero(ndo, (const u_char *)THA(ap), HRD_LEN(ap))) ND_PRINT(" (%s)", linkaddr_string(ndo, THA(ap), linkaddr, HRD_LEN(ap))); ND_PRINT(" tell "); @@ -468,12 +470,5 @@ arp_print(netdissect_options *ndo, return; trunc: - ND_PRINT("%s", tstr); + nd_print_trunc(ndo); } - -/* - * Local Variables: - * c-style: bsd - * End: - */ -