Denis Ovsienko [Thu, 4 Mar 2021 21:43:16 +0000 (21:43 +0000)]
CI: Relax the branch filters back. [skip ci]
Address feedback from Francois-Xavier and do not limit everyday CI to
the branches that are known-good for running build_matrix.sh, only mind
to skip the coverity_scan branch. Although this arrangement is not what
an upstream repository should use, it keeps CI simple in fork
repositories that have arbitrarily named branches with a working
build_matrix.sh.
This should also restore pull requests CI if the strict filters had
affected it.
Bill Fenner [Fri, 5 Feb 2021 05:10:31 +0000 (21:10 -0800)]
BFD: add SBFD support (RFC7880 and RFC7881)
Add support for SBFD on UDP port 7784. SBFD is different
in that packets from the reflector will be sent with *source*
port 7784; in all other BFD mechanisms, it is only the
destination port that matters. For SBFD print-udp.c has to
check both source and destination port.
Francois-Xavier Le Bail [Thu, 11 Feb 2021 20:09:00 +0000 (21:09 +0100)]
TCP: Update the snapend before decoding a MPTCP option
Update the snapend to the end of the option before calling mptcp_print().
Some options (MPTCP or others) may be present after a MPTCP option.
This prevents that, in mptcp_print(), the remaining length < the remaining
caplen.
Francois-Xavier Le Bail [Thu, 11 Feb 2021 16:46:02 +0000 (17:46 +0100)]
DHCPv6: Update the snapend for nested DHCPv6 packets
Update the snapend to the end of the option before calling recursively
dhcp6_print() for the nested packet.
Other options may be present after the nested DHCPv6 packet.
This prevents that, in dhcp6_print(), for the nested DHCPv6 packet,
the remaining length < remaining caplen.
Whatever the underlying reason, freebsd-13-0-snap used to take a couple
times more time to make it through the build than the other two image
families. After switching to the full nested matrix this started to
cause task timeouts and rescheduling. Let's see if a different
distribution of resources can improve this. Update the Linux task
comment while at it.
Denis Ovsienko [Wed, 10 Feb 2021 16:27:15 +0000 (16:27 +0000)]
Cirrus CI: Refine some resource allocation. [skip appveyor] [skip travis]
For FreeBSD and Linux request less memory than the default 4 GB.
Cirrus build graph claims that both FreeBSD and Linux tasks never use
more than 2 CPUs. For FreeBSD request 2 CPUs instead of 4 to enable all
three permutations run in parallel. For Linux request 4 CPUs instead of
8 to enable two concurrent tasks and split the nested matrix into two to
take advantage of that.
Denis Ovsienko [Wed, 10 Feb 2021 14:10:06 +0000 (14:10 +0000)]
Remove the REMOTE dimension from the nested matrix. [skip appveyor]
Neither the build process nor the tests of tcpdump currently depend on
presence or absence of the libpcap remote feature, and there is already
the libpcap nested matrix to cover that dimension, thus in the tcpdump
nested matrix just leave this aspect of the local libpcap build
unspecified and reduce the total number of rounds from 48 to 32.
Francois-Xavier Le Bail [Sun, 7 Feb 2021 10:22:24 +0000 (11:22 +0100)]
Add the build_matrix.sh and build.sh scripts
Use them with Travis CI to build with less builders and save CI runtime.
This will currently run five builders: amd64, arm64, ppc64le, s390x and osx.
The build_matrix.sh script executes the matrix loops, exclude tests and
cleaning.
It conditionally builds libpcap running the build.sh script of libpcap.
It calls the build.sh script which runs one build with setup environment
variables: BUILD_LIBPCAP, REMOTE, CC, CMAKE, CRYPTO and SMB
(default: BUILD_LIBPCAP=no, REMOTE=no, CC=gcc, CMAKE=no, CRYPTO=no, SMB=no).
The matrix can be configured with environment variables
MATRIX_BUILD_LIBPCAP, MATRIX_REMOTE, MATRIX_CC, MATRIX_CMAKE, MATRIX_CRYPTO
and MATRIX_SMB
(default: MATRIX_BUILD_LIBPCAP='no yes', MATRIX_REMOTE='no yes',
MATRIX_CC='gcc clang', MATRIX_CMAKE='no yes', MATRIX_CRYPTO='no yes',
MATRIX_SMB='no yes').
These scripts can easily be updated to run new tests (32 bits builds,
sanitizers, coverage, etc).
They can be used locally for build tests or used with other CI systems.
Denis Ovsienko [Fri, 5 Feb 2021 14:25:11 +0000 (14:25 +0000)]
Refine Markdown in README.md. [skip appveyor]
Move "by TTG" to the main header and eliminate a few duplicate "by"
sentences. Update a CI badge to use the travis-ci.com URLs. Make the
security note bold to help more people actually get it. Change the git
URL to github.com to be consistent with libpcap. Add and refine a few
headers. Add and improve hyperlink formatting in a few places. Lose a
few excess generic sentences. Fixup some minor editorial issues. Fence
the "from LBL" boilerplate, move it to the bottom of the dedicated
section and eliminate a few duplicate "from" sentences.
Skip only some CI on this occasion, so Travis CI can transfer the build
history from travis-ci.org to travus-ci.com and complete the migration.
Francois-Xavier Le Bail [Mon, 1 Feb 2021 09:31:34 +0000 (10:31 +0100)]
MSDP: Print ": " before the protocol name
Like with most TCP encapsulated protocols.
Use nd_print_protocol().
No more ":" after protocol name.
This change will print the protocol name even in truncation cases.
Denis Ovsienko [Mon, 25 Jan 2021 19:09:49 +0000 (19:09 +0000)]
RPKI-Router: Refine length and bounds checks. [skip ci]
Fetch PDU version only once and use the PDU header structure for that.
Check data length before accessing it. Remove two redundant
ND_TCHECK_LEN() instances and move the associated comments below
respective GET_BE_U_4() instances.
Denis Ovsienko [Mon, 25 Jan 2021 12:51:54 +0000 (12:51 +0000)]
OpenFlow 1.0: Simplify the snapend management. [skip ci]
As Guy explains it, nd_push_snapend() makes it easy to save and to
restore the snapend from different functions or different invocations
of the same function. In a simple case a local variable and ND_MIN()
do the job just as well without the associated memory management and
error checking.
Francois-Xavier Le Bail [Sun, 24 Jan 2021 09:52:50 +0000 (10:52 +0100)]
ICMP: Update the snapend for some nested IP packets
Update the snapend because extensions (MPLS, ...) may be present
after the IP packet. In this case the current (outer) packet's
snapend is not what ip_print() needs to decode an IP packet nested
in the middle of an ICMP payload.
This prevents that, in ip_print(), for the nested IP packet, the
remaining length < remaining caplen.
Moreover:
Reduce the scope of a variable.
Fix spaces
Enable ND_LONGJMP_FROM_TCHECK. Remove one redundant ND_TCHECK_SIZE()
instance and place the remaining ones after the code that prints
individual structure fields, so it can print incomplete structures. Lose
intermediate snprintf() calls and associated props. Lose trailing spaces
in v1 and v5 output.
Denis Ovsienko [Fri, 22 Jan 2021 12:51:15 +0000 (12:51 +0000)]
OpenFlow 1.0: Get snapend right for nested frames. [skip ci]
The current and the nested packets can and do have different snapend,
implement and comment that in of10_packet_data_print() to fix an issue
discovered by Francois-Xavier Le Bail.
Denis Ovsienko [Fri, 22 Jan 2021 01:24:15 +0000 (01:24 +0000)]
IEEE 802.11: Simplify handle_action(). [skip ci]
Lose PRINT_MESHLINK_ACTION(), PRINT_MESHPEERING_ACTION() and
PRINT_MESHPATH_ACTION(), which were unused since commit f1c0553. Convert
the remaining 5 macros and hard-coded strings using tok2str() and
uint2tokary().
Denis Ovsienko [Thu, 21 Jan 2021 01:43:42 +0000 (01:43 +0000)]
ForCES: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK. Add and use many standard "invalid"
sections. Use tok2str() in asttlv_print(). In forces_print() don't
hex-dump the invalid data by default, there's ndo_vflag for that.
Simplify some code in genoptlv_print(). In pdata_print() instead of 0
return the value that pdatacnt_print() returned if it was not good. Lose
a disabled debug line.
Denis Ovsienko [Wed, 20 Jan 2021 14:50:59 +0000 (14:50 +0000)]
SNMP: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK. Remove a few redundant ND_TCHECK*()
instances. Make asn1_print_octets() and asn1_print_string() void. Harden
an improvised snapshot end guard with ND_TCHECK_LEN().
Denis Ovsienko [Mon, 18 Jan 2021 23:59:45 +0000 (23:59 +0000)]
NTP: Modernize packet parsing style. [skip ci]
Enable ND_LONGJMP_FROM_TCHECK. Remove a few redundant ND_TCHECK()
instances. Move one ND_TCHECK_4() to where it belongs. Have nd_printjn()
guard the snapshot end.
Denis Ovsienko [Sun, 17 Jan 2021 21:22:34 +0000 (21:22 +0000)]
TCP: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK. Report invalid packets as invalid. Remove
most ND_TCHECK*() instances as they were redundant. Update a custom
snapend guard to use nd_trunc_longjmp(). Reduce arity of
print_tcp_fastopen_option(). Use ND_TTEST_LEN() in
tcp_verify_signature() and nd_printn() in print_tcp_rst_data(). For
NFS_PORT remove ND_TTEST_4() from the test condition as it is not a
valid factor, there is the subsequent GET_BE_U_4() to check bounds.
Denis Ovsienko [Fri, 15 Jan 2021 22:30:40 +0000 (22:30 +0000)]
AODV: Modernize packet parsing style.
Make all ND_TCHECK_SIZE() instances redundant and remove them. Always
print a reason when reporting a packet as invalid. Undo the changes from
commit f875106 to remove support for draft-perkins-aodv6-01, which had
expired in 2001. Use tok2str() to print the message type. Don't print an
additional "v6" for RREQ, as the address family is apparent from the UDP
header. Update a test.
Denis Ovsienko [Thu, 14 Jan 2021 03:48:28 +0000 (03:48 +0000)]
RIP: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK. Report invalid packets as invalid. Remove
two redundant ND_TCHECK_SIZE() instances and an improvised snapshot end
guard. Check bounds for the remaining part of the packet header after
printing version and command, not before. Lose one pointer and one
length variable in rip_print(), also account for the header size when
estimating the number of routes. Update two tests.
Denis Ovsienko [Wed, 13 Jan 2021 00:43:49 +0000 (00:43 +0000)]
AppleTalk: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK. Report invalid packets as invalid. Remove
all improvised snapshot end guards as they were redundant. In
print_cstring() have nd_printjn() guard the snapshot end. Use tok2str()
in nbp_print(). Update two tests.
Denis Ovsienko [Tue, 12 Jan 2021 15:52:23 +0000 (15:52 +0000)]
UDP: Modernize packet parsing style.
Remove all ND_TCHECK_*() instances as redundant. Remove or convert a few
improvised snapshot end guards. Reduce arity of rtcp_print(). Test the
AppleTalk LAP type after testing the UDP port numbers, not before.
Denis Ovsienko [Tue, 12 Jan 2021 13:37:50 +0000 (13:37 +0000)]
UDP: Clean up address and port printing.
udp_print() always knows whether UDP port numbers are available or not,
so split udpipaddr_print() into two functions to lose some arity, much
branching and all type casting. In the new functions test for IPv4
explicitly. In udp_print() convert duplicate code into a conditional
call to udpipaddr_print().
Denis Ovsienko [Sun, 10 Jan 2021 00:53:43 +0000 (00:53 +0000)]
EIGRP: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK. Report invalid packets as invalid. Remove
two redundant ND_TCHECK_*() instances. When giving up on a packet for
whatever reason, test that the rest of it is within the buffer. Do the
header length check before accessing any header data and refine the TLV
length checks. Update a test.
Denis Ovsienko [Sat, 9 Jan 2021 22:04:28 +0000 (22:04 +0000)]
EIGRP: Get the packet header fields right.
In the spec the packet diagram instead of a 32-bit AS number shows a
16-bit virtual router ID followed by a 16-bit AS number, implement
that. Also add two missing flag values and use bittok2str() to print
the bitmask. Lose a stale comment and update some tests.
Guy Harris [Fri, 8 Jan 2021 20:23:04 +0000 (12:23 -0800)]
Remove debugging printouts.
The problem appears to be with the
if [ "$COVERITY_SCAN_BRANCH" = 1 ]; then exit 0; fi
line in the script: section of .travis.yml; libpcap has the line
if [ "$COVERITY_SCAN_BRANCH" = 1 ]; then echo "Coverity build - nothing more to do"; exit 0; fi
and also fails, so exiting without a message isn't the problem, and when
I tried adding
if [ "$COVERITY_SCAN_BRANCH" = 0 ]; then echo "Non-Coverity build - pstill nothing more to do"; exit 0; fi
and the ppc64le Linux builds were failing with a timeout rather than
just doing nothing - the AMD64 Linux didn't have a problem, so there's
something different about the non-x86-64 builds that's causing the "exit
0" stuff not to work.
Francois-Xavier Le Bail [Fri, 8 Jan 2021 15:09:41 +0000 (16:09 +0100)]
Add a nd_printjn() function
It prints a counted filename (or other ASCII string), part of
the packet buffer, filtering out non-printable characters.
Stop if truncated (via GET_U_1/longjmp) or after n bytes,
whichever is first.
The suffix comes from: j:longJmp, n:after N bytes.
Guy Harris [Fri, 8 Jan 2021 09:38:16 +0000 (01:38 -0800)]
Travis: we should no longer need to set PKG_CONFIG_PATH for CMake.
FindPCAP.cmake should now pick up directories from CMAKE_PREFIX_PATH and
add the corresponding pkgconfig directories to PKG_CONFIG_PATH before
running pkg-config, so we shouldnt need to set PKG_CONFIG_PATH
ourselves.
We still need to do it when running the autoonf script, as there's no
equivalent for CMAKE_PREFIX_PATH in autoconf.
Guy Harris [Fri, 8 Jan 2021 09:35:31 +0000 (01:35 -0800)]
CMake: add stuff from CMAKE_PREFIX_PATH to PKG_CONFIG_PATH.
Pull in some code from CMake 3.12.4's FindPkgConfig.cmake to arrange
that, when running pkg-config, directories from CMAKE_PREFIX_PATH are in
the PKG_CONFIG_PATH environment variable.
We do this because we want to make sure that, if CMAKE_PREFIX_PATH is
set, and it points to a directory that contains a libpcap that has a .pc
file installed, we get that .pc file, but we don't yet want to require a
minimum of CMake 3.1 or later (CMake 3.1 and later do that
automatically) because there might be some long-term support OS version
that comes with an older version of CMake.
Denis Ovsienko [Fri, 8 Jan 2021 03:23:26 +0000 (03:23 +0000)]
BOOTP: Modernize packet parsing style.
Enable ND_LONGJMP_FROM_TCHECK. Report invalid packets as invalid. Have
nd_printn() and nd_printztn() guard the snapshot end. Replace
client_fqdn_flags() with bittok2str_nosep().
Guy Harris [Thu, 7 Jan 2021 20:45:12 +0000 (12:45 -0800)]
Point cmake at the installed pkg-config directory in /tmp.
Getting CMake to look for the temporarily-installed libpcap.pc file
requires that we set PKG_CONFIG_PATH to /tmp/lib/pkgconfig; otherwise,
the configuration process won't find it, and hilarity ensues.
Try turning the 'BUILD_LIBPCAP=yes CMAKE=yes' builds on, to see if that
fixes them.