summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2009-08-12 17:28:53 +0000
committerjkim <jkim@FreeBSD.org>2009-08-12 17:28:53 +0000
commitcda13d6d86bd52b9bdbe8d98d739aeccaf6ddff9 (patch)
tree2acde28a42f15b9f604c2ad5c43272ed83a58be7
parente0f9ca5ab5b6816a246a04faceaae64adbc9b8cd (diff)
downloadFreeBSD-src-cda13d6d86bd52b9bdbe8d98d739aeccaf6ddff9.zip
FreeBSD-src-cda13d6d86bd52b9bdbe8d98d739aeccaf6ddff9.tar.gz
Always embed pointer to BPF JIT function in BPF descriptor
to avoid inconsistency when opt_bpf.h is not included. Reviewed by: rwatson Approved by: re (rwatson)
-rw-r--r--sys/net/bpf.c18
-rw-r--r--sys/net/bpf_buffer.c1
-rw-r--r--sys/net/bpf_zerocopy.c1
-rw-r--r--sys/net/bpfdesc.h4
4 files changed, 13 insertions, 11 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index 08c9a5e..9656a6e 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -1585,6 +1585,9 @@ void
bpf_tap(struct bpf_if *bp, u_char *pkt, u_int pktlen)
{
struct bpf_d *d;
+#ifdef BPF_JITTER
+ bpf_jit_filter *bf;
+#endif
u_int slen;
int gottime;
struct timeval tv;
@@ -1601,8 +1604,9 @@ bpf_tap(struct bpf_if *bp, u_char *pkt, u_int pktlen)
* the interface pointers on the mbuf to figure it out.
*/
#ifdef BPF_JITTER
- if (bpf_jitter_enable != 0 && d->bd_bfilter != NULL)
- slen = (*(d->bd_bfilter->func))(pkt, pktlen, pktlen);
+ bf = bpf_jitter_enable != 0 ? d->bd_bfilter : NULL;
+ if (bf != NULL)
+ slen = (*(bf->func))(pkt, pktlen, pktlen);
else
#endif
slen = bpf_filter(d->bd_rfilter, pkt, pktlen, pktlen);
@@ -1634,6 +1638,9 @@ void
bpf_mtap(struct bpf_if *bp, struct mbuf *m)
{
struct bpf_d *d;
+#ifdef BPF_JITTER
+ bpf_jit_filter *bf;
+#endif
u_int pktlen, slen;
int gottime;
struct timeval tv;
@@ -1655,11 +1662,10 @@ bpf_mtap(struct bpf_if *bp, struct mbuf *m)
BPFD_LOCK(d);
++d->bd_rcount;
#ifdef BPF_JITTER
+ bf = bpf_jitter_enable != 0 ? d->bd_bfilter : NULL;
/* XXX We cannot handle multiple mbufs. */
- if (bpf_jitter_enable != 0 && d->bd_bfilter != NULL &&
- m->m_next == NULL)
- slen = (*(d->bd_bfilter->func))(mtod(m, u_char *),
- pktlen, pktlen);
+ if (bf != NULL && m->m_next == NULL)
+ slen = (*(bf->func))(mtod(m, u_char *), pktlen, pktlen);
else
#endif
slen = bpf_filter(d->bd_rfilter, (u_char *)m, pktlen, 0);
diff --git a/sys/net/bpf_buffer.c b/sys/net/bpf_buffer.c
index 5f740b3..8924c88 100644
--- a/sys/net/bpf_buffer.c
+++ b/sys/net/bpf_buffer.c
@@ -77,7 +77,6 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <net/bpf.h>
#include <net/bpf_buffer.h>
-#include <net/bpf_jitter.h>
#include <net/bpfdesc.h>
/*
diff --git a/sys/net/bpf_zerocopy.c b/sys/net/bpf_zerocopy.c
index 35b27b9..a1dd923 100644
--- a/sys/net/bpf_zerocopy.c
+++ b/sys/net/bpf_zerocopy.c
@@ -46,7 +46,6 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <net/bpf.h>
-#include <net/bpf_jitter.h>
#include <net/bpf_zerocopy.h>
#include <net/bpfdesc.h>
diff --git a/sys/net/bpfdesc.h b/sys/net/bpfdesc.h
index 2ff3d5e..5784763 100644
--- a/sys/net/bpfdesc.h
+++ b/sys/net/bpfdesc.h
@@ -72,9 +72,7 @@ struct bpf_d {
u_long bd_rtout; /* Read timeout in 'ticks' */
struct bpf_insn *bd_rfilter; /* read filter code */
struct bpf_insn *bd_wfilter; /* write filter code */
-#ifdef BPF_JITTER
- bpf_jit_filter *bd_bfilter; /* binary filter code */
-#endif
+ void *bd_bfilter; /* binary filter code */
u_int64_t bd_rcount; /* number of packets received */
u_int64_t bd_dcount; /* number of packets dropped */
OpenPOWER on IntegriCloud