16 months agoremove redundant ND_TCHECK, let GET_ routines handle checks mcr-macro-update-1 875/head
Michael Richardson [Sun, 20 Sep 2020 16:33:44 +0000 (12:33 -0400)] 
remove redundant ND_TCHECK, let GET_ routines handle checks

16 months agoLSP ping: Fix testing of TimeStamp Received.
Denis Ovsienko [Sun, 20 Sep 2020 15:07:19 +0000 (16:07 +0100)] 
LSP ping: Fix testing of TimeStamp Received.

"(int_part != 0) && (fraction != 0)" matches a value that has both
seconds and seconds fraction set to a non-zero value, hence it leaves
zero seconds (0.123) and exact seconds (123.0) out. This bug originates
in commit d1b0faed from 2004.

Fix the expression and update a test that, although prints its only
Receiver Timestamp as 0.000000000, in fact has seconds set to 0 and
seconds fraction set to 2.

16 months agoUpdate LSP ping: timestamps are NTP int+fraction
Bill Fenner [Fri, 18 Sep 2020 02:01:01 +0000 (19:01 -0700)] 
Update LSP ping: timestamps are NTP int+fraction

During development of LSP ping, the embedded timestamps were
changed from struct timeval to NTP time, so update the printer
to match the RFC.

(Cherry-picked from GH #874.)

16 months agoIP: Revert the commit 38b7ae42 and partially the commit aad6ac30
Francois-Xavier Le Bail [Sun, 20 Sep 2020 14:43:19 +0000 (16:43 +0200)] 
IP: Revert the commit 38b7ae42 and partially the commit aad6ac30

Add back a ND_TCHECK_4() call to print the IP source and destination
addresses in truncation cases.

Add a comment to explain why the ND_TCHECK_4 is needed.

16 months agoIP: Update ip_printroute() to a void function
Francois-Xavier Le Bail [Sun, 20 Sep 2020 13:25:43 +0000 (15:25 +0200)] 
IP: Update ip_printroute() to a void function

The function no more return in case of truncation (longjmp() because
no more ND_TCHECK_4()).

This is a follow-up to commit aad6ac30.

16 months agoIP: Replace a magic number in the timestamp option processing
Francois-Xavier Le Bail [Sun, 20 Sep 2020 11:50:39 +0000 (13:50 +0200)] 
IP: Replace a magic number in the timestamp option processing

Remove the '2' value case absent from RFC 781.
Remove a comment.

16 months agoOpenFlow 1.0: Lose 4 more ND_TCHECK_LEN() calls.
Denis Ovsienko [Sat, 19 Sep 2020 01:24:12 +0000 (02:24 +0100)] 
OpenFlow 1.0: Lose 4 more ND_TCHECK_LEN() calls.

ND_TCHECK_LEN() just before an unconditional GET_ETHERADDR_STRING() is
excess. ND_TCHECK_LEN() just before a conditional GET_ETHERADDR_STRING()
can be removed where there is a subsequent unconditional GET_ call (this
is not specific to GET_ETHERADDR_STRING(), for example, unconditional
fetch of "dl_type" makes sure that it is safe to have the fetch of
"dl_vlan_pcp" conditional).

16 months agoUse MAC_ADDR_LEN in a few more places. [skip ci]
Denis Ovsienko [Sat, 19 Sep 2020 00:44:59 +0000 (01:44 +0100)] 
Use MAC_ADDR_LEN in a few more places. [skip ci]

16 months agoLoopback/CTP: Fixup loopback_print() declaration. [skip ci]
Denis Ovsienko [Fri, 18 Sep 2020 23:54:41 +0000 (00:54 +0100)] 
Loopback/CTP: Fixup loopback_print() declaration. [skip ci]

16 months agoAHCP: Modernize packet parsing style.
Denis Ovsienko [Fri, 18 Sep 2020 23:50:40 +0000 (00:50 +0100)] 
AHCP: Modernize packet parsing style.

Similarly to earlier commits, follow up from commit 19b51ded and make
changes along the same lines. Also make all functions void, lose a few
excess ND_TCHECK_LEN() instances, update comments, reduce scope for a
couple variables, rearrange some line breaks and call ND_TCHECK_LEN()
for unknown protocol versions.

16 months agoLSP ping: Put the RFC number right. [skip ci]
Denis Ovsienko [Fri, 18 Sep 2020 20:21:08 +0000 (21:21 +0100)] 
LSP ping: Put the RFC number right. [skip ci]

16 months agoAoE: Modernize packet parsing style.
Denis Ovsienko [Fri, 18 Sep 2020 03:05:04 +0000 (04:05 +0100)] 
AoE: Modernize packet parsing style.

Similarly to the previous commit, follow up from commit 5d938abe and
simplify the pointer and size arithmetics. Lose a ND_TCHECK_LEN() before
nd_printn() so the latter can print as much of the counted string as
possible. Use nd_trunc().

16 months agoLoopback/CTP: Modernize packet parsing style.
Denis Ovsienko [Fri, 18 Sep 2020 01:27:43 +0000 (02:27 +0100)] 
Loopback/CTP: Modernize packet parsing style.

The change made in commit bdd97f54 was safe, but was slightly incorrect.

Before the change the decoder used the _declared_ end of packet (the
initial "cp" + the initial "len") as the target of how much data to try
to decode, and whilst trying to do that it could cross the _captured_ end
of packet (ndo_snapend) and give up complaining, so the output would
correctly indicate there was supposed to be more data beyond the
unexpected snapshot end.

After the change the decoder started to use the captured end of packet to
tell where the packet ends, so it would never cross ndo_snapend, but it
would interpret the packet data as if the missing part was never supposed
to be there and would thus decode truncated packets incorrectly.

In order to eliminate this space for misinterpretation, remove the "ep"
pointer and change the code both to advance "cp" and to decrease "len" as
it is going through the protocol structures, so the part of the packet
that is supposed to be present but has not been decoded yet can be
addressed by just "cp" and "len" (like it is done in many functions
elsewhere). Let the GET_ macros guard the snapshot end and use nd_trunc()
to handle the remaining ND_TCHECK_LEN() instances.

Articulate the part of the message sized by skipCount.

16 months agoTravis CI: Disable some builds in matrix because they currently fail
Francois-Xavier Le Bail [Fri, 18 Sep 2020 18:30:42 +0000 (20:30 +0200)] 
Travis CI: Disable some builds in matrix because they currently fail

The 'BUILD_LIBPCAP=yes CMAKE=yes' builds currently fail.


16 months agoUse a switch to manage the setjmp() return values
Francois-Xavier Le Bail [Fri, 18 Sep 2020 11:17:39 +0000 (13:17 +0200)] 
Use a switch to manage the setjmp() return values

Also rename 'ndo_truncated' to 'ndo_early_end'.

The current case (truncated packet) uses ND_TRUNCATED value.

Prepare to add other cases when the current packet cannot be processed
any more ('Invalid' cases, etc.).

16 months agoIntroduce and use nd_trunc(). [skip ci]
Denis Ovsienko [Wed, 16 Sep 2020 22:46:20 +0000 (23:46 +0100)] 
Introduce and use nd_trunc(). [skip ci]

This new function is a part of item 2 of the longjmp() conversion plan
Francois-Xavier proposed on tcpdump-workers. As a noreturn function, it
can fit uniformly at the end of any decoder function, regardless if void
or not, for example:

const u_char *
something_print (netdissect_options *ndo, const u_char *cp, u_int len)
  /* (some normal decoding) */
  /* (some more normal decoding) */
  return cp + len;

  /* The compiler does not warn about a missing return. */

16 months agoOpenFlow 1.0: Lose 7 ND_TCHECK_LEN() calls.
Denis Ovsienko [Wed, 16 Sep 2020 00:38:07 +0000 (01:38 +0100)] 
OpenFlow 1.0: Lose 7 ND_TCHECK_LEN() calls.

Considering a protocol field that has a known size and contains a
zero-padded string, in a code of this particular form:

ND_TCHECK_LEN(field_start, field_length);
nd_print(ndo, field_start, field_start + field_length);

...the only effect of the ND_TCHECK_LEN() call is that when the protocol
field is not entirely within the packet buffer, the code before
triggering a longjmp() prints nothing instead of printing the part of
the field that is within the packet buffer. Thus remove these instances
of ND_TCHECK_LEN(), so the output better represents the captured data.

16 months agoWB: Reorder printing of wb-id messages.
Denis Ovsienko [Tue, 15 Sep 2020 14:53:08 +0000 (15:53 +0100)] 
WB: Reorder printing of wb-id messages.

As struct pkt_id informally notes it, the site name string follows
"seqptr's", which is a sequence of zero or more (as encoded in the "nid"
field) struct id_off items. Try to print the string after trying to
print the sequence, so the output makes as much sense as possible for
truncated packets. Also remove one ND_TTEST_LEN() before a nd_print() so
the latter prints as much data as is available and deals with the
snapshot end.

While at it, rename and retype a pointer for clarity and lose two excess
type casts, also add a length sanity check.

16 months agoAdd more "-v" detail to tcpdump(1) for GH #380. [skip ci]
Denis Ovsienko [Tue, 15 Sep 2020 10:54:18 +0000 (11:54 +0100)] 
Add more "-v" detail to tcpdump(1) for GH #380. [skip ci]

Capture what Guy has figured out so far.

16 months agoLose a forward declaration in print-ascii.c. [skip ci]
Denis Ovsienko [Sun, 13 Sep 2020 21:53:50 +0000 (22:53 +0100)] 
Lose a forward declaration in print-ascii.c. [skip ci]

16 months agoLose underscores in some macro names. [skip ci]
Denis Ovsienko [Sun, 13 Sep 2020 15:06:43 +0000 (16:06 +0100)] 
Lose underscores in some macro names. [skip ci]

16 months agoRemove a useless comment
Francois-Xavier Le Bail [Sat, 12 Sep 2020 12:06:11 +0000 (14:06 +0200)] 
Remove a useless comment

The tags file generated by Exuberant Ctags is the same after this change.

[skip ci]

16 months agoOpenFlow 1.0: Fixup some indentation. [skip ci]
Denis Ovsienko [Fri, 11 Sep 2020 20:14:40 +0000 (21:14 +0100)] 
OpenFlow 1.0: Fixup some indentation. [skip ci]

In this file an ASCII tab character means "one level of indentation,
whatever amount of whitespace an editor uses to _display_ it", and a
sequence of several spaces means "exactly this many spaces". Sometimes
they are mixed together for a specific purpose, which is easy to see in
conditional complex print statements: the ND_PRINT() line is one more
level of indentation deeper than the if(), and the wrapped remainder in
addition to that is as many spaces deeper as necessary to align with the
first argument. It is not the simplest thing to explain, but easy to see
how it works in the actual code.

Wrap and unwrap some lines to accommodate the code churn, assuming that
one level of indentation is worth at most 8 positions and that most lines
should look at most 80 characters long unless there is a good reason to
keep them longer.

16 months agoRevert partially the commit 21b1273
Francois-Xavier Le Bail [Fri, 11 Sep 2020 08:05:43 +0000 (10:05 +0200)] 
Revert partially the commit 21b1273

This change add back 4 ND_TCHECK_n() because their removal may be unsafe.
(via Denis comment)

16 months agoRT6: Remove one more redundant ND_TCHECK_1() call
Francois-Xavier Le Bail [Thu, 10 Sep 2020 15:37:28 +0000 (17:37 +0200)] 
RT6: Remove one more redundant ND_TCHECK_1() call

GET_U_1() is used.

16 months agoRT6: Print [Deprecated] for type 0 (RFC 5095)
Francois-Xavier Le Bail [Thu, 10 Sep 2020 15:23:11 +0000 (17:23 +0200)] 
RT6: Print [Deprecated] for type 0 (RFC 5095)

16 months agoRT6: Update some printings for coherency
Francois-Xavier Le Bail [Thu, 10 Sep 2020 13:49:09 +0000 (15:49 +0200)] 
RT6: Update some printings for coherency

In upper case (like 'IP6'), via a nd_print_protocol_caps() call.

Before: srcrt (len=48, type=0, segleft=48 [|rt6]
After:  RT6 (len=48, type=0, segleft=48 [|rt6]

rt6 choosen because it's in file name (print-rt6.c), function name
(rt6_print) and set in ndo->ndo_protocol ("rt6").

Print the protocol name even if the packet is truncated at the beginning.
Use nd_print_trunc().

16 months agoMake version and usage printing more consistent. [skip ci]
Denis Ovsienko [Thu, 10 Sep 2020 14:01:53 +0000 (15:01 +0100)] 
Make version and usage printing more consistent. [skip ci]

When there is an error, print to stderr and exit with a non-0 status.
Otherwise print to stdout and exit with a status 0. See also tcpslice
commit 5015245.

16 months agoRemove 15 now redundant ND_TCHECK_n() calls
Francois-Xavier Le Bail [Thu, 10 Sep 2020 11:24:28 +0000 (13:24 +0200)] 
Remove 15 now redundant ND_TCHECK_n() calls


They are redundant because they are followed by a GET_.*_n(e) call,
same n, same e, which do the bounds check.

Remove unused 'trunc' label(s) and most associated code(s).

16 months agoInstall into bindir, not sbindir. [skip ci]
Denis Ovsienko [Thu, 10 Sep 2020 11:54:41 +0000 (12:54 +0100)] 
Install into bindir, not sbindir. [skip ci]

As discussed on GitHub and on the mailing list, install tcpdump into
bindir because it can be useful to non-root users too, in ways that do
not involve doing live packet captures. Original idea by Guy Harris.

16 months agoForCES: Remove 12 more ND_TCHECK calls.
Denis Ovsienko [Thu, 10 Sep 2020 02:44:44 +0000 (03:44 +0100)] 
ForCES: Remove 12 more ND_TCHECK calls.

Remove ND_TCHECK_SIZE() immediately before two GET_BE_U_2() calls that
together fully cover a struct forces_tlv.

Ditto before two GET_BE_U_4() calls and a struct forces_ilv.

Remove ND_TCHECK_SIZE() immediately before ilv_valid(), which always
checks that forces_ilv->length is within bounds, which implies that
forces_ilv->type is also within bounds, which means the whole 8-byte
structure is within bounds.

Ditto before GET_BE_U_2() on the length field of a struct forces_tlv.

16 months agoRemove 7 more ND_TCHECK calls.
Denis Ovsienko [Tue, 8 Sep 2020 15:16:38 +0000 (16:16 +0100)] 
Remove 7 more ND_TCHECK calls.

16 months agoPIM: Remove an out-of-date comment. [skip ci]
Denis Ovsienko [Tue, 8 Sep 2020 15:07:38 +0000 (16:07 +0100)] 
PIM: Remove an out-of-date comment. [skip ci]

Speaking of struct pim, pim_print() indeed looks only into pim_typever,
but pimv2_print() among many other things covers the whole structure.

16 months agoAdd more entries to .mailmap. [skip ci]
Denis Ovsienko [Tue, 8 Sep 2020 14:59:53 +0000 (15:59 +0100)] 
Add more entries to .mailmap. [skip ci]

This revision covers all the commits generated with cvs2git in 2009 plus
one git author.

16 months agoRemove a now redundant ND_TCHECK_LEN() call
Francois-Xavier Le Bail [Tue, 8 Sep 2020 07:44:13 +0000 (09:44 +0200)] 
Remove a now redundant ND_TCHECK_LEN() call

It is redundant because it is followed by a GET_IPADDR_STRING().

16 months agoRemove some now redundant ND_TCHECK_LEN(e, sizeof(nd_ipv4)) calls
Francois-Xavier Le Bail [Mon, 7 Sep 2020 09:22:49 +0000 (11:22 +0200)] 
Remove some now redundant ND_TCHECK_LEN(e, sizeof(nd_ipv4)) calls

They are redundant because they are followed by a GET_IPADDR_STRING(e)
call, same e, which do the bounds check.

Remove unused 'trunc' label(s) and associated code(s).

16 months agoRemove some now redundant ND_TCHECK_4() calls
Francois-Xavier Le Bail [Sat, 5 Sep 2020 19:56:50 +0000 (21:56 +0200)] 
Remove some now redundant ND_TCHECK_4() calls


They are redundant because they are followed by a GET_IPADDR_STRING(e)
call, same e, which do the bounds check.

Remove unused 'trunc' labels and associated codes.

Update the output of a test accordingly.

16 months agoRemove a now redundant ND_TCHECK_LEN() call
Francois-Xavier Le Bail [Tue, 8 Sep 2020 10:01:28 +0000 (12:01 +0200)] 
Remove a now redundant ND_TCHECK_LEN() call

It is redundant because it is followed by a GET_IP6ADDR_STRING().

16 months agoFR: Fix a typo in a comment.
Denis Ovsienko [Tue, 8 Sep 2020 04:10:20 +0000 (05:10 +0100)] 
FR: Fix a typo in a comment.

16 months agoRemove 96 assorted ND_TCHECK calls.
Denis Ovsienko [Tue, 8 Sep 2020 04:04:58 +0000 (05:04 +0100)] 
Remove 96 assorted ND_TCHECK calls.

Remove a number of instances that do not match common patterns and have
the only substantial effect on the code flow that a truncated packet
triggers "goto trunc" instead of longjmp(). (In a few cases this change
can increase the number of fields printed before giving up.)

16 months agoRemove some now redundant ND_TCHECK_LEN(e, sizeof(nd_ipv6)) calls
Francois-Xavier Le Bail [Sat, 5 Sep 2020 21:25:16 +0000 (23:25 +0200)] 
Remove some now redundant ND_TCHECK_LEN(e, sizeof(nd_ipv6)) calls

They are redundant because they are followed by a GET_IP6ADDR_STRING(e)
call, same e, which do the bounds check.

Remove unused 'trunc' label(s) and associated code(s).

16 months agoRemove some now redundant ND_TCHECK_16() calls
Francois-Xavier Le Bail [Sat, 5 Sep 2020 19:40:32 +0000 (21:40 +0200)] 
Remove some now redundant ND_TCHECK_16() calls


They are redundant because they are followed by a GET_IP6ADDR_STRING(e)
call, same e, which do the bounds check.

16 months agoBGP: Add two comments
Francois-Xavier Le Bail [Mon, 7 Sep 2020 10:14:57 +0000 (12:14 +0200)] 
BGP: Add two comments

16 months agoApple IPoIEEE1394: Use a GET_LINKADDR_STRING() call
Francois-Xavier Le Bail [Mon, 7 Sep 2020 09:44:29 +0000 (11:44 +0200)] 
Apple IPoIEEE1394: Use a GET_LINKADDR_STRING() call

GET_LINKADDR_STRING do the bounds check.

16 months agoRemove now unused 'tests/TESTonce'
Francois-Xavier Le Bail [Sun, 6 Sep 2020 19:35:49 +0000 (21:35 +0200)] 
Remove now unused 'tests/TESTonce'

Update a comment.

16 months agoRemove many (762) now redundant ND_TCHECK_n() calls
Francois-Xavier Le Bail [Sat, 5 Sep 2020 17:40:32 +0000 (19:40 +0200)] 
Remove many (762) now redundant ND_TCHECK_n() calls

ND_TCHECK_n(e), n in { 1, 2, 3, 4, 8 }.

They are redundant because they are followed by a GET_.*_n(e) call,
same n, same e, which do the bounds check.

Remove unused 'trunc' labels and most associated codes.

Update the outputs of some tests accordingly.

16 months agoCirrus CI: Fix the FreeBSD 13 task. [skip travis] [skip appveyor]
Denis Ovsienko [Thu, 3 Sep 2020 13:25:53 +0000 (14:25 +0100)] 
Cirrus CI: Fix the FreeBSD 13 task. [skip travis] [skip appveyor]

Use FreeBSD 11.4-RELEASE and 12.1-RELEASE instead of 11.3-CURRENT and
12.1-CURRENT, this allows to drop "pkg update -f", which was a
workaround for 11.3-CURRENT (see commit 96c4db3), and which had later
broken in 13.0-CURRENT. Relates to cirruslabs/cirrus-ci-docs#695.

16 months agoAdd a .mailmap file. [skip ci]
Denis Ovsienko [Wed, 2 Sep 2020 13:27:34 +0000 (14:27 +0100)] 
Add a .mailmap file. [skip ci]

This first revision is loosely based on the output of
  git log | grep -E '^Author: ' | sort -u
and some heuristics. It does not cover every case, but it results in
more consistent output from "git blame" and "git log --use-mailmap".

16 months agoRADIUS: Update and comment registry arrays. [skip ci]
Denis Ovsienko [Tue, 1 Sep 2020 14:14:44 +0000 (15:14 +0100)] 
RADIUS: Update and comment registry arrays. [skip ci]

Add missing values, IANA registry URLs and some rulers. This change does
not change any tests or substantial code.

16 months agoUse more the nd_print_trunc() function
Francois-Xavier Le Bail [Mon, 31 Aug 2020 19:57:45 +0000 (21:57 +0200)] 
Use more the nd_print_trunc() function

16 months agoReport periodic stats only when safe to do so. [skip ci]
Denis Ovsienko [Sat, 29 Aug 2020 01:48:07 +0000 (02:48 +0100)] 
Report periodic stats only when safe to do so. [skip ci]

As explained in GH #155, when tcpdump is given -r, -w and -v and it
takes long enough to read from the input file (because it is stdin
connected through network or a pipe to stdout of another tcpdump doing
a live capture), pcap_loop() will error before long. One of the ways to
reproduce the fault is as follows:

$ tcpdump -i eno1 -w - | tcpdump -r - -w /tmp/tmp.pcap -v
tcpdump: listening on eno1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
reading from file -, link-type EN10MB (Ethernet), snapshot length 262144
tcpdump: pcap_loop: error reading dump file: Interrupted system call

Skip the verbose_stats_dump() timer setup in this specific corner case
for the time being and document it.

16 months agoRADIUS: Redo the RFC 5580 test for Solaris. [skip ci]
Denis Ovsienko [Thu, 27 Aug 2020 22:04:49 +0000 (23:04 +0100)] 
RADIUS: Redo the RFC 5580 test for Solaris. [skip ci]

The file tests/RADIUS-RFC5580.pcap had all NTP timestamps set to
0x01234567.89abcdef seconds since year 1900, which on Linux and FreeBSD
produced "19088743.537777777 (1900-08-09T22:25:43Z)", but on Solaris 10
produced "(unrepresentable)". Increment Sighting Time by 120 nominal
years worth of seconds and make Time-to-Live and Retention Expires 12
and 48 hours later respectively.

16 months agoRADIUS: Fixup the previous commit. 706/head
Denis Ovsienko [Thu, 27 Aug 2020 12:48:08 +0000 (13:48 +0100)] 
RADIUS: Fixup the previous commit.

Use GET_ macros and C99 uint types. Use nd_printn() to print RADIUS
strings, which are not NUL-terminated (see RFC 2865 page 25). Use
p_ntp_time() to print NTP timestamps. In print_attr_location_data() print
the Location field as hex and add a comment to explain why. In
print_basic_location_policy_rules() display any non-zero MBZ bits in the
Flags field. Make output format more consistent. Update the test case.

16 months agoRADIUS: Add attributes from RFC5580. (GH #706)
Herwin Weststrate [Tue, 2 Oct 2018 18:17:42 +0000 (20:17 +0200)] 
RADIUS: Add attributes from RFC5580. (GH #706)

16 months agoRename min() and max() to ND_MIN() and ND_MAX(). [skip ci]
Denis Ovsienko [Mon, 24 Aug 2020 20:53:58 +0000 (21:53 +0100)] 
Rename min() and max() to ND_MIN() and ND_MAX(). [skip ci]

As discussed on tcpdump-workers, it was a place for a potential clash
with non-macros.

17 months agoFixup some letter case in the man page. [skip ci]
Denis Ovsienko [Sat, 22 Aug 2020 00:49:57 +0000 (01:49 +0100)] 
Fixup some letter case in the man page. [skip ci]

17 months agoCirrus CI: Allow FreeBSD 13 task to fail.
Denis Ovsienko [Fri, 21 Aug 2020 17:27:02 +0000 (18:27 +0100)] 
Cirrus CI: Allow FreeBSD 13 task to fail.

Implement the workaround suggested in cirruslabs/cirrus-ci-docs#695.

[skip ci]

17 months agoCirrus CI: Align with Travis CI config more.
Denis Ovsienko [Wed, 19 Aug 2020 00:40:03 +0000 (01:40 +0100)] 
Cirrus CI: Align with Travis CI config more.

Define MAKEFLAGS, move comments to the end of respective lines, run
"make install" and "make releasetar".

[skip ci]

17 months agoRemove an inexistant URL
Francois-Xavier Le Bail [Mon, 19 Aug 2019 14:06:10 +0000 (16:06 +0200)] 
Remove an inexistant URL

17 months agoBGP: Address a -Wformat-truncation= compiler warning
Francois-Xavier Le Bail [Fri, 14 Aug 2020 15:22:15 +0000 (17:22 +0200)] 
BGP: Address a -Wformat-truncation= compiler warning

The warning was:
./print-bgp.c: In function 'bgp_vpn_rd_print':
./print-bgp.c:797:65: warning: '%u' directive output may be truncated
writing between 1 and 3 bytes into a region of size between 2 and 31
  797 |         snprintf(pos, sizeof(rd) - (pos - rd), "%s:%u (%u.%u.%u.%u:%u)",
      |                                                                 ^~
./print-bgp.c:797:48: note: directive argument in the range [0, 255]
  797 |         snprintf(pos, sizeof(rd) - (pos - rd), "%s:%u (%u.%u.%u.%u:%u)",
      |                                                ^~~~~~~~~~~~~~~~~~~~~~~~
./print-bgp.c:797:48: note: directive argument in the range [0, 65535]
./print-bgp.c:797:9: note: 'snprintf' output between 15 and 50 bytes
into a destination of size 41
  797 |         snprintf(pos, sizeof(rd) - (pos - rd), "%s:%u (%u.%u.%u.%u:%u)",
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  798 |                     as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_4(pptr + 2)),
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  799 |                     GET_BE_U_2(pptr + 6), GET_U_1(pptr + 2),
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  800 |                     GET_U_1(pptr + 3), GET_U_1(pptr + 4),
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  801 |                     GET_U_1(pptr + 5), GET_BE_U_2(pptr + 6));
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

17 months agoRx: Make UDP ports 16-bit to compile (GH #868).
Denis Ovsienko [Wed, 12 Aug 2020 23:59:44 +0000 (00:59 +0100)] 
Rx: Make UDP ports 16-bit to compile (GH #868).

Gisle Vanem reported that GCC 7.1 for DJGPP sees u_int and uint32_t as
two different types, hence the forward declaration for rx_cache_find()
was different from the actual function. UDP port numbers are 16-bit and
udp_print() appropriately uses uint16_t for them. Use the same type in
the downstream Rx-specific code to make things simpler and consistent.

17 months agoFix a typo
Francois-Xavier Le Bail [Mon, 10 Aug 2020 18:36:46 +0000 (20:36 +0200)] 
Fix a typo

17 months agoIEEE 802.15.4: Use GET_U_1() to replace direct dereferences
Francois-Xavier Le Bail [Mon, 10 Aug 2020 15:59:55 +0000 (17:59 +0200)] 
IEEE 802.15.4: Use GET_U_1() to replace direct dereferences

This need adding 'netdissect_options *ndo' parameter to
ieee802_15_4_crc16() and ieee802_15_4_crc32().

17 months agoDNS: Use GET_U_1() to replace a direct dereference
Francois-Xavier Le Bail [Mon, 10 Aug 2020 15:46:09 +0000 (17:46 +0200)] 
DNS: Use GET_U_1() to replace a direct dereference

17 months agoRESP: Use GET_U_1() to replace direct dereferences
Francois-Xavier Le Bail [Mon, 10 Aug 2020 15:03:59 +0000 (17:03 +0200)] 
RESP: Use GET_U_1() to replace direct dereferences

Fix spaces

17 months agomacsec: Update the outputs of two tests
Francois-Xavier Le Bail [Mon, 10 Aug 2020 11:54:50 +0000 (13:54 +0200)] 
macsec: Update the outputs of two tests

This is a follow-up to 69a76fb67a36a19779142d07bb0cb31b7736a936.

17 months agomacsec: Update ndo_protocol to lower case as in all other uses
Francois-Xavier Le Bail [Mon, 10 Aug 2020 09:14:50 +0000 (11:14 +0200)] 
macsec: Update ndo_protocol to lower case as in all other uses

17 months agoUpdate the man page for "-d", "-i" and "-y".
Denis Ovsienko [Mon, 10 Aug 2020 11:04:51 +0000 (12:04 +0100)] 
Update the man page for "-d", "-i" and "-y".

Describe the changes in behaviour after commit 74e6075, which implements
the discussion made in GH #804.

[skip ci]

17 months agoFix spaces
Francois-Xavier Le Bail [Sat, 8 Aug 2020 12:55:23 +0000 (14:55 +0200)] 
Fix spaces

Francois-Xavier Le Bail [Sat, 8 Aug 2020 12:45:10 +0000 (14:45 +0200)] 

In libpcap DLT_PPP_WITHDIRECTION was renamed to

Rename other #defines to match.

17 months agoSRv6: Add a test output without '-e'
Francois-Xavier Le Bail [Fri, 7 Aug 2020 16:19:34 +0000 (18:19 +0200)] 
SRv6: Add a test output without '-e'

This is a follow-up to commit 1103418a18d71c0fe448c0459a42ff1bc20bb0dc.

17 months agoDHCP: Make option printing format more consistent.
Denis Ovsienko [Fri, 7 Aug 2020 18:00:06 +0000 (19:00 +0100)] 
DHCP: Make option printing format more consistent.

rfc1048_print() used to print DHCP options in a few different formats
depending on the context (see GH issue #866):

* at the top of an RFC 1048 block:
  * known options: [string] name and [decimal] tag
  * unknown options: tag twice
* inside a Parameter Request (55) block:
  * known options: name
  * unknown options: tag

Change it to use the "Name (tag)" format (as in TCP, BGP, etc) in all
contexts. Update output for 8 tests.

17 months agoDHCP: Remove a few options that are unassigned now.
Denis Ovsienko [Fri, 7 Aug 2020 17:21:51 +0000 (18:21 +0100)] 
DHCP: Remove a few options that are unassigned now.

Commit e89bfcd in December 2000 among other things had introduced
the following code points from the IANA "BOOTP Vendor Extensions and
DHCP Options" registry:

* TAG_6OVER4 (96)

The current revision of the registry lists every code above as
"Removed/Unassigned" with a reference to RFC 3679 published in January
2004. Remove the code points and any associated code.

17 months agoAdd support for ethernet IP protocol
Ahmed Abdelsalam [Fri, 7 Aug 2020 15:02:16 +0000 (15:02 +0000)] 
Add support for ethernet IP protocol

The SRv6 network programming defines a new IP protocol number [1].

The new protocol number is used in the Next Header field of an IPv6 header
or any extension header indicates that the payload is an Ethernet.

IANA has assigned 143 as the protocol number of ethernet [2].

The SRv6 packet has the following format:
IPv6 HDR + SRH + Ethernet HDR + IPv4/IPv6 packet

This patch allows TCPDUMP to dissect such SRv6 packets.


Signed-off-by: Ahmed Abdelsalam <>
17 months agoBroadcom LI: Pass correct caplen value to ether_print()
Francois-Xavier Le Bail [Fri, 7 Aug 2020 11:25:21 +0000 (13:25 +0200)] 
Broadcom LI: Pass correct caplen value to ether_print()

17 months agoApply the last step of the new way to update the link-layer header length
Francois-Xavier Le Bail [Thu, 6 Aug 2020 17:12:49 +0000 (19:12 +0200)] 
Apply the last step of the new way to update the link-layer header length

All the link-layer dissectors are now void functions.

All the functions were moved to the void_printers[] array.
Rename this array to printers[].
Remove the uint_printers[] array, now empty.
Remove the 'ndo_void_printer' flag field, now useless, from
Remove other transitional code.

17 months agoRework "Update more link-layer dissectors to void functions"
Francois-Xavier Le Bail [Sat, 1 Aug 2020 12:05:59 +0000 (14:05 +0200)] 
Rework "Update more link-layer dissectors to void functions"

It's a follow-up to commit 81dbf4a0b05092760d0ff0cdd48c692e4769ba99.

There is no need to update ether_print(), ether_common_print() and
ether_switch_tag_print() to void functions: back to u_int functions.

There is also no need to add a flag parameter to ether_print(),
ether_common_print() and ether_switch_tag_print(): Remove it.

17 months agoPFLOG: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Thu, 6 Aug 2020 15:22:34 +0000 (17:22 +0200)] 
PFLOG: Update the link-layer dissector to a void function

Use GET_U_1() when needed.
Remove trailing "_if" from the protocol name.

17 months agoAppleTalk: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Thu, 6 Aug 2020 14:23:30 +0000 (16:23 +0200)] 
AppleTalk: Update the link-layer dissector to a void function

Remove trailing "_if" from the protocol name.

17 months agoCHDLC: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Thu, 6 Aug 2020 14:08:23 +0000 (16:08 +0200)] 
CHDLC: Update the link-layer dissector to a void function

Remove trailing "_if" from the protocol name.

17 months agoPPP: Update the link-layer dissectors to void functions
Francois-Xavier Le Bail [Thu, 6 Aug 2020 09:22:56 +0000 (11:22 +0200)] 
PPP: Update the link-layer dissectors to void functions

Remove trailing "_if" from some protocol names.
Update the outputs of two tests accordingly.

17 months agoRemove the unused DLT_LANE8023 link-layer dissector
Francois-Xavier Le Bail [Wed, 5 Aug 2020 20:15:45 +0000 (22:15 +0200)] 
Remove the unused DLT_LANE8023 link-layer dissector

DLT_LANE8023 was never defined in libpcap.
It was, perhaps, defined in some SuSE libpcap update, but no evidence
of this.
It is not defined in OpenSuSE Leap 15.2 (information from Guy).

17 months agoFR: Update the link-layer dissectors to void functions
Francois-Xavier Le Bail [Tue, 4 Aug 2020 15:24:53 +0000 (17:24 +0200)] 
FR: Update the link-layer dissectors to void functions

Remove trailing "_if" from the protocol name.
Add two comments.

17 months agoATM: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Sun, 2 Aug 2020 11:58:24 +0000 (13:58 +0200)] 
ATM: Update the link-layer dissector to a void function

Remove trailing "_if" from the protocol name.

17 months agoIPFC: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Sun, 2 Aug 2020 11:46:55 +0000 (13:46 +0200)] 
IPFC: Update the link-layer dissector to a void function

Remove trailing "_if" from the protocol name.

17 months agoToken Ring: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Sun, 2 Aug 2020 11:36:10 +0000 (13:36 +0200)] 
Token Ring: Update the link-layer dissector to a void function

Remove trailing "_if" from the protocol name.

17 months agoSLL: Update the link-layer dissectors to void functions
Francois-Xavier Le Bail [Sun, 2 Aug 2020 10:51:01 +0000 (12:51 +0200)] 
SLL: Update the link-layer dissectors to void functions

Fix two probably copy & paste errors (s/SLL_HDR_LEN/SLL2_HDR_LEN/).
Remove trailing "_if" from the protocol name.

17 months agoFDDI: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Sun, 2 Aug 2020 10:03:19 +0000 (12:03 +0200)] 
FDDI: Update the link-layer dissector to a void function

Remove trailing "_if" from the protocol name.

17 months agoCIP: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Sun, 2 Aug 2020 09:50:35 +0000 (11:50 +0200)] 
CIP: Update the link-layer dissector to a void function

Remove trailing "_if" from the protocol name.

17 months agoIEEE 802.15.4: Remove trailing "_if" from a protocol name
Francois-Xavier Le Bail [Sun, 2 Aug 2020 09:38:44 +0000 (11:38 +0200)] 
IEEE 802.15.4: Remove trailing "_if" from a protocol name

17 months agoIEEE 802.11: Remove trailing "_if" from protocol names
Francois-Xavier Le Bail [Sun, 2 Aug 2020 09:36:05 +0000 (11:36 +0200)] 
IEEE 802.11: Remove trailing "_if" from protocol names

17 months agoIEEE 802.15.4: Update the link-layer dissectors to void functions
Francois-Xavier Le Bail [Sun, 2 Aug 2020 09:24:45 +0000 (11:24 +0200)] 
IEEE 802.15.4: Update the link-layer dissectors to void functions

17 months agoIEEE 802.11: Update the link-layer header length in two steps (PRISM)
Francois-Xavier Le Bail [Sun, 2 Aug 2020 08:48:50 +0000 (10:48 +0200)] 
IEEE 802.11: Update the link-layer header length in two steps (PRISM)

This way, even if we longjmped out of the code because trucation,
the prism header length is subtracted for -x/-X print.

17 months agoIEEE 802.11: Update the link-layer dissectors to void functions
Francois-Xavier Le Bail [Sun, 2 Aug 2020 07:46:30 +0000 (09:46 +0200)] 
IEEE 802.11: Update the link-layer dissectors to void functions

17 months agoRemove a trailing tab
Francois-Xavier Le Bail [Sat, 1 Aug 2020 10:04:52 +0000 (12:04 +0200)] 
Remove a trailing tab

17 months agoPPPoE: Update the link-layer dissector to a void function
Francois-Xavier Le Bail [Fri, 31 Jul 2020 18:36:17 +0000 (20:36 +0200)] 
PPPoE: Update the link-layer dissector to a void function

Add a length check.
Fix a return.
Use nd_print_trunc().
Remove trailing "_if" from the protocol name.

17 months agoUDP: Harmonize some function calls
Francois-Xavier Le Bail [Fri, 31 Jul 2020 10:19:51 +0000 (12:19 +0200)] 
UDP: Harmonize some function calls

Some calls use '(const u_char *)(up+1)'.
Other calls use 'cp' (same value).
Update the calls to only use 'cp'.

(follow-up to ea0f25cc7765554e521bf7ea44d94f77500749f5)

17 months agoSync the Ethernet protocols database with the libpcap one
Francois-Xavier Le Bail [Tue, 28 Jul 2020 16:22:04 +0000 (18:22 +0200)] 
Sync the Ethernet protocols database with the libpcap one

Commits in libpcap:
(Fix "unknown ether proto 'aarp'")
(Remove undocumented and rather old "ether proto" protocols)

17 months agoUse more BSD style references in the man page.
Denis Ovsienko [Tue, 28 Jul 2020 15:10:59 +0000 (16:10 +0100)] 
Use more BSD style references in the man page.

[skip ci]

17 months agoDefine FMAXINT only once and use it properly.
Denis Ovsienko [Tue, 28 Jul 2020 15:02:07 +0000 (16:02 +0100)] 
Define FMAXINT only once and use it properly.

[skip ci]