32 hours agoRemove unused files Win32/Prj/* master
Francois-Xavier Le Bail [Tue, 7 Dec 2021 13:44:32 +0000 (14:44 +0100)] 
Remove unused files Win32/Prj/*

The supported way to build libpcap on Windows is with CMake.

Nobody in tcpdump-workers list says 'we need to keep them'.

8 days agoImprove formatting and structure in [skip ci]
Denis Ovsienko [Tue, 30 Nov 2021 14:18:44 +0000 (14:18 +0000)] 
Improve formatting and structure in [skip ci]

Add some missing Markdown markup.  Add subsection titles.  Make Linux
the first OS-specific subsection, as that's a more common use case.
Move the "other" subsection after the OS-specific subsections for more
logical structuring.

8 days agoRemove trailing spaces/tabs
Francois-Xavier Le Bail [Tue, 30 Nov 2021 10:08:38 +0000 (11:08 +0100)] 
Remove trailing spaces/tabs

9 days agoDeclutter the documentation a bit. [skip ci]
Denis Ovsienko [Mon, 29 Nov 2021 17:54:04 +0000 (17:54 +0000)] 
Declutter the documentation a bit. [skip ci]

The following operating systems are either extinct or not supported or
otherwise have been out of contact with libpcap code for many years:
UnixWare, SCO UNIX, SINIX, NeXTSTEP, {DEC OSF/1, Digital UNIX, Tru64
UNIX}, Ultrix, SunOS < 5.3.2, Linux < 2.6.27 and older AIX.

Remove respective prose from the installation documentation, as well as
the passage about counterfeit tcpdump 3.0.3, which is a common wisdom
nowadays.  Update the remaining HP-UX section for C99.

2 weeks agoMerge pull request #1061 from eexarevsky/zboss_ncp_dlt_linktype
Michael Richardson [Wed, 24 Nov 2021 17:46:03 +0000 (12:46 -0500)] 
Merge pull request #1061 from eexarevsky/zboss_ncp_dlt_linktype

Added linktype for ZBOSS NCP setial protocol.

2 weeks agoMerge pull request #1069 from davidkaroly/pr/haiku/snaplen
Guy Harris [Mon, 22 Nov 2021 21:42:25 +0000 (13:42 -0800)] 
Merge pull request #1069 from davidkaroly/pr/haiku/snaplen

Haiku: adjust snaplen

2 weeks agoMerge pull request #1068 from davidkaroly/pr/haiku/pcap_lib_version
Guy Harris [Mon, 22 Nov 2021 21:41:43 +0000 (13:41 -0800)] 
Merge pull request #1068 from davidkaroly/pr/haiku/pcap_lib_version

Haiku: implement pcap_lib_version

2 weeks agoHaiku: adjust snaplen 1069/head
David Karoly [Mon, 22 Nov 2021 14:25:46 +0000 (14:25 +0000)] 
Haiku: adjust snaplen

2 weeks agoHaiku: implement pcap_lib_version 1068/head
David Karoly [Mon, 22 Nov 2021 14:22:20 +0000 (14:22 +0000)] 
Haiku: implement pcap_lib_version

2 weeks agoman: Prevent e-mail address hyphenation. [skip ci]
Denis Ovsienko [Sat, 20 Nov 2021 21:12:16 +0000 (21:12 +0000)] 
man: Prevent e-mail address hyphenation. [skip ci]

2 weeks agoMerge pull request #1067 from nmap/npf-pcap-create-err coverity_scan
Guy Harris [Thu, 18 Nov 2021 05:48:42 +0000 (21:48 -0800)] 
Merge pull request #1067 from nmap/npf-pcap-create-err

NPF: improve error handling in pcap_create_interface()

3 weeks agoRefine a bit. [skip ci]
Denis Ovsienko [Wed, 17 Nov 2021 20:27:38 +0000 (20:27 +0000)] 
Refine a bit. [skip ci]

Add plenty of Markdown markup, address a couple punctuation and grammar
issues; in the introduction tell C99, not ANSI C (C89/C90).

3 weeks agoNPF: improve error handling in pcap_create_interface() 1067/head
Daniel Miller [Tue, 16 Nov 2021 21:32:21 +0000 (15:32 -0600)] 
NPF: improve error handling in pcap_create_interface()

pcap_close() cannot be used at this point (in pcap_create()) since it
calls cleanup_op, which is not set until pcap_activate(). Additionally,
return value of strdup was never checked, and several error conditions
resulted in failing to call PacketCloseAdapter on the temporary adapter.

3 weeks Refine Markdown, mention CMake. [skip ci]
Denis Ovsienko [Sun, 14 Nov 2021 21:59:29 +0000 (21:59 +0000)] Refine Markdown, mention CMake. [skip ci]

3 weeks agoRemove the non-existent 'net' symlink from
Francois-Xavier Le Bail [Sun, 14 Nov 2021 20:36:49 +0000 (21:36 +0100)] 
Remove the non-existent 'net' symlink from

3 weeks agoUpdate for,
Francois-Xavier Le Bail [Sun, 14 Nov 2021 20:20:36 +0000 (21:20 +0100)] 
Update for,

This is a follow-up to 285c3a9fb020dedf5311c6ca0b814ed1a6088bd7.

3 weeks agoRemove pcap-nit.h and pcap-pf.h from
Francois-Xavier Le Bail [Sun, 14 Nov 2021 20:05:40 +0000 (21:05 +0100)] 
Remove pcap-nit.h and pcap-pf.h from

This is a follow-up to f2054ca165f678a5f27f78f11a60a52b51458c67.

3 weeks agoUpdate for filtertest.c and findalldevstest.c
Francois-Xavier Le Bail [Sun, 14 Nov 2021 20:00:28 +0000 (21:00 +0100)] 
Update for filtertest.c and findalldevstest.c

3 weeks agoRemove acconfig.h from
Francois-Xavier Le Bail [Sun, 14 Nov 2021 19:54:47 +0000 (20:54 +0100)] 
Remove acconfig.h from

This is a follow-up to c7eb141fff6a772b71c02bb95e6ee0184fb1858c.

3 weeks agoRemove pcap-stdinc.h from
Francois-Xavier Le Bail [Sun, 14 Nov 2021 19:41:39 +0000 (20:41 +0100)] 
Remove pcap-stdinc.h from

This is a follow-up to 787f37eeffdc3c37beeca8357d667ef35880c62b.

3 weeks agoNPF: Clean up indentation.
Guy Harris [Sat, 13 Nov 2021 02:30:42 +0000 (18:30 -0800)] 
NPF: Clean up indentation.

3 weeks agoMerge pull request #1064 from nmap/npf-create-fix
Guy Harris [Sat, 13 Nov 2021 02:23:03 +0000 (18:23 -0800)] 
Merge pull request #1064 from nmap/npf-create-fix

Better error handling in pcap_create_interface() for pcap-npf.c

3 weeks agoMerge pull request #1063 from nmap/cleanup-device
Guy Harris [Sat, 13 Nov 2021 02:20:44 +0000 (18:20 -0800)] 
Merge pull request #1063 from nmap/cleanup-device

Move all cleanup actions to pcap_cleanup_live_common

3 weeks agoError if driver reports 0 timestamp modes supported 1064/head
Daniel Miller [Fri, 12 Nov 2021 22:52:32 +0000 (16:52 -0600)] 
Error if driver reports 0 timestamp modes supported

Additionally, simplify logic by using num_ts_modes directly, since VS
Code Analysis thought there was a read/write overrun otherwise.

3 weeks agoSet errmsg for pcap_create_npf, do not succeed if PacketOpenAdapter fails.
Daniel Miller [Fri, 12 Nov 2021 22:14:35 +0000 (16:14 -0600)] 
Set errmsg for pcap_create_npf, do not succeed if PacketOpenAdapter fails.

3 weeks agoMove all cleanup actions to pcap_cleanup_live_common 1063/head
Daniel Miller [Fri, 12 Nov 2021 22:04:34 +0000 (16:04 -0600)] 
Move all cleanup actions to pcap_cleanup_live_common

pcap-npf.c's pcap_cleanup_npf() expects to be able to access opt.device
in order to restore the monitor mode. This results in a use-after-free
when calling pcap_close(). Instead, do this free in
pcap_cleanup_live_common, just like all the others.

4 weeks agoAdd references to ZBOSS NCP protocol description 1061/head
Eugene Exarevsky [Mon, 8 Nov 2021 10:54:43 +0000 (13:54 +0300)] 
Add references to ZBOSS NCP protocol description

4 weeks agoNPF: fix wrong variable name.
Guy Harris [Sat, 6 Nov 2021 22:28:30 +0000 (15:28 -0700)] 
NPF: fix wrong variable name.

4 weeks agoNPF: handle ERROR_INVALID_FUNCTION from PacketGetTimestampModes().
Guy Harris [Sat, 6 Nov 2021 22:15:08 +0000 (15:15 -0700)] 
NPF: handle ERROR_INVALID_FUNCTION from PacketGetTimestampModes().

This is probably due to the driver that Packet.dll is using being a
driver for an older version of Npcap, or for WinPcap, so that the
BIOCGTIMESTAMPMODES DeviceIoControl is rejected as being unsupported.

Tell the user to try unindtalling Npcap - and WinPcap if it's installed
- and re-installing from

5 weeks agoFix comments.
Guy Harris [Wed, 3 Nov 2021 17:24:06 +0000 (10:24 -0700)] 
Fix comments.

On success, pcap_offline_read() and the read_op routine return a value >
0 that is the number of packets read or captured, respectively.  Given
that, in the calls to them in pcap_next_ex(), we pass a maximum packet
count of 1, they will read or capture, respectively, at most one packet,
so, in those particular calls, they will return 1 on success.

5 weeks agodoc: Refine Markdown in [skip ci]
Denis Ovsienko [Wed, 3 Nov 2021 11:08:26 +0000 (11:08 +0000)] 
doc: Refine Markdown in [skip ci]

5 weeks agoAdded linktype for ZBOSS NCP setial protocol.
Eugene Exarevsky [Wed, 3 Nov 2021 08:49:24 +0000 (11:49 +0300)] 
Added linktype for ZBOSS NCP setial protocol.

5 weeks agoUse PACKET_COUNT_IS_UNLIMITED() in pcap_offline_read().
Guy Harris [Wed, 3 Nov 2021 05:37:13 +0000 (22:37 -0700)] 
Use PACKET_COUNT_IS_UNLIMITED() in pcap_offline_read().

That's what should always be used to check whether a packet count
argument means "give me all the packets you have".

Check it first, so we don't compare the packet count against a zero or
negative value.

5 weeks agoFix pcap_offline_read() loop.
Guy Harris [Tue, 2 Nov 2021 23:47:29 +0000 (16:47 -0700)] 
Fix pcap_offline_read() loop.

It should loop until either

1) we get an error reading packets, but we already do that;

2) we get an EOF reading packets, but we already do that;

3) we return the number of packets the caller asked for (if they
   asked for a given number), but we already do that;

so there's no need for the loop condition to check the status - and the
old test didn't work, as the meaning of the status returned by the
next_packet_op routine changed.

5 weeks agoFix pcap_dispatch() to return number of packets processed even at EOF.
Guy Harris [Tue, 2 Nov 2021 22:21:46 +0000 (15:21 -0700)] 
Fix pcap_dispatch() to return number of packets processed even at EOF.

If it successfully read one or more packets and then got an EOF, it
would return 0 rather than the number of packets it processed.

While we're at it, change the next_packet_op routines to return 0 on EOF
and 1 on success, rather than vice versa, so that it's a bit clearer.

5 weeks agoMerge pull request #1058 from nmap/wpcap-dll-rc-version
Guy Harris [Wed, 27 Oct 2021 22:49:14 +0000 (15:49 -0700)] 
Merge pull request #1058 from nmap/wpcap-dll-rc-version

Use correct strings for DLL VersionInfo

6 weeks agoUse correct strings for DLL VersionInfo 1058/head
Daniel Miller [Wed, 27 Oct 2021 20:55:26 +0000 (15:55 -0500)] 
Use correct strings for DLL VersionInfo

Previous DLL build reported FileVersion as literally
"PACKAGE_VERSION_DLL" instead of expanding the macro because of the
quotes. Also reported original filename as "wpcap.dll" regardless of
library name configured via CMake.

This change also preserves the "libpcap" product name, since regardless
of the library name configured, the code is still the libpcap product.

7 weeks agoRevert "linux: clean up the SocketCAN header for classic CAN frames."
Guy Harris [Wed, 20 Oct 2021 07:55:00 +0000 (00:55 -0700)] 
Revert "linux: clean up the SocketCAN header for classic CAN frames."

This reverts commit e9eaad85f3888c72f79de705fae7e0768d8a622d.

We only need to do this for CAN FD frames; readers of the frames can use
thse heuristics to determine whether to trust the len8_dlc field without
our help.

7 weeks agolinux: clean up the SocketCAN header for classic CAN frames.
Guy Harris [Wed, 20 Oct 2021 07:31:11 +0000 (00:31 -0700)] 
linux: clean up the SocketCAN header for classic CAN frames.

We already clean it up for CAN FD frames; clean it up for classic CAN
frames as well, to allow heuristics to be used to try to guess whether
the len8_dlc field was filled in.

8 weeks agolinux: clean up possibly-uninitialized data in the CAN header.
Guy Harris [Tue, 12 Oct 2021 22:26:59 +0000 (15:26 -0700)] 
linux: clean up possibly-uninitialized data in the CAN header.

If the protocol is CAN FD, clear out all bits in the flags field other
than the defined ones, and clear out the two reserved fields.

If the protocol is *not* CAN FD, clear the CAN FD flag, to make sure the
packet is interpreted as classic CAN, not CAN FD.

This is done just in case the kernel or driver put uninitialized junk in
the reserved bits of the CAN header, as has apparently happened in at
least some LINKTYPE_CAN_SOCKETCAN captures, to allow programs reading
those captures to attempt to distinguish "CANFD_FDF is set because the
frame is an FD frame" from "CANFD_FDF is set because the fd_flags field
contains uninitialized junk".

8 weeks agolinux: use DLT_CAN_SOCKETCAN for CANbus interfaces.
Guy Harris [Sun, 10 Oct 2021 01:08:07 +0000 (18:08 -0700)] 
linux: use DLT_CAN_SOCKETCAN for CANbus interfaces.

Don't provide a DLT_LINUX_SLL header.  Instead, tweak the header
provided by the kernel to 1) put the "CAN ID and flags" field in host
byte order, as that's what DLT_CAN_SOCKETCAN specifies and 2) check
whether the protocol field provided as metadata (which we normally
incorporate into a DLT_LINUX_SLL header) is CAN FD rather than CAN and,
if it's CAN FD, set the CANFD_FDF flag in the DLT_CAN_SOCKETCAN header's
flags field, to indicate to the reader of the packets that it's CAN FD
rather than CAN classic.

This addresses GitHub issue #1052.

Incorporates some changes from GitHub pull request #1035.

2 months agolinux: null handlep->oneshot_buffer after freeing it.
Guy Harris [Tue, 5 Oct 2021 22:16:30 +0000 (15:16 -0700)] 
linux: null handlep->oneshot_buffer after freeing it.

That avoids double-free crashes on certain errors; see GitHub issue

2 months agolinux: fix check for CAN/CAN FD packets in the direction check routine.
Guy Harris [Thu, 23 Sep 2021 09:41:26 +0000 (02:41 -0700)] 
linux: fix check for CAN/CAN FD packets in the direction check routine.

The protocol field is big-endian, not host-endian (it's big-endian in an
sk_buff, and that makes it all the way to userland), so convert it to
host order before comparing with the CAN and CAN FD protocol types.

This addresses part of GitHub issue #1051.

2 months agoCI: Refine GCC identification. [skip appveyor]
Denis Ovsienko [Tue, 14 Sep 2021 18:13:30 +0000 (19:13 +0100)] 
CI: Refine GCC identification. [skip appveyor]

Amend the sed command in cc_id_nocache() to match more GCC varieties.
Add some examples of the input string.

2 months agoMerge pull request #1039 from gokulkumar792/add_bar_and_ba_ctl_frames
Guy Harris [Mon, 13 Sep 2021 21:38:46 +0000 (14:38 -0700)] 
Merge pull request #1039 from gokulkumar792/add_bar_and_ba_ctl_frames

IEEE 802.11: add support to filter Block Ack Req & Block Ack control frames

3 months agoMerge pull request #1008 from HilscherAutomation/master
Michael Richardson [Fri, 3 Sep 2021 19:27:23 +0000 (15:27 -0400)] 
Merge pull request #1008 from HilscherAutomation/master


3 months agoCI: Add MAKE_BIN to allow non-default makes. [skip ci]
Denis Ovsienko [Tue, 17 Aug 2021 20:20:30 +0000 (21:20 +0100)] 
CI: Add MAKE_BIN to allow non-default makes. [skip ci]

Same as in tcpdump.

3 months agoDocument some OpenIndiana particulars. [skip ci]
Denis Ovsienko [Tue, 17 Aug 2021 11:59:06 +0000 (12:59 +0100)] 
Document some OpenIndiana particulars. [skip ci]

3 months agodoc: Note some more AIX particulars. [skip ci]
Denis Ovsienko [Mon, 16 Aug 2021 10:12:43 +0000 (11:12 +0100)] 
doc: Note some more AIX particulars. [skip ci]

3 months agodoc: Add [skip ci]
Denis Ovsienko [Sun, 15 Aug 2021 21:53:03 +0000 (22:53 +0100)] 
doc: Add [skip ci]

Document more exemptions for Solaris 11.

3 months agodoc: Say, not INSTALL.txt. [skip ci]
Denis Ovsienko [Sun, 15 Aug 2021 00:15:12 +0000 (01:15 +0100)] 
doc: Say, not INSTALL.txt. [skip ci]

3 months agopcap-filter: note that = and == are the same relational operator.
Guy Harris [Sat, 14 Aug 2021 18:13:42 +0000 (11:13 -0700)] 
pcap-filter: note that = and == are the same relational operator.

This addresses GitHub issue #1044.

3 months agogencode.c: put the include of gencode.h back after the include of llc.h.
Guy Harris [Wed, 11 Aug 2021 23:08:37 +0000 (16:08 -0700)] 
gencode.c: put the include of gencode.h back after the include of llc.h.

This should fix the problem on NetBSD wherein gencode.c has NetBSD's
definition of DLT_MATCHING_MAX rather than our own definition of
DLT_MATCHING_MAX, so that it rejects valid link-layer types when told to
compile a filter for them (even if the filter is empty).  That problem
caused "make check" to fail.

We no longer include grammar.h, so defining ESP as a side-effect of
including some other random header should no longer cause a problem by

3 months agogencode.c: don't include grammar.h.
Guy Harris [Wed, 11 Aug 2021 21:46:42 +0000 (14:46 -0700)] 
gencode.c: don't include grammar.h.

It defines things necessary for communication between the lexical
analyzer and parser, but doesn't define anything we (as the semantic
part of the compiler) should need.

3 months agoFix a comment. [skip ci]
Guy Harris [Wed, 11 Aug 2021 21:42:11 +0000 (14:42 -0700)] 
Fix a comment. [skip ci]

Indicate that we're including pcap/bpf.h not only to get bpf_u_int32
defined, but to get BPF_MEMWORDS defined, so that people (like me!) know
that you can't remove the need to include pcap/bpf.h just by using
uint32_t rather than bpf_u_int32.

3 months agoAdd the minimum and maximum matching DLTs to an error message.
Guy Harris [Wed, 11 Aug 2021 09:30:28 +0000 (02:30 -0700)] 
Add the minimum and maximum matching DLTs to an error message.

This is to try to figure out why some NetBSD CI builds are failing - a
change that *shouldn't* have affected this causes "make check" to fail
on the switch-header capture files, claiing that the switch-header DLT_
values are unknown.

(Is the libpap compile picking up the system pcap/dlt.h rather than the
pcap/dlt.h in the source tree, and thus getting an old version of
DLT_MATCHING_MAX from before the addition of those link-layer types?)

3 months agoClean up comments. [skip ci]
Guy Harris [Wed, 11 Aug 2021 08:52:46 +0000 (01:52 -0700)] 
Clean up comments. [skip ci]

Consistenly use "XYZZY compiler M.N and later" rather than "... or

Consistently refer not only to GCC but to compilers claiming to be "like
GCC X.Y" by defining __GNUC__ the same way GCC X.Y does.

3 months agoCorrect a comment. [skip ci]
Guy Harris [Wed, 11 Aug 2021 08:06:34 +0000 (01:06 -0700)] 
Correct a comment.  [skip ci]

3 months agoHandle XL C a bit more like the other compilers.
Guy Harris [Wed, 11 Aug 2021 03:02:27 +0000 (20:02 -0700)] 
Handle XL C a bit more like the other compilers.

The first test is "is this someting that's not XL C", as is the case for
other compilers; that test is done as "are both __xlC__ and __ibmxl__
undefined".  If either of them are defined, use __ibmxl_version__ if
__ibmxl__ is defined, and use __xlC__ otherwise.

That makes it a bit easier to read.

3 months agoAdd comments and indentation to make the tests easier to read.
Guy Harris [Wed, 11 Aug 2021 02:36:45 +0000 (19:36 -0700)] 
Add comments and indentation to make the tests easier to read.

This is especially useful for XL C, where the tests aren't a simple
single "XL vs. not XL C" test.

3 months agoFixup the previous commit.
Denis Ovsienko [Wed, 11 Aug 2021 01:54:56 +0000 (02:54 +0100)] 
Fixup the previous commit.

pcap-types.h is available in the libpcap source tree, but not in the
destination prefix directory, so libpcap builds were fine, but some
tcpdump builds were not:

/tmp/tcpdump_build_matrix.tJGlC8Py/include/pcap/bpf.h:83:10: fatal
  error: pcap-types.h: No such file or directory

Port the contents of pcap-types.h into pcap/bpf.h.

3 months agoFix compiling on Solaris 11.4/AMD64.
Denis Ovsienko [Tue, 10 Aug 2021 23:17:19 +0000 (00:17 +0100)] 
Fix compiling on Solaris 11.4/AMD64.

In gencode.h and pcap/bpf.h include necessary headers in order not to
depend on other files to do so.

In gencode.c, grammar.c (via and scanner.c (via scanner.l)
include gencode.h and grammar.h as early as it takes for the token enum
identifiers not to clash with the named constants defined in system
headers. This fixes the following error with Clang (also with GCC and a
more vague message):

./grammar.h:116:5: error: expected identifier
    ESP = 326,
/usr/include/sys/regset.h:86:14: note: expanded from macro 'ESP'
 #define ESP             7

In add an exemption rule for the remaining warnings. Now
libpcap can complete the default matrix build (4 rounds with GCC 7.3.0
and 4 rounds with Clang 6.0.0).

3 months agoAdd multiple inclusion guards to gencode.h. [skip ci]
Denis Ovsienko [Tue, 10 Aug 2021 20:26:29 +0000 (21:26 +0100)] 
Add multiple inclusion guards to gencode.h. [skip ci]

3 months agoRefine the #ifndef guard in charconv.h. [skip ci]
Denis Ovsienko [Tue, 10 Aug 2021 12:49:21 +0000 (13:49 +0100)] 
Refine the #ifndef guard in charconv.h. [skip ci]

3 months agoFix get_if_flags() signature after commit ff647f1. [skip ci]
Denis Ovsienko [Tue, 10 Aug 2021 10:48:06 +0000 (11:48 +0100)] 
Fix get_if_flags() signature after commit ff647f1. [skip ci]

Both versions of the function use "flags", so lose the _U_ and the
induced warnings on Solaris 11 (from Clang only):

./pcap-bpf.c:2982:7: warning: 'flags' was marked unused but was used
./pcap-bpf.c:2987:4: warning: 'flags' was marked unused but was used

3 months agoDo not define __EXTENSIONS__ if already defined. [skip ci]
Denis Ovsienko [Tue, 10 Aug 2021 10:33:09 +0000 (11:33 +0100)] 
Do not define __EXTENSIONS__ if already defined. [skip ci]

Same as in tcpdump.

./ftmacros.h:48:11: warning: '__EXTENSIONS__' macro redefined
<built-in>:347:9: note: previous definition is here

3 months agoconfigure: Fix a yacc/bison error message. [skip ci]
Denis Ovsienko [Tue, 10 Aug 2021 07:49:14 +0000 (08:49 +0100)] 
configure: Fix a yacc/bison error message. [skip ci]

configure:8756: error:  is insufficient to compile libpcap.

4 months agoUse __builtin_unreachable(). [skip ci]
Denis Ovsienko [Fri, 6 Aug 2021 22:37:23 +0000 (23:37 +0100)] 
Use __builtin_unreachable(). [skip ci]

Refine the changes made in commit 3f35396 and use a macro with comments.

4 months agoCI: Get randomness right in mktempdir_diy(). [skip ci]
Denis Ovsienko [Wed, 4 Aug 2021 00:10:43 +0000 (01:10 +0100)] 
CI: Get randomness right in mktempdir_diy(). [skip ci]

Same as in tcpslice.

4 months agoCMake: Fix EXTRA_CFLAGS after commit 29d7856. [skip appveyor]
Denis Ovsienko [Tue, 3 Aug 2021 21:34:14 +0000 (22:34 +0100)] 
CMake: Fix EXTRA_CFLAGS after commit 29d7856. [skip appveyor]

check_and_add_compiler_option() takes a string, not a variable. Get it
right this time and run CMake builds with a warnings guard again.

4 months agoCI: Disable pcap-linux.c exemption with remarks. [skip appveyor]
Denis Ovsienko [Tue, 3 Aug 2021 13:59:39 +0000 (14:59 +0100)] 
CI: Disable pcap-linux.c exemption with remarks. [skip appveyor]

4 months agoPort XL C updates into compiler-tests.h. [skip appveyor]
Denis Ovsienko [Mon, 2 Aug 2021 22:40:01 +0000 (23:40 +0100)] 
Port XL C updates into compiler-tests.h. [skip appveyor]

Since CI is using XL C 16.1, it is better to keep the macro in shape.

4 months agopcap-config: don't provide -L/usr/lib for pkg-config --libs.
Guy Harris [Mon, 2 Aug 2021 08:04:53 +0000 (01:04 -0700)] 
pcap-config: don't provide -L/usr/lib for pkg-config --libs.

It shouldn't be necessary, as C compilers generally look there by
default and... can cause problems if the libpcap you want *isn't* in /usr/lib.
For example, on some systems that support both 32-bit and 64-bit
executables, this might cause the 32-bit library to be found, even on
64-bit platforms, with hilarity ensuing afterwards.

In particular, on Solaris 11, where /usr/lib has the 32-bit libraries
and /usr/lib/{something} has the 64-bit libraries ({something} depends
on whether it's SPARC or x86), that's what happens if you try to do a
CMake build of tcpdump against the system libpcap:

The CMake file for finding pcap converts the -lpcap provided by
pcap-config into the absolute path of libpcap, and that's the path of
the 32-bit library, as it looks in /usr/lib.  (CMake really wants "find
library" scripts to supply a list of libraries giving their absolute

Thus, if you're using GCC, the tests done to find out what pcap APIs are
available will fail, as the test programs get build 64-bit but are
linked with the 32-bit libpcap; the link fails as you're mixing 32-bit
and 64-bit code, and the CMake script treats that as meaning "the
function isn't available".

(Sun C apparently somehow manages either to build 32-bit code by
default, so that linking with /usr/lib/ succeeds, or realizes
that linking 64-bit code with /usr/lib/{library}.so is bogus and links
with /usr/lib/{something}/ instead.)

Debian removed the -L in pcap-config for similar reasons; to quote the
comment at the beginning of the patch file:

Remove -L<libdir> from default pcap-config --libs output, as
libdir is already in the default toolchain search path on
Debian, and we want the generated script to be arch-independent.

(We don't remove it from the .pc file; we assume that 1) pkg-config and
2) the packager of libpcap does what is necessary to make this work.)

4 months agoSquelch a warning in pcap_open_offline_with_tstamp_precision().
Denis Ovsienko [Sun, 1 Aug 2021 22:16:46 +0000 (23:16 +0100)] 
Squelch a warning in pcap_open_offline_with_tstamp_precision().

Clang 10.0.1 on NetBSD 9.2 and OpenBSD 6.9:

./savefile.c:354:4: warning: code will never be executed

In Linux, for example, stdin is a pointer to FILE, so it can be NULL or
non-NULL. In NetBSD and OpenBSD it is a macro:

 #define stdin   (&__sF[0])

By definition, address of a variable is never NULL hence the warning.
However, assigning the address to a pointer and then immediately
comparing the pointer with NULL is not a condition that is always false,
as far as Clang sees it. Apply the workaround and remove two exemption
rules from

4 months agoCI: Squelch shellcheck warnings. [skip ci]
Denis Ovsienko [Sat, 31 Jul 2021 23:08:42 +0000 (00:08 +0100)] 
CI: Squelch shellcheck warnings. [skip ci]

4 months agoCMake: Build valgrindtest only if Autoconf would. [skip ci]
Denis Ovsienko [Sat, 31 Jul 2021 19:45:15 +0000 (20:45 +0100)] 
CMake: Build valgrindtest only if Autoconf would. [skip ci]

In partucular, MATRIX_CMAKE=yes subset on Solaris 10 always failed
trying to compile valgrindtest.c without <net/bpf.h>.

4 months agoCMake: Handle EXTRA_CFLAGS w/o add_compile_options().
Denis Ovsienko [Sat, 31 Jul 2021 18:46:22 +0000 (19:46 +0100)] 
CMake: Handle EXTRA_CFLAGS w/o add_compile_options().

CMake Error at CMakeLists.txt:2063 (add_compile_options):
  Unknown CMake command "add_compile_options".

$ cmake --version
cmake version 2.8.9

The command was introduced in CMake 2.8.12, and the current minimum
required version is 2.8.6. Rewrite it consistently with the rest of the

4 months agoDefine DIAG_OFF_FORMAT_TRUNCATION better.
Denis Ovsienko [Sat, 31 Jul 2021 18:27:30 +0000 (19:27 +0100)] 

Apparently, GCC 4.6.4 didn't like it:

pcap-new.c:241:4: warning: unknown option after '#pragma GCC diagnostic'
  kind [-Wpragmas]
pcap-new.c:259:4: warning: unknown option after '#pragma GCC diagnostic'
  kind [-Wpragmas]
pcap-new.c:452:2: warning: unknown option after '#pragma GCC diagnostic'
  kind [-Wpragmas]
pcap-rpcap.c:3369:4: warning: unknown option after '#pragma GCC
  diagnostic' kind [-Wpragmas]
pcap-rpcap.c:3406:4: warning: unknown option after '#pragma GCC
 diagnostic' kind [-Wpragmas]
rpcapd.c:1365:4: warning: unknown option after '#pragma GCC diagnostic'
  kind [-Wpragmas]

4 months agoCI: Introduce and use LIBPCAP_TAINTED. [skip appveyor]
Denis Ovsienko [Sat, 31 Jul 2021 16:15:09 +0000 (17:15 +0100)] 
CI: Introduce and use LIBPCAP_TAINTED. [skip appveyor]

Same as in tcpslice and tcpdump earlier.  This should cover both
Autoconf and CMake.

4 months agoAddress two truncation warnings in pcap_open_live().
Denis Ovsienko [Sat, 31 Jul 2021 14:00:51 +0000 (15:00 +0100)] 
Address two truncation warnings in pcap_open_live().

These warnings have been around for a while in the REMOTE=yes space of
all Linux builds and OpenBSD/AMD64 build. Pass each of the offending
strings through a tailored buffer to satisfy GCC.

./pcap.c: In function 'pcap_open_live':
./pcap.c:2858:47: warning: '%.*s' directive output may be truncated
writing up to 250 bytes into a region of size between 249 and 252
 2858 |   snprintf(errbuf, PCAP_ERRBUF_SIZE, "%s: %s (%.*s)", device,
      |                                               ^~~~
In file included from /usr/include/stdio.h:867,
                 from ./pcap.c:56:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note:
'__builtin___snprintf_chk' output 6 or more bytes (assuming 259) into a
destination of size 256

./pcap.c:2853:43: warning: '%.*s' directive output may be truncated
writing up to 253 bytes into a region of size between 251 and 254
 2853 |   snprintf(errbuf, PCAP_ERRBUF_SIZE, "%s: %.*s", device,
      |                                           ^~~~
In file included from /usr/include/stdio.h:867,
                 from ./pcap.c:56:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note:
'__builtin___snprintf_chk' output 3 or more bytes (assuming 259) into a
destination of size 256

4 months agoCI: Port some improvements from tcpdump. [skip appveyor]
Denis Ovsienko [Sat, 31 Jul 2021 08:44:05 +0000 (09:44 +0100)] 
CI: Port some improvements from tcpdump. [skip appveyor]

Improve OS and compiler identification, print matrix progress to stderr.

4 months agoSquelch a few warnings on AIX. [skip appveyor]
Denis Ovsienko [Fri, 30 Jul 2021 21:30:07 +0000 (22:30 +0100)] 
Squelch a few warnings on AIX. [skip appveyor]

See also tcpdump commit b7401ff.

* GCC 8.3.0 on AIX 7.1 and GCC 7.2.0 on AIX 7.2
./gencode.c: In function 'bpf_error':
./gencode.c:478:1: warning: 'noreturn' function does return

* GCC 8.3.0 on AIX 7.1
./optimize.c: In function 'opt_error':
./optimize.c:2424:1: warning: 'noreturn' function does return
./optimize.c: In function 'conv_error':
./optimize.c:2928:1: warning: 'noreturn' function does return

* XL C 12.1.0 on AIX 7.1 and XL C 13.1.3 on AIX 7.2:
"./nametoaddr.c", line 790.27: 1506-280 (W) Function argument assignment
between types "char*" and "const char*" is not allowed.

4 months Expand the flex error message. [skip ci]
Denis Ovsienko [Fri, 30 Jul 2021 20:44:42 +0000 (21:44 +0100)] Expand the flex error message. [skip ci]

This should make AIX and Solaris builds a bit more user-friendly.

4 months agoMerge pull request #1038 from mruprich/pathstr_leak
Guy Harris [Wed, 28 Jul 2021 21:08:47 +0000 (14:08 -0700)] 
Merge pull request #1038 from mruprich/pathstr_leak

Possible resource leak in pcap-linux.c

4 months agoCirrus CI: Reduce freebsd-amd64 footprint a bit.
Denis Ovsienko [Wed, 28 Jul 2021 20:32:59 +0000 (21:32 +0100)] 
Cirrus CI: Reduce freebsd-amd64 footprint a bit.

Same as in tcpslice.

4 months agoCI: Copy from tcpdump.
Denis Ovsienko [Wed, 28 Jul 2021 20:29:33 +0000 (21:29 +0100)] 
CI: Copy from tcpdump.

4 months agoIEEE 802.11: add support to filter Block Ack Req & Block Ack control frames 1039/head
Gokul Sivakumar [Wed, 28 Jul 2021 16:46:18 +0000 (22:16 +0530)] 
IEEE 802.11: add support to filter Block Ack Req & Block Ack control frames

As per the IEEE 802.11-2016 std, section, Table 9-1, the control
frame Block Ack Request has the subtype 0b1000 and frame Block Ack has the
subtype 0b1001. Add this two control frame subtypes in ieee80211.h so that
the 802.11 frames can be filtered using "bar" or "ba" in addition to the
other ctl frame subtypes.

4 months agoPossible resource leak in pcap-linux.c 1038/head
Michal Ruprich [Tue, 27 Jul 2021 08:00:00 +0000 (10:00 +0200)] 
Possible resource leak in pcap-linux.c

4 months agoconfigure: use AC_COMPILE_IFELSE() and AC_LANG_SOURCE() for testing flags.
Guy Harris [Sun, 25 Jul 2021 10:00:36 +0000 (03:00 -0700)] 
configure: use AC_COMPILE_IFELSE() and AC_LANG_SOURCE() for testing flags.

That lets us completely control the program that's compiled with the
compiler flag we're testing, so we can make it a minimal program that
uses only prototype declarations and that therefore won't generate
warnings with some -W flags, e.g. -Wold-style-definition, and thus won't
falsely report those flags as unsupported.

4 months agoconfigure: AC_TRY_COMPILE() generates a return; don't add one.
Guy Harris [Sun, 25 Jul 2021 09:17:19 +0000 (02:17 -0700)] 
configure: AC_TRY_COMPILE() generates a return; don't add one.

If we pass [return 0] to AC_TRY_COMPILE(), the test program it compiles
has two "return 0;" statements in a row, and one of the -W flags we
tests reports a warning for that.

We were testing whether a -W flag is supported by checking the standard
error of the compiler to see if *any* error/warning messages are
generated, and treating the flag as unsupported if any are, that meant
that -Wunreachable-code-return was be treated as unsupported even though
it *is* supported.

This should fix that.  (That flag isn't currently used here, but it is
used for tcpdump, and we want to make this change and the previous
change in tcpdump as well.  I'm so glad autoconf makes this all so
difficult to do correctly....)

4 months agoconfigure: use ac_c_werror_flag to force unknown compiler flags to fail.
Guy Harris [Sun, 25 Jul 2021 07:15:40 +0000 (00:15 -0700)] 
configure: use ac_c_werror_flag to force unknown compiler flags to fail.

It's not a documented feature, but it's what the documented
AC_LANG_WERROR has used for 13 years, and there's no push/pop mechanism
for AC_LANG_WERROR, so you can't ensure that "fail even on warnings"
will be applied *only* in AC_LBL_CHECK_COMPILER_OPT(), as that's what we
want.  (If we can make sure that *no* compiler tests will produce
warnings, except for the ones we *want* to fail if they produce
warnings, we could just do AC_LANG_WERROR, but that might be tricky to
ensure in the general case.)

We do this because not all compilers have a command-line flag to force
all warnings, *including* warnings from unknown commad-line flags (I'm
looking at *you* IBM XL C!), so we have to have the test check to make
sure no warnings are produced (which, for AC_TRY_COMPILE(), means
"nothing is written to the standard output").

4 months agoGet "make shellcheck" to pass again. [skip ci]
Denis Ovsienko [Fri, 23 Jul 2021 13:13:51 +0000 (14:13 +0100)] 
Get "make shellcheck" to pass again. [skip ci]

4 months agoFix "make releasetar" on Solaris as well. [skip ci]
Denis Ovsienko [Thu, 22 Jul 2021 16:24:30 +0000 (17:24 +0100)] 
Fix "make releasetar" on Solaris as well. [skip ci]

This is a follow-up to commit 2629a1f. See tcpslice commit 32f0434 for
the rationale.

4 months agorpcapd: clean up the code to fill in the struct rpcap_findalldevs_if.
Guy Harris [Thu, 22 Jul 2021 08:19:07 +0000 (01:19 -0700)] 
rpcapd: clean up the code to fill in the struct rpcap_findalldevs_if.

Make findalldevs_if the on-the-stack struct rpcap_findalldevs_if, and
fill it in directly.  Once it's completely filled in, check that it fits
in the output buffer and copy it to the output buffer using

This makes the code a little easier to figure out.

4 months agoClean up the arguments to sock_bufferize().
Guy Harris [Thu, 22 Jul 2021 08:15:31 +0000 (01:15 -0700)] 
Clean up the arguments to sock_bufferize().

Make the first argument a void * - it can point to anything, not just,
for example, a character string.  It's not a "buffer", it's just data,
whatever that might be, so call it "data", not "buffer".

Rename "tempbuf" to "outbuf" to indicate that it's a buffer location
into which data is copied.

In English, stuff would be contained in "data", not contained into
"data" - into suggests that stuff is being copied into it by the
routine, which isn't the case - and stuff isn't copied in "outbuf", it's
copied into "outbuf".

Update the comment for sock_bufferize() to reflect all this.

4 months agorpcap: don't do pointless integer->string and then string->integer conversions.
Guy Harris [Thu, 22 Jul 2021 06:50:32 +0000 (23:50 -0700)] 
rpcap: don't do pointless integer->string and then string->integer conversions.

The string->integer conversion was also broken, as it passed a pointer
to a 16-bit integer to a sscanf() call that used %d rather than %hd.
It'd overwrite 2 bytes past the 16-bit integer; it may set the integer
"correctly" on a little-endian, but wouldn't even do *that* on a
big-endian machine.

4 months agoCI: Port recent improvements from tcpslice. [skip appveyor]
Denis Ovsienko [Wed, 21 Jul 2021 23:22:19 +0000 (00:22 +0100)] 
CI: Port recent improvements from tcpslice. [skip appveyor]

Start using, make default assignments early and
uniformly, use Solaris-compatible command substitution, install bc on
linux-amd64. This implements initial support for AIX and Solaris in the
libpcap build matrix scripts.

4 months agorpcapd: note the alignment issue, get rid of an extra pointer variable.
Guy Harris [Wed, 21 Jul 2021 20:56:19 +0000 (13:56 -0700)] 
rpcapd: note the alignment issue, get rid of an extra pointer variable.

Add a comment noting why we aren't just filling in structures in the
output buffer when constructing a findalldevs response.

Instead of naming the address structures "tmp", and having a pointer to
them, just give them regular names and fill them in without a pointer.

Make some white space stylistic changes while we're at it.

4 months agoMerge pull request #1037 from lordrasmus/master
Guy Harris [Wed, 21 Jul 2021 20:33:41 +0000 (13:33 -0700)] 
Merge pull request #1037 from lordrasmus/master

fix unaligned access to structs in rpcapd

4 months agofix unaligned access to structs in daemon_msg_findallif_req() and daemon_seraddr() 1037/head
ramin [Wed, 21 Jul 2021 09:13:01 +0000 (11:13 +0200)] 
fix unaligned access to structs in daemon_msg_findallif_req() and daemon_seraddr()

if an interface has, for example a 3 char name ( unm ), the pointer for sockaddrout_ipv4
gets an uneven address like 0x1003

an processors with alignment restrictions like arm and mips
the write to sockaddrout_ipv4->family does not write to 0x1003 but to 0x1002

same problem for findalldevs_if

so an local variable is defined which will have the correct alignment and then
the variable is copied to the destination address with memcpy