Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Dec 2012 00:17:25 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r243922 - in projects/bpfjit/sys: net netgraph
Message-ID:  <201212060017.qB60HPtZ017032@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212060017.qB60HPtZ017032>