svn commit: r244010 - in projects/bpfjit/sys: net netgraph
Jung-uk Kim
jkim at FreeBSD.org
Sat Dec 8 01:11:57 UTC 2012
Author: jkim
Date: Sat Dec 8 01:11:55 2012
New Revision: 244010
URL: http://svnweb.freebsd.org/changeset/base/244010
Log:
Disable bpfjit by default. Only allow toggling when a filter is set.
Modified:
projects/bpfjit/sys/net/bpf.c
projects/bpfjit/sys/net/bpfjit.c
projects/bpfjit/sys/net/bpfjit.h
projects/bpfjit/sys/netgraph/ng_bpf.c
Modified: projects/bpfjit/sys/net/bpf.c
==============================================================================
--- projects/bpfjit/sys/net/bpf.c Sat Dec 8 00:47:03 2012 (r244009)
+++ projects/bpfjit/sys/net/bpf.c Sat Dec 8 01:11:55 2012 (r244010)
@@ -1776,10 +1776,11 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
}
#ifdef BPFJIT
/* Filter is copied inside fcode and is perfectly valid. */
- jfunc = bpfjit_generate_code(fcode, flen);
-
- if (jfunc == NULL && bootverbose)
- printf("bpf_setf: failed to compile filter\n");
+ if (bpfjit_enable != 0) {
+ jfunc = bpfjit_generate_code(fcode, flen);
+ if (jfunc == NULL && bootverbose)
+ printf("bpf_setf: failed to compile filter\n");
+ }
#endif
}
@@ -2062,10 +2063,10 @@ bpf_tap(struct bpf_if *bp, u_char *pkt,
* the interface pointers on the mbuf to figure it out.
*/
#ifdef BPFJIT
- bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
- if (bf != NULL)
+ if (d->bd_bfilter != NULL) {
+ bf = d->bd_bfilter;
slen = bf(pkt, pktlen, pktlen);
- else
+ } else
#endif
slen = bpf_filter(d->bd_rfilter, pkt, pktlen, pktlen);
if (slen != 0) {
@@ -2123,10 +2124,10 @@ bpf_mtap(struct bpf_if *bp, struct mbuf
continue;
++d->bd_rcount;
#ifdef BPFJIT
- bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
- if (bf != NULL)
+ if (d->bd_bfilter != NULL) {
+ bf = d->bd_bfilter;
slen = bf((u_char *)m, pktlen, 0);
- else
+ } else
#endif
slen = bpf_filter(d->bd_rfilter, (u_char *)m, pktlen, 0);
if (slen != 0) {
@@ -2188,10 +2189,10 @@ bpf_mtap2(struct bpf_if *bp, void *data,
continue;
++d->bd_rcount;
#ifdef BPFJIT
- bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
- if (bf != NULL)
+ if (d->bd_bfilter != NULL) {
+ bf = d->bd_bfilter;
slen = bf((u_char *)&mb, pktlen, 0);
- else
+ } else
#endif
slen = bpf_filter(d->bd_rfilter, (u_char *)&mb, pktlen, 0);
if (slen != 0) {
Modified: projects/bpfjit/sys/net/bpfjit.c
==============================================================================
--- projects/bpfjit/sys/net/bpfjit.c Sat Dec 8 00:47:03 2012 (r244009)
+++ projects/bpfjit/sys/net/bpfjit.c Sat Dec 8 01:11:55 2012 (r244010)
@@ -58,10 +58,10 @@ uint32_t m_xword(const struct mbuf *, ui
uint32_t m_xhalf(const struct mbuf *, uint32_t, int *);
uint32_t m_xbyte(const struct mbuf *, uint32_t, int *);
-int bpfjit_disable = 0;
+int bpfjit_enable = 0;
SYSCTL_NODE(_net, OID_AUTO, bpfjit, CTLFLAG_RW, 0, "BPF just-in-time compiler");
-SYSCTL_INT(_net_bpfjit, OID_AUTO, disable, CTLFLAG_RW, &bpfjit_disable, 0,
- "disable BPF just-in-time compiler");
+SYSCTL_INT(_net_bpfjit, OID_AUTO, enable, CTLFLAG_RW, &bpfjit_enable, 0,
+ "enable BPF just-in-time compiler");
#else
Modified: projects/bpfjit/sys/net/bpfjit.h
==============================================================================
--- projects/bpfjit/sys/net/bpfjit.h Sat Dec 8 00:47:03 2012 (r244009)
+++ projects/bpfjit/sys/net/bpfjit.h Sat Dec 8 01:11:55 2012 (r244010)
@@ -49,7 +49,7 @@
#endif
#ifdef _KERNEL
-extern int bpfjit_disable;
+extern int bpfjit_enable;
#endif
/*
Modified: projects/bpfjit/sys/netgraph/ng_bpf.c
==============================================================================
--- projects/bpfjit/sys/netgraph/ng_bpf.c Sat Dec 8 00:47:03 2012 (r244009)
+++ projects/bpfjit/sys/netgraph/ng_bpf.c Sat Dec 8 01:11:55 2012 (r244010)
@@ -451,7 +451,7 @@ ng_bpf_rcvdata(hook_p hook, item_p item)
/* Run packet through filter */
#ifdef BPFJIT
- if (bpfjit_disable == 0 && hip->jit_prog != NULL) {
+ if (hip->jit_prog != NULL) {
if (data)
len = (hip->jit_prog)(data, totlen, totlen);
else
@@ -545,7 +545,7 @@ ng_bpf_setprog(hook_p hook, const struct
const hinfo_p hip = NG_HOOK_PRIVATE(hook);
struct ng_bpf_hookprog *hp;
#ifdef BPFJIT
- bpfjit_function_t jit_prog;
+ bpfjit_function_t jit_prog = NULL;
#endif
int size;
@@ -560,8 +560,10 @@ ng_bpf_setprog(hook_p hook, const struct
if (hp == NULL)
return (ENOMEM);
bcopy(hp0, hp, size);
+
#ifdef BPFJIT
- jit_prog = bpfjit_generate_code(hp->bpf_prog, hp->bpf_prog_len);
+ if (bpfjit_enable != 0)
+ jit_prog = bpfjit_generate_code(hp->bpf_prog, hp->bpf_prog_len);
#endif
/* Free previous program, if any, and assign new one */
More information about the svn-src-projects
mailing list