From: Francois-Xavier Le Bail Date: Sun, 22 Dec 2024 14:12:56 +0000 (+0100) Subject: Add sub-second packet timestamp checks for invalid micro/nano X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/f08d60d42d60adce6e5b374882fc2035972730f4 Add sub-second packet timestamp checks for invalid micro/nano Now prints e.g.: 2 17:16:10.1000000 (invalid ms) IP [...] 3 17:16:10.2147483648 (invalid ms) IP [...] or 2 17:16:10.1000000000 (invalid ns) IP [...] 3 17:16:10.2147483648 (invalid ns) IP [...] Add two test files. --- diff --git a/tests/TESTLIST b/tests/TESTLIST index a6ffc3b0..ae9929b3 100644 --- a/tests/TESTLIST +++ b/tests/TESTLIST @@ -38,6 +38,10 @@ tcp-handshake-nano-ttt tcp-handshake-nano.pcap tcp-handshake-nano-ttt.out -ttt - tcp-handshake-nano-tttt tcp-handshake-nano.pcap tcp-handshake-nano-tttt.out -tttt -q --nano SPECIAL_t tcp-handshake-nano-ttttt tcp-handshake-nano.pcap tcp-handshake-nano-ttttt.out -ttttt -q --nano SPECIAL_t +# Invalid timestamps, micro and nano precision +timestamp_invalid_micro timestamp_invalid_micro.pcap timestamp_invalid_micro.out -q SPECIAL_t +timestamp_invalid_nano timestamp_invalid_nano.pcap timestamp_invalid_nano.out -q --nano SPECIAL_t + # TCP with data in the RST segment tcp_rst_data tcp_rst_data.pcap tcp_rst_data-v.out -v tcp_rst_data tcp_rst_data.pcap tcp_rst_data.out diff --git a/tests/timestamp_invalid_micro.out b/tests/timestamp_invalid_micro.out new file mode 100644 index 00000000..d980854b --- /dev/null +++ b/tests/timestamp_invalid_micro.out @@ -0,0 +1,3 @@ + 1 17:16:09.999999 IP 131.155.215.69.46656 > 137.116.81.94.80: tcp 0 + 2 17:16:10.1000000 (invalid ms) IP 137.116.81.94.80 > 131.155.215.69.46656: tcp 0 + 3 17:16:10.2147483648 (invalid ms) IP 131.155.215.69.46656 > 137.116.81.94.80: tcp 0 diff --git a/tests/timestamp_invalid_micro.pcap b/tests/timestamp_invalid_micro.pcap new file mode 100644 index 00000000..42859358 Binary files /dev/null and b/tests/timestamp_invalid_micro.pcap differ diff --git a/tests/timestamp_invalid_nano.out b/tests/timestamp_invalid_nano.out new file mode 100644 index 00000000..be49a38a --- /dev/null +++ b/tests/timestamp_invalid_nano.out @@ -0,0 +1,3 @@ + 1 17:16:09.999999999 IP 131.155.215.69.46656 > 137.116.81.94.80: tcp 0 + 2 17:16:10.1000000000 (invalid ns) IP 137.116.81.94.80 > 131.155.215.69.46656: tcp 0 + 3 17:16:10.2147483648 (invalid ns) IP 131.155.215.69.46656 > 137.116.81.94.80: tcp 0 diff --git a/tests/timestamp_invalid_nano.pcap b/tests/timestamp_invalid_nano.pcap new file mode 100644 index 00000000..da45ad49 Binary files /dev/null and b/tests/timestamp_invalid_nano.pcap differ diff --git a/util-print.c b/util-print.c index 47823aec..b67e8a18 100644 --- a/util-print.c +++ b/util-print.c @@ -216,10 +216,14 @@ ts_frac_print(netdissect_options *ndo, const struct timeval *tv) case PCAP_TSTAMP_PRECISION_MICRO: ND_PRINT(".%06u", (unsigned)tv->tv_usec); + if ((unsigned)tv->tv_usec > ND_MICRO_PER_SEC - 1) + ND_PRINT(" (invalid ms)"); break; case PCAP_TSTAMP_PRECISION_NANO: ND_PRINT(".%09u", (unsigned)tv->tv_usec); + if ((unsigned)tv->tv_usec > ND_NANO_PER_SEC - 1) + ND_PRINT(" (invalid ns)"); break; default: @@ -228,6 +232,8 @@ ts_frac_print(netdissect_options *ndo, const struct timeval *tv) } #else ND_PRINT(".%06u", (unsigned)tv->tv_usec); + if ((unsigned)tv->tv_usec > ND_MICRO_PER_SEC - 1) + ND_PRINT(" (invalid ms)"); #endif }