diff options
author | guy <guy> | 2002-05-29 10:06:24 +0000 |
---|---|---|
committer | guy <guy> | 2002-05-29 10:06:24 +0000 |
commit | 06181bc3ee49e68339905317c5cf5b5e17c11259 (patch) | |
tree | ec012eb8cb9df4df06b369eb4ee9e3517e10f69b /print-token.c | |
parent | f72fe0d0de6eb91663b005b7d061ecebb555d667 (diff) | |
download | tcpdump-06181bc3ee49e68339905317c5cf5b5e17c11259.tar.gz |
Only do "-x" printing in the top-level interface print routine; don't do
it in the routines, called by the top-level routines, to dissect
Ethernet, FDDI, or Token Ring packets, as those routines might also be
called for bridged frames over ATM, and the interface print routine for
ATM will also do "-x" printing.
Diffstat (limited to 'print-token.c')
-rw-r--r-- | print-token.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/print-token.c b/print-token.c index 0f4afedb..1690b3c9 100644 --- a/print-token.c +++ b/print-token.c @@ -25,7 +25,7 @@ */ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-token.c,v 1.14 2002-04-07 09:50:33 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-token.c,v 1.15 2002-05-29 10:06:27 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -101,19 +101,19 @@ static const char *largest_frame[] = { "??" }; -void +u_int token_print(const u_char *p, u_int length, u_int caplen) { const struct token_header *trp; u_short extracted_ethertype; struct ether_header ehdr; - u_int route_len = 0, seg; + u_int route_len = 0, hdr_len = TOKEN_HDRLEN, seg; trp = (const struct token_header *)p; if (caplen < TOKEN_HDRLEN) { printf("[|token-ring]"); - goto out; + return hdr_len; } /* * Get the TR addresses into a canonical form @@ -162,9 +162,10 @@ token_print(const u_char *p, u_int length, u_int caplen) } /* Skip over token ring MAC header and routing information */ - length -= TOKEN_HDRLEN + route_len; - p += TOKEN_HDRLEN + route_len; - caplen -= TOKEN_HDRLEN + route_len; + hdr_len += route_len; + length -= hdr_len; + p += hdr_len; + caplen -= hdr_len; /* Frame Control field determines interpretation of packet */ extracted_ethertype = 0; @@ -193,10 +194,7 @@ token_print(const u_char *p, u_int length, u_int caplen) if (!xflag && !qflag) default_print(p, caplen); } - if (xflag) - default_print(p, caplen); -out: - putchar('\n'); + return (hdr_len); } /* @@ -210,11 +208,21 @@ token_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p) { u_int caplen = h->caplen; u_int length = h->len; + u_int hdr_len; ++infodelay; ts_print(&h->ts); - token_print(p, length, caplen); + hdr_len = token_print(p, length, caplen); + + /* + * If "-x" was specified, print stuff past the Token Ring header, + * if there's anything to print. + */ + if (xflag && caplen > hdr_len) + default_print(p + hdr_len, caplen - hdr_len); + + putchar('\n'); --infodelay; if (infoprint) |