From: Francois-Xavier Le Bail Date: Sat, 9 May 2020 17:32:05 +0000 (+0200) Subject: Print packets for unsupported link-layer protocols in hexadecimal/ASCII X-Git-Tag: tcpdump-4.99-bp~423 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/25687e1a312a3bb63a6e8d7f0af0210a615e24a8 Print packets for unsupported link-layer protocols in hexadecimal/ASCII This avoids to get only: tcpdump: packet printing is not supported for link type XYZ: use -w The default printing is like: 18:45:52.723872 UNSUPPORTED 0x0000: 001f 0000 0540 6078 725d 586d 4d66 4671 .....@`xr]XmMfFq 0x0010: 6d58 4d5c 7159 5f71 565c 556c 4e71 7171 mXM\qY_qV\UlNqqq 0x0020: 7171 7171 7171 7171 7171 7171 7171 5180 qqqqqqqqqqqqqqQ. 0x0030: 7f7f .. 18:45:52.755995 UNSUPPORTED 0x0000: 001f 0000 0540 6043 7851 807f 7f .....@`CxQ... [...] --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 832f20c7..4ea6deca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1077,6 +1077,7 @@ set(NETDISSECT_SOURCE_LIST_C print-token.c print-udld.c print-udp.c + print-unsupported.c print-usb.c print-vjc.c print-vqp.c diff --git a/Makefile.in b/Makefile.in index 0fe4d729..25e43ab6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -233,6 +233,7 @@ LIBNETDISSECT_SRC=\ print-token.c \ print-udld.c \ print-udp.c \ + print-unsupported.c \ print-usb.c \ print-vjc.c \ print-vqp.c \ diff --git a/netdissect.h b/netdissect.h index 65a0d987..1c83361e 100644 --- a/netdissect.h +++ b/netdissect.h @@ -524,6 +524,7 @@ extern u_int sll2_if_print IF_PRINTER_ARGS; extern void sunatm_if_print IF_PRINTER_ARGS; extern void symantec_if_print IF_PRINTER_ARGS; extern u_int token_if_print IF_PRINTER_ARGS; +extern void unsupported_if_print IF_PRINTER_ARGS; extern void usb_linux_48_byte_if_print IF_PRINTER_ARGS; extern void usb_linux_64_byte_if_print IF_PRINTER_ARGS; extern u_int vsock_if_print IF_PRINTER_ARGS; diff --git a/print-unsupported.c b/print-unsupported.c new file mode 100644 index 00000000..009cf6f9 --- /dev/null +++ b/print-unsupported.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 The TCPDUMP project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that: (1) source code + * distributions retain the above copyright notice and this paragraph + * in its entirety, and (2) distributions including binary code include + * the above copyright notice and this paragraph in its entirety in + * the documentation or other materials provided with the distribution. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND + * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT + * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE. + */ + +/* \summary: unsupported link-layer protocols printer */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "netdissect-stdinc.h" + +#include "netdissect.h" + +void +unsupported_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, + const u_char *p) +{ + ndo->ndo_protocol = "unsupported"; + nd_print_protocol_caps(ndo); + hex_and_ascii_print(ndo, "\n\t", p, h->caplen); +} diff --git a/print.c b/print.c index 7224e2e6..a7f006f9 100644 --- a/print.c +++ b/print.c @@ -379,20 +379,11 @@ has_printer(int type) if_printer_t get_if_printer(netdissect_options *ndo, int type) { - const char *dltname; if_printer_t printer; printer = lookup_printer(ndo, type); - if (printer.printer == NULL) { - dltname = pcap_datalink_val_to_name(type); - if (dltname != NULL) - (*ndo->ndo_error)(ndo, S_ERR_ND_NO_PRINTER, - "packet printing is not supported for link type %s: use -w", - dltname); - else - (*ndo->ndo_error)(ndo, S_ERR_ND_NO_PRINTER, - "packet printing is not supported for link type %d: use -w", type); - } + if (printer.printer == NULL) + printer.void_printer = unsupported_if_print; return printer; }