summaryrefslogtreecommitdiffstats
path: root/sys/net/bpf.c
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 /sys/net/bpf.c
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)
Diffstat (limited to 'sys/net/bpf.c')
-rw-r--r--sys/net/bpf.c18
1 files changed, 12 insertions, 6 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);
OpenPOWER on IntegriCloud