X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/aebfcfe1f67c99367a67614a252aba3de3c8979c..refs/pull/433/head:/print-arp.c diff --git a/print-arp.c b/print-arp.c index d7f42fe4..76f39fe0 100644 --- a/print-arp.c +++ b/print-arp.c @@ -19,26 +19,23 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#ifndef lint -static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-arp.c,v 1.65 2006-02-11 22:11:40 hannes Exp $ (LBL)"; -#endif - +#define NETDISSECT_REWORKED #ifdef HAVE_CONFIG_H #include "config.h" #endif #include -#include #include -#include "netdissect.h" +#include "interface.h" #include "addrtoname.h" #include "ether.h" #include "ethertype.h" #include "extract.h" /* must come after interface.h */ +static const char tstr[] = "[|ARP]"; + /* * Address Resolution Protocol. * @@ -99,7 +96,7 @@ struct arp_pkthdr { #define TPA(ap) (ar_tpa(ap)) -struct tok arpop_values[] = { +static const struct tok arpop_values[] = { { ARPOP_REQUEST, "Request" }, { ARPOP_REPLY, "Reply" }, { ARPOP_REVREQUEST, "Reverse Request" }, @@ -110,7 +107,7 @@ struct tok arpop_values[] = { { 0, NULL } }; -struct tok arphrd_values[] = { +static const struct tok arphrd_values[] = { { ARPHRD_ETHER, "Ethernet" }, { ARPHRD_IEEE802, "TokenRing" }, { ARPHRD_ARCNET, "ArcNet" }, @@ -189,10 +186,10 @@ atmarp_addr_print(netdissect_options *ndo, if (ha_len == 0) ND_PRINT((ndo, "")); else { - ND_PRINT((ndo, "%s", linkaddr_string(ha, LINKADDR_ATM, ha_len))); - if (srca_len != 0) + ND_PRINT((ndo, "%s", linkaddr_string(ndo, ha, LINKADDR_ATM, ha_len))); + if (srca_len != 0) ND_PRINT((ndo, ",%s", - linkaddr_string(srca, LINKADDR_ATM, srca_len))); + linkaddr_string(ndo, srca, LINKADDR_ATM, srca_len))); } } @@ -211,21 +208,20 @@ atmarp_print(netdissect_options *ndo, op = ATMOP(ap); if (!ND_TTEST2(*aar_tpa(ap), ATMTPROTO_LEN(ap))) { - ND_PRINT((ndo, "[|ARP]")); + ND_PRINT((ndo, "%s", tstr)); ND_DEFAULTPRINT((const u_char *)ap, length); return; } if (!ndo->ndo_eflag) { - ND_PRINT((ndo, "ARP")); + ND_PRINT((ndo, "ARP, ")); } if ((pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL) || ATMSPROTO_LEN(ap) != 4 || ATMTPROTO_LEN(ap) != 4 || ndo->ndo_vflag) { - ND_PRINT((ndo, "%s%s, %s (len %u/%u)", - ndo->ndo_eflag ? "" : ", ", + ND_PRINT((ndo, "%s, %s (len %u/%u)", tok2str(arphrd_values, "Unknown Hardware (%u)", hrd), tok2str(ethertype_values, "Unknown Protocol (0x%04x)", pro), ATMSPROTO_LEN(ap), @@ -238,23 +234,25 @@ atmarp_print(netdissect_options *ndo, } /* print operation */ - printf(", %s ", tok2str(arpop_values, "Unknown (%u)", op)); + ND_PRINT((ndo, "%s%s ", + ndo->ndo_vflag ? ", " : "", + tok2str(arpop_values, "Unknown (%u)", op))); switch (op) { case ARPOP_REQUEST: - ND_PRINT((ndo, "who-has %s", ipaddr_string(ATMTPA(ap)))); + ND_PRINT((ndo, "who-has %s", ipaddr_string(ndo, ATMTPA(ap)))); if (ATMTHRD_LEN(ap) != 0) { ND_PRINT((ndo, " (")); atmarp_addr_print(ndo, ATMTHA(ap), ATMTHRD_LEN(ap), ATMTSA(ap), ATMTSLN(ap)); ND_PRINT((ndo, ")")); } - ND_PRINT((ndo, "tell %s", ipaddr_string(ATMSPA(ap)))); + ND_PRINT((ndo, "tell %s", ipaddr_string(ndo, ATMSPA(ap)))); break; case ARPOP_REPLY: - ND_PRINT((ndo, "%s is-at ", ipaddr_string(ATMSPA(ap)))); + ND_PRINT((ndo, "%s is-at ", ipaddr_string(ndo, ATMSPA(ap)))); atmarp_addr_print(ndo, ATMSHA(ap), ATMSHRD_LEN(ap), ATMSSA(ap), ATMSSLN(ap)); break; @@ -271,11 +269,11 @@ atmarp_print(netdissect_options *ndo, case ARPOP_INVREPLY: atmarp_addr_print(ndo, ATMSHA(ap), ATMSHRD_LEN(ap), ATMSSA(ap), ATMSSLN(ap)); - ND_PRINT((ndo, "at %s", ipaddr_string(ATMSPA(ap)))); + ND_PRINT((ndo, "at %s", ipaddr_string(ndo, ATMSPA(ap)))); break; case ARPOP_NAK: - ND_PRINT((ndo, "for %s", ipaddr_string(ATMSPA(ap)))); + ND_PRINT((ndo, "for %s", ipaddr_string(ndo, ATMSPA(ap)))); break; default: @@ -288,7 +286,7 @@ atmarp_print(netdissect_options *ndo, return; trunc: - ND_PRINT((ndo, "[|ARP]")); + ND_PRINT((ndo, "%s", tstr)); } void @@ -305,11 +303,11 @@ arp_print(netdissect_options *ndo, pro = PRO(ap); op = OP(ap); - + /* if its ATM then call the ATM ARP printer for Frame-relay ARP most of the fields are similar to Ethernet so overload the Ethernet Printer - and set the linkaddr type for linkaddr_string() accordingly */ + and set the linkaddr type for linkaddr_string(ndo, ) accordingly */ switch(hrd) { case ARPHRD_ATM2225: @@ -317,19 +315,20 @@ arp_print(netdissect_options *ndo, return; case ARPHRD_FRELAY: linkaddr = LINKADDR_FRELAY; + break; default: linkaddr = LINKADDR_ETHER; break; } if (!ND_TTEST2(*ar_tpa(ap), PROTO_LEN(ap))) { - ND_PRINT((ndo, "[|ARP]")); + ND_PRINT((ndo, "%s", tstr)); ND_DEFAULTPRINT((const u_char *)ap, length); return; } if (!ndo->ndo_eflag) { - ND_PRINT((ndo, "ARP")); + ND_PRINT((ndo, "ARP, ")); } /* print hardware type/len and proto type/len */ @@ -337,8 +336,7 @@ arp_print(netdissect_options *ndo, PROTO_LEN(ap) != 4 || HRD_LEN(ap) == 0 || ndo->ndo_vflag) { - ND_PRINT((ndo, "%s%s (len %u), %s (len %u)", - ndo->ndo_eflag ? "" : ", ", + ND_PRINT((ndo, "%s (len %u), %s (len %u)", tok2str(arphrd_values, "Unknown Hardware (%u)", hrd), HRD_LEN(ap), tok2str(ethertype_values, "Unknown Protocol (0x%04x)", pro), @@ -351,46 +349,48 @@ arp_print(netdissect_options *ndo, } /* print operation */ - printf(", %s ", tok2str(arpop_values, "Unknown (%u)", op)); + ND_PRINT((ndo, "%s%s ", + ndo->ndo_vflag ? ", " : "", + tok2str(arpop_values, "Unknown (%u)", op))); switch (op) { case ARPOP_REQUEST: - ND_PRINT((ndo, "who-has %s", ipaddr_string(TPA(ap)))); + ND_PRINT((ndo, "who-has %s", ipaddr_string(ndo, TPA(ap)))); if (memcmp((const char *)ezero, (const char *)THA(ap), HRD_LEN(ap)) != 0) ND_PRINT((ndo, " (%s)", - linkaddr_string(THA(ap), linkaddr, HRD_LEN(ap)))); - ND_PRINT((ndo, " tell %s", ipaddr_string(SPA(ap)))); + linkaddr_string(ndo, THA(ap), linkaddr, HRD_LEN(ap)))); + ND_PRINT((ndo, " tell %s", ipaddr_string(ndo, SPA(ap)))); break; case ARPOP_REPLY: ND_PRINT((ndo, "%s is-at %s", - ipaddr_string(SPA(ap)), - linkaddr_string(SHA(ap), linkaddr, HRD_LEN(ap)))); + ipaddr_string(ndo, SPA(ap)), + linkaddr_string(ndo, SHA(ap), linkaddr, HRD_LEN(ap)))); break; case ARPOP_REVREQUEST: ND_PRINT((ndo, "who-is %s tell %s", - linkaddr_string(THA(ap), linkaddr, HRD_LEN(ap)), - linkaddr_string(SHA(ap), linkaddr, HRD_LEN(ap)))); + linkaddr_string(ndo, THA(ap), linkaddr, HRD_LEN(ap)), + linkaddr_string(ndo, SHA(ap), linkaddr, HRD_LEN(ap)))); break; case ARPOP_REVREPLY: ND_PRINT((ndo, "%s at %s", - linkaddr_string(THA(ap), linkaddr, HRD_LEN(ap)), - ipaddr_string(TPA(ap)))); + linkaddr_string(ndo, THA(ap), linkaddr, HRD_LEN(ap)), + ipaddr_string(ndo, TPA(ap)))); break; case ARPOP_INVREQUEST: ND_PRINT((ndo, "who-is %s tell %s", - linkaddr_string(THA(ap), linkaddr, HRD_LEN(ap)), - linkaddr_string(SHA(ap), linkaddr, HRD_LEN(ap)))); + linkaddr_string(ndo, THA(ap), linkaddr, HRD_LEN(ap)), + linkaddr_string(ndo, SHA(ap), linkaddr, HRD_LEN(ap)))); break; case ARPOP_INVREPLY: ND_PRINT((ndo,"%s at %s", - linkaddr_string(THA(ap), linkaddr, HRD_LEN(ap)), - ipaddr_string(TPA(ap)))); + linkaddr_string(ndo, SHA(ap), linkaddr, HRD_LEN(ap)), + ipaddr_string(ndo, SPA(ap)))); break; default: @@ -403,7 +403,7 @@ arp_print(netdissect_options *ndo, return; trunc: - ND_PRINT((ndo, "[|ARP]")); + ND_PRINT((ndo, "%s", tstr)); } /*