summaryrefslogtreecommitdiff
path: root/pcap-tc.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2018-08-31 20:08:50 -0700
committerGuy Harris <guy@alum.mit.edu>2018-08-31 20:08:50 -0700
commit1131a7c26c6f4d4772e4a2beeaf7212f4dea74ac (patch)
tree5fb97fbab51bd838aed0219ecf71c72f4403897c /pcap-tc.c
parent9c3cc5e26f74c3259a3428cae034ac818ba56fd9 (diff)
downloadlibpcap-1131a7c26c6f4d4772e4a2beeaf7212f4dea74ac.tar.gz
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.
Diffstat (limited to 'pcap-tc.c')
-rw-r--r--pcap-tc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/pcap-tc.c b/pcap-tc.c
index 38c70245..a1f58911 100644
--- a/pcap-tc.c
+++ b/pcap-tc.c
@@ -985,7 +985,7 @@ static int TcRead(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
/* No underlaying filtering system. We need to filter on our own */
if (p->fcode.bf_insns)
{
- filterResult = bpf_filter(p->fcode.bf_insns, data, tcHeader.Length, tcHeader.CapturedLength);
+ filterResult = pcap_filter(p->fcode.bf_insns, data, tcHeader.Length, tcHeader.CapturedLength);
if (filterResult == 0)
{