svn commit: r243922 - in projects/bpfjit/sys: net netgraph
Jung-uk Kim
jkim at FreeBSD.org
Thu Dec 6 00:17:26 UTC 2012
Author: jkim
Date: Thu Dec 6 00:17:25 2012
New Revision: 243922
URL: http://svnweb.freebsd.org/changeset/base/243922
Log:
Convert bpf(4) and ng_bpf(4) to new bpfjit APIs.
Modified:
projects/bpfjit/sys/net/bpf.c
projects/bpfjit/sys/netgraph/ng_bpf.c
Modified: projects/bpfjit/sys/net/bpf.c
==============================================================================
--- projects/bpfjit/sys/net/bpf.c Thu Dec 6 00:13:57 2012 (r243921)
+++ projects/bpfjit/sys/net/bpf.c Thu Dec 6 00:17:25 2012 (r243922)
@@ -71,8 +71,8 @@ __FBSDID("$FreeBSD$");
#define BPF_INTERNAL
#include <net/bpf.h>
#include <net/bpf_buffer.h>
-#ifdef BPF_JITTER
-#include <net/bpf_jitter.h>
+#ifdef BPFJIT
+#include <net/bpfjit.h>
#endif
#include <net/bpf_zerocopy.h>
#include <net/bpfdesc.h>
@@ -1724,8 +1724,8 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
struct bpf_program32 *fp32;
#endif
struct bpf_insn *fcode, *old;
-#ifdef BPF_JITTER
- bpf_jit_filter *jfunc, *ofunc;
+#ifdef BPFJIT
+ bpfjit_function_t jfunc, ofunc;
#endif
size_t size;
u_int flen;
@@ -1753,7 +1753,7 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
#endif
fcode = NULL;
-#ifdef BPF_JITTER
+#ifdef BPFJIT
jfunc = ofunc = NULL;
#endif
need_upgrade = 0;
@@ -1774,9 +1774,12 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
free(fcode, M_BPF);
return (EINVAL);
}
-#ifdef BPF_JITTER
+#ifdef BPFJIT
/* Filter is copied inside fcode and is perfectly valid. */
- jfunc = bpf_jitter(fcode, flen);
+ jfunc = bpfjit_generate_code(fcode, flen);
+
+ if (jfunc == NULL && bootverbose)
+ printf("bpf_setf: failed to compile filter\n");
#endif
}
@@ -1796,7 +1799,7 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
} else {
old = d->bd_rfilter;
d->bd_rfilter = fcode;
-#ifdef BPF_JITTER
+#ifdef BPFJIT
ofunc = d->bd_bfilter;
d->bd_bfilter = jfunc;
#endif
@@ -1820,9 +1823,9 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
BPFIF_WUNLOCK(d->bd_bif);
if (old != NULL)
free(old, M_BPF);
-#ifdef BPF_JITTER
+#ifdef BPFJIT
if (ofunc != NULL)
- bpf_destroy_jit_filter(ofunc);
+ bpfjit_free_code(ofunc);
#endif
/* Move d to active readers list. */
@@ -2031,8 +2034,8 @@ bpf_tap(struct bpf_if *bp, u_char *pkt,
{
struct bintime bt;
struct bpf_d *d;
-#ifdef BPF_JITTER
- bpf_jit_filter *bf;
+#ifdef BPFJIT
+ bpfjit_function_t bf;
#endif
u_int slen;
int gottime;
@@ -2058,10 +2061,10 @@ bpf_tap(struct bpf_if *bp, u_char *pkt,
* is inbound or outbound. In the bpf_mtap() routines, we use
* the interface pointers on the mbuf to figure it out.
*/
-#ifdef BPF_JITTER
- bf = bpf_jitter_enable != 0 ? d->bd_bfilter : NULL;
+#ifdef BPFJIT
+ bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
if (bf != NULL)
- slen = (*(bf->func))(pkt, pktlen, pktlen);
+ slen = bf(pkt, pktlen, pktlen);
else
#endif
slen = bpf_filter(d->bd_rfilter, pkt, pktlen, pktlen);
@@ -2098,8 +2101,8 @@ bpf_mtap(struct bpf_if *bp, struct mbuf
{
struct bintime bt;
struct bpf_d *d;
-#ifdef BPF_JITTER
- bpf_jit_filter *bf;
+#ifdef BPFJIT
+ bpfjit_function_t bf;
#endif
u_int pktlen, slen;
int gottime;
@@ -2119,11 +2122,10 @@ bpf_mtap(struct bpf_if *bp, struct mbuf
if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif, bp->bif_ifp))
continue;
++d->bd_rcount;
-#ifdef BPF_JITTER
- bf = bpf_jitter_enable != 0 ? d->bd_bfilter : NULL;
- /* XXX We cannot handle multiple mbufs. */
- if (bf != NULL && m->m_next == NULL)
- slen = (*(bf->func))(mtod(m, u_char *), pktlen, pktlen);
+#ifdef BPFJIT
+ bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
+ if (bf != NULL)
+ slen = bf((u_char *)m, pktlen, 0);
else
#endif
slen = bpf_filter(d->bd_rfilter, (u_char *)m, pktlen, 0);
@@ -2154,6 +2156,9 @@ bpf_mtap2(struct bpf_if *bp, void *data,
struct bintime bt;
struct mbuf mb;
struct bpf_d *d;
+#ifdef BPFJIT
+ bpfjit_function_t bf;
+#endif
u_int pktlen, slen;
int gottime;
@@ -2182,6 +2187,12 @@ bpf_mtap2(struct bpf_if *bp, void *data,
if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif, bp->bif_ifp))
continue;
++d->bd_rcount;
+#ifdef BPFJIT
+ bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
+ if (bf != NULL)
+ slen = bf((u_char *)&mb, pktlen, 0);
+ else
+#endif
slen = bpf_filter(d->bd_rfilter, (u_char *)&mb, pktlen, 0);
if (slen != 0) {
BPFD_LOCK(d);
@@ -2429,9 +2440,9 @@ bpf_freed(struct bpf_d *d)
bpf_free(d);
if (d->bd_rfilter != NULL) {
free((caddr_t)d->bd_rfilter, M_BPF);
-#ifdef BPF_JITTER
+#ifdef BPFJIT
if (d->bd_bfilter != NULL)
- bpf_destroy_jit_filter(d->bd_bfilter);
+ bpfjit_free_code(d->bd_bfilter);
#endif
}
if (d->bd_wfilter != NULL)
Modified: projects/bpfjit/sys/netgraph/ng_bpf.c
==============================================================================
--- projects/bpfjit/sys/netgraph/ng_bpf.c Thu Dec 6 00:13:57 2012 (r243921)
+++ projects/bpfjit/sys/netgraph/ng_bpf.c Thu Dec 6 00:17:25 2012 (r243922)
@@ -64,8 +64,8 @@
#include <sys/mbuf.h>
#include <net/bpf.h>
-#ifdef BPF_JITTER
-#include <net/bpf_jitter.h>
+#ifdef BPFJIT
+#include <net/bpfjit.h>
#endif
#include <netgraph/ng_message.h>
@@ -89,8 +89,8 @@ struct ng_bpf_hookinfo {
hook_p match;
hook_p nomatch;
struct ng_bpf_hookprog *prog;
-#ifdef BPF_JITTER
- bpf_jit_filter *jit_prog;
+#ifdef BPFJIT
+ bpfjit_function_t jit_prog;
#endif
struct ng_bpf_hookstat stats;
};
@@ -437,8 +437,8 @@ ng_bpf_rcvdata(hook_p hook, item_p item)
goto ready;
}
-#ifdef BPF_JITTER
- if (bpf_jitter_enable != 0 && hip->jit_prog != NULL)
+#ifdef BPFJIT
+ if (bpfjit_disable == 0 && hip->jit_prog != NULL)
usejit = 1;
#endif
@@ -465,9 +465,9 @@ ng_bpf_rcvdata(hook_p hook, item_p item)
}
/* Run packet through filter */
-#ifdef BPF_JITTER
+#ifdef BPFJIT
if (usejit)
- len = (*(hip->jit_prog->func))(data, totlen, totlen);
+ len = (hip->jit_prog)(data, totlen, totlen);
else
#endif
if (data)
@@ -533,9 +533,9 @@ ng_bpf_disconnect(hook_p hook)
NG_NODE_FOREACH_HOOK(node, ng_bpf_remrefs, hook, tmp);
free(hip->prog, M_NETGRAPH_BPF);
-#ifdef BPF_JITTER
+#ifdef BPFJIT
if (hip->jit_prog != NULL)
- bpf_destroy_jit_filter(hip->jit_prog);
+ bpfjit_free_code(hip->jit_prog);
#endif
free(hip, M_NETGRAPH_BPF);
if ((NG_NODE_NUMHOOKS(node) == 0) &&
@@ -557,8 +557,8 @@ ng_bpf_setprog(hook_p hook, const struct
{
const hinfo_p hip = NG_HOOK_PRIVATE(hook);
struct ng_bpf_hookprog *hp;
-#ifdef BPF_JITTER
- bpf_jit_filter *jit_prog;
+#ifdef BPFJIT
+ bpfjit_function_t jit_prog;
#endif
int size;
@@ -573,17 +573,17 @@ ng_bpf_setprog(hook_p hook, const struct
if (hp == NULL)
return (ENOMEM);
bcopy(hp0, hp, size);
-#ifdef BPF_JITTER
- jit_prog = bpf_jitter(hp->bpf_prog, hp->bpf_prog_len);
+#ifdef BPFJIT
+ jit_prog = bpfjit_generate_code(hp->bpf_prog, hp->bpf_prog_len);
#endif
/* Free previous program, if any, and assign new one */
if (hip->prog != NULL)
free(hip->prog, M_NETGRAPH_BPF);
hip->prog = hp;
-#ifdef BPF_JITTER
+#ifdef BPFJIT
if (hip->jit_prog != NULL)
- bpf_destroy_jit_filter(hip->jit_prog);
+ bpfjit_free_code(hip->jit_prog);
hip->jit_prog = jit_prog;
#endif
More information about the svn-src-projects
mailing list