X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/b7f937175ac55a7dc5b5d23e3f0078fcaf92ff44..258fb362b92f0a61ab0fd5d8bc69fa798e7e1c8b:/tcpdump.c diff --git a/tcpdump.c b/tcpdump.c index 1889ce30..9bf61bbc 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -30,7 +30,7 @@ static const char copyright[] _U_ = "@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\ The Regents of the University of California. All rights reserved.\n"; static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.245 2004-06-15 23:09:46 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.248 2004-09-04 00:08:04 guy Exp $ (LBL)"; #endif /* @@ -154,6 +154,9 @@ static struct printer printers[] = { { sl_bsdos_if_print, DLT_SLIP_BSDOS }, #endif { ppp_if_print, DLT_PPP }, +#ifdef DLT_PPP_WITHDIRECTION + { ppp_if_print, DLT_PPP_WITHDIRECTION }, +#endif #ifdef DLT_PPP_BSDOS { ppp_bsdos_if_print, DLT_PPP_BSDOS }, #endif @@ -388,7 +391,7 @@ static int tcpdump_printf(netdissect_options *ndo _U_, va_end(args); return ret; -}; +} int main(int argc, char **argv) @@ -699,7 +702,6 @@ main(int argc, char **argv) break; case 'X': - ++xflag; ++Xflag; break; @@ -1194,7 +1196,26 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) /* * Include the link-layer header. */ - default_print(sp, h->caplen); + hex_print("\n\t", sp, h->caplen); + } else { + /* + * Don't include the link-layer header - and if + * we have nothing past the link-layer header, + * print nothing. + */ + if (h->caplen > hdrlen) + hex_print("\n\t", sp + hdrlen, + h->caplen - hdrlen); + } + } else if (Xflag) { + /* + * Print the raw packet data. + */ + if (Xflag > 1) { + /* + * Include the link-layer header. + */ + ascii_print("\n\t", sp, h->caplen); } else { /* * Don't include the link-layer header - and if @@ -1202,7 +1223,7 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) * print nothing. */ if (h->caplen > hdrlen) - default_print(sp + hdrlen, + ascii_print("\n\t", sp + hdrlen, h->caplen - hdrlen); } } @@ -1247,7 +1268,7 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) void default_print(register const u_char *bp, register u_int length) { - ascii_print("\n\t", bp, length); /* pass on lf and identation string */ + ascii_print("\n\t", bp, length); /* pass on lf and identation string */ } #ifdef SIGINFO @@ -1327,7 +1348,7 @@ usage(void) /* VARARGS */ -void +static void ndo_error(netdissect_options *ndo _U_, const char *fmt, ...) { va_list ap; @@ -1346,7 +1367,7 @@ ndo_error(netdissect_options *ndo _U_, const char *fmt, ...) } /* VARARGS */ -void +static void ndo_warning(netdissect_options *ndo _U_, const char *fmt, ...) { va_list ap;