From: Guy Harris Date: Wed, 25 Nov 2009 21:26:52 +0000 (-0800) Subject: ether_encap_print() is a utility for use by printers for protocols that X-Git-Tag: tcpdump-4.1.0~45 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/878889bc2143ac701b270494d0d809c90a90d6d6 ether_encap_print() is a utility for use by printers for protocols that use Ethernet types, to call the appropriate printer routine for the encapsulated type. IPNET is the only protocol using IPNET types, so ipnet_encap_print() isn't needed. --- diff --git a/netdissect.h b/netdissect.h index ecd0824d..86b66a09 100644 --- a/netdissect.h +++ b/netdissect.h @@ -439,7 +439,6 @@ extern void pptp_print(netdissect_options *,const u_char *, u_int); extern void ipnet_print(netdissect_options *,const u_char *, u_int, u_int); extern u_int ipnet_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *); -extern int ipnet_encap_print(netdissect_options *,u_short, const u_char *, u_int, u_int); #if 0 #ifdef INET6 diff --git a/print-ipnet.c b/print-ipnet.c index d60d981b..32aaeae6 100644 --- a/print-ipnet.c +++ b/print-ipnet.c @@ -8,13 +8,12 @@ #include #include "netdissect.h" +#include "interface.h" #include "addrtoname.h" #include "ipnet.h" #ifdef DLT_IPNET -int ipnet_encap_print(netdissect_options *,u_short, const u_char *, u_int, u_int); - const struct tok ipnet_values[] = { { IPH_AF_INET, "IPv4" }, { IPH_AF_INET6, "IPv6" }, @@ -62,14 +61,27 @@ ipnet_print(struct netdissect_options *ndo, const u_char *p, u_int length, u_int hdr = (ipnet_hdr_t *)p; p += sizeof(ipnet_hdr_t); - if (ipnet_encap_print(ndo, hdr->iph_family, p, length, caplen) == 0) { + switch (hdr->iph_family) { + + case IPH_AF_INET: + ip_print(ndo, p, length); + break; + +#ifdef INET6 + case IPH_AF_INET6: + ip6_print(p, length); + break; +#endif /*INET6*/ + + default: if (!ndo->ndo_eflag) ipnet_hdr_print(ndo, (u_char *)hdr, length + sizeof(ipnet_hdr_t)); if (!ndo->ndo_suppress_default_print) ndo->ndo_default_print(ndo, p, caplen); - } + break; + } } /* @@ -86,42 +98,6 @@ ipnet_if_print(struct netdissect_options *ndo, const struct pcap_pkthdr *h, cons return (sizeof(ipnet_hdr_t)); } -/* - * Prints the packet encapsulated in an Ethernet data segment - * (or an equivalent encapsulation), given the Ethernet type code. - * - * Returns non-zero if it can do so, zero if the ethertype is unknown. - * - * The Ethernet type code is passed through a pointer; if it was - * ETHERTYPE_8021Q, it gets updated to be the Ethernet type of - * the 802.1Q payload, for the benefit of lower layers that might - * want to know what it is. - */ - -int -ipnet_encap_print(struct netdissect_options *ndo, u_short family, const u_char *p, - u_int length, u_int caplen) -{ - recurse: - - switch (family) { - - case IPH_AF_INET: - ip_print(ndo, p, length); - return (1); - -#ifdef INET6 - case IPH_AF_INET6: - ip6_print(p, length); - return (1); -#endif /*INET6*/ - - default: - return(0); - } -} - - /* * Local Variables: * c-style: whitesmith