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>