* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.182 2002-04-25 04:31:42 guy Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.183 2002-05-29 10:06:24 guy Exp $ (LBL)
*/
#ifndef tcpdump_interface_h
extern void ether_print(const u_char *, u_int, u_int);
extern void ether_if_print(u_char *, const struct pcap_pkthdr *,
const u_char *);
-extern void token_print(const u_char *, u_int, u_int);
+extern u_int token_print(const u_char *, u_int, u_int);
extern void token_if_print(u_char *, const struct pcap_pkthdr *,
const u_char *);
extern void fddi_print(const u_char *, u_int, u_int);
*/
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.67 2002-04-07 09:50:31 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.68 2002-05-29 10:06:26 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
if (caplen < ETHER_HDRLEN) {
printf("[|ether]");
- goto out;
+ return;
}
if (eflag)
if (!xflag && !qflag)
default_print(p, caplen);
}
- if (xflag)
- default_print(p, caplen);
- out:
- putchar('\n');
}
/*
ether_print(p, length, caplen);
+ /*
+ * If "-x" was specified, print stuff past the Ethernet header,
+ * if there's anything to print.
+ */
+ if (xflag && caplen > ETHER_HDRLEN)
+ default_print(p + ETHER_HDRLEN, caplen - ETHER_HDRLEN);
+
+ putchar('\n');
+
--infodelay;
if (infoprint)
info(0);
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-fddi.c,v 1.54 2002-04-07 09:50:32 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-fddi.c,v 1.55 2002-05-29 10:06:27 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
if (caplen < FDDI_HDRLEN) {
printf("[|fddi]");
- goto out;
+ return;
}
/*
* Get the FDDI addresses into a canonical form
if (!xflag && !qflag)
default_print(p, caplen);
}
- if (xflag)
- default_print(p, caplen);
-out:
- putchar('\n');
}
/*
fddi_print(p, length, caplen);
+ /*
+ * If "-x" was specified, print stuff past the FDDI header,
+ * if there's anything to print.
+ */
+ if (xflag && caplen > FDDI_HDRLEN)
+ default_print(p + FDDI_HDRLEN, caplen - FDDI_HDRLEN);
+
+ putchar('\n');
+
--infodelay;
if (infoprint)
info(0);
*/
#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
"??"
};
-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
}
/* 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;
if (!xflag && !qflag)
default_print(p, caplen);
}
- if (xflag)
- default_print(p, caplen);
-out:
- putchar('\n');
+ return (hdr_len);
}
/*
{
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)