]> The Tcpdump Group git mirrors - libpcap/commit
Clean up the declaration of the packet-filtering routines.
authorGuy Harris <[email protected]>
Sat, 1 Sep 2018 03:08:50 +0000 (20:08 -0700)
committerGuy Harris <[email protected]>
Sat, 1 Sep 2018 03:08:50 +0000 (20:08 -0700)
commit1131a7c26c6f4d4772e4a2beeaf7212f4dea74ac
tree5fb97fbab51bd838aed0219ecf71c72f4403897c
parent9c3cc5e26f74c3259a3428cae034ac818ba56fd9
Clean up the declaration of the packet-filtering routines.

If net/bpf.h declares bpf_filter() one way and libpcap defines it
another way, even pcap-bpf.c needs a declaration that matches how
libpcap defines it, not how net/bpf.h (mistakenly) declares it.
("Mistakenly" because it should *not* be declaring the kernel's version
of bpf_filter() unless it's being used in a *kernel* build; other *BSDs,
and macOS, declare it only in kernel builds by testing for a #define
such as KERNEL or KERNEL_PRIVATE, but NetBSD doesn't - it *should*, but
it doesn't.)

So we rename the internal-to-pcap filtering routine as pcap_filter(),
which is not exported from libpcap, and have bpf_filter() be a wrapper
around pcap_filter() that is exported.

Use pcap_filter(), rather than bpf_filter(), for all filtering inside
libpcap (except for filtering that uses bpf_filter_with_aux_data(),
which we rename pcap_filter_with_aux_data()).

Do the same for bpf_validate(), which is *also* declared in net/bpf.h,
even for non-kernel builds, in NetBSD.

As we're not exporting pcap_filter_with_aux_data(), don't even *declare*
it in a public header; don't declare struct bpf_aux_data in a public
header, either.  That way we can change it without worrying about
breaking APIs or ABIs; we may do that if, for example, we want to
support the "inbound" and "outbound" filters when reading pcapng files,
adding a direction indicator to that structure.

Declare bpf_filter() in pcap/bpf.h even on NetBSD and QNX; pcap-bpf.c
doesn't include pcap/bpf.h (it sets a #define to force pcap/pcap.h not
to include it), so we won't get any collisions if net/bpf.h (which it
does include) declares it.  The only collisions will occur in programs
that include *both* pcap/pcap.h or pcap/bpf.h *and* net/bpf.h, and that
will occur only if net/bpf.h declares bpf_filter() even when building
userland code, and the correct fix for *that* is to fix net/bpf.h not to
declare them in non-kernel builds.
28 files changed:
bpf_filter.c
dlpisubs.c
optimize.c
pcap-bpf.c
pcap-bt-linux.c
pcap-bt-monitor-linux.c
pcap-dag.c
pcap-dbus.c
pcap-dos.c
pcap-enet.c
pcap-int.h
pcap-linux.c
pcap-netfilter-linux.c
pcap-netmap.c
pcap-nit.c
pcap-npf.c
pcap-pf.c
pcap-rdmasniff.c
pcap-septel.c
pcap-snf.c
pcap-snit.c
pcap-snoop.c
pcap-tc.c
pcap-usb-linux.c
pcap.c
pcap/bpf.h
savefile.c
testprogs/filtertest.c