summaryrefslogtreecommitdiff
path: root/print-ipnet.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2009-11-25 13:26:52 -0800
committerMichael Richardson <mcr@sandelman.ottawa.on.ca>2010-01-10 14:32:12 -0500
commit878889bc2143ac701b270494d0d809c90a90d6d6 (patch)
tree48037454c6203aa443ada2d0f8b4d2a8eecdd32d /print-ipnet.c
parent94feff51dbb3be0d4d9755a4eb71a0daf3118fdb (diff)
downloadtcpdump-878889bc2143ac701b270494d0d809c90a90d6d6.tar.gz
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.
Diffstat (limited to 'print-ipnet.c')
-rw-r--r--print-ipnet.c56
1 files changed, 16 insertions, 40 deletions
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 <pcap.h>
#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;
+ }
}
/*
@@ -87,42 +99,6 @@ ipnet_if_print(struct netdissect_options *ndo, const struct pcap_pkthdr *h, cons
}
/*
- * 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
* c-basic-offset: 8