Module Name: src Committed By: ozaki-r Date: Wed Jan 25 01:04:23 UTC 2017
Modified Files: src/sys/net: bpf.c bpf.h bpf_stub.c Log Message: Use bpf_ops for bpf_mtap_softint By doing so we don't need to care whether a kernel enables bpfilter or not. To generate a diff of this commit: cvs rdiff -u -r1.205 -r1.206 src/sys/net/bpf.c cvs rdiff -u -r1.68 -r1.69 src/sys/net/bpf.h cvs rdiff -u -r1.6 -r1.7 src/sys/net/bpf_stub.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/bpf.c diff -u src/sys/net/bpf.c:1.205 src/sys/net/bpf.c:1.206 --- src/sys/net/bpf.c:1.205 Tue Jan 24 09:05:28 2017 +++ src/sys/net/bpf.c Wed Jan 25 01:04:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bpf.c,v 1.205 2017/01/24 09:05:28 ozaki-r Exp $ */ +/* $NetBSD: bpf.c,v 1.206 2017/01/25 01:04:23 ozaki-r Exp $ */ /* * Copyright (c) 1990, 1991, 1993 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bpf.c,v 1.205 2017/01/24 09:05:28 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bpf.c,v 1.206 2017/01/25 01:04:23 ozaki-r Exp $"); #if defined(_KERNEL_OPT) #include "opt_bpf.h" @@ -1666,15 +1666,16 @@ bpf_mtap_si(void *arg) } } -void -bpf_mtap_softint(struct ifnet *ifp, struct mbuf *m) +static void +_bpf_mtap_softint(struct ifnet *ifp, struct mbuf *m) { struct bpf_if *bp = ifp->if_bpf; struct mbuf *dup; KASSERT(cpu_intr_p()); - if (bp == NULL || bp->bif_dlist == NULL) + /* To avoid extra invocations of the softint */ + if (bp->bif_dlist == NULL) return; KASSERT(bp->bif_si != NULL); @@ -1893,8 +1894,8 @@ _bpfattach(struct ifnet *ifp, u_int dlt, #endif } -void -bpf_mtap_softint_init(struct ifnet *ifp) +static void +_bpf_mtap_softint_init(struct ifnet *ifp) { struct bpf_if *bp; @@ -2227,6 +2228,9 @@ struct bpf_ops bpf_ops_kernel = { .bpf_mtap_af = _bpf_mtap_af, .bpf_mtap_sl_in = _bpf_mtap_sl_in, .bpf_mtap_sl_out = _bpf_mtap_sl_out, + + .bpf_mtap_softint = _bpf_mtap_softint, + .bpf_mtap_softint_init = _bpf_mtap_softint_init, }; MODULE(MODULE_CLASS_DRIVER, bpf, "bpf_filter"); Index: src/sys/net/bpf.h diff -u src/sys/net/bpf.h:1.68 src/sys/net/bpf.h:1.69 --- src/sys/net/bpf.h:1.68 Tue Jan 24 09:05:28 2017 +++ src/sys/net/bpf.h Wed Jan 25 01:04:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bpf.h,v 1.68 2017/01/24 09:05:28 ozaki-r Exp $ */ +/* $NetBSD: bpf.h,v 1.69 2017/01/25 01:04:23 ozaki-r Exp $ */ /* * Copyright (c) 1990, 1991, 1993 @@ -423,6 +423,9 @@ struct bpf_ops { void (*bpf_mtap_af)(struct bpf_if *, uint32_t, struct mbuf *); void (*bpf_mtap_sl_in)(struct bpf_if *, u_char *, struct mbuf **); void (*bpf_mtap_sl_out)(struct bpf_if *, u_char *, struct mbuf *); + + void (*bpf_mtap_softint_init)(struct ifnet *); + void (*bpf_mtap_softint)(struct ifnet *, struct mbuf *); }; extern struct bpf_ops *bpf_ops; @@ -498,6 +501,20 @@ bpf_mtap_sl_out(struct ifnet *_ifp, u_ch bpf_ops->bpf_mtap_sl_out(_ifp->if_bpf, _hdr, _m); } +static inline void +bpf_mtap_softint_init(struct ifnet *_ifp) +{ + + bpf_ops->bpf_mtap_softint_init(_ifp); +} + +static inline void +bpf_mtap_softint(struct ifnet *_ifp, struct mbuf *_m) +{ + + if (_ifp->if_bpf) + bpf_ops->bpf_mtap_softint(_ifp, _m); +} void bpf_setops(void); @@ -517,9 +534,6 @@ int bpf_validate_ext(const bpf_ctx_t *, bpfjit_func_t bpf_jit_generate(bpf_ctx_t *, void *, size_t); void bpf_jit_freecode(bpfjit_func_t); -void bpf_mtap_softint_init(struct ifnet *); -void bpf_mtap_softint(struct ifnet *, struct mbuf *); - #endif int bpf_validate(const struct bpf_insn *, int); Index: src/sys/net/bpf_stub.c diff -u src/sys/net/bpf_stub.c:1.6 src/sys/net/bpf_stub.c:1.7 --- src/sys/net/bpf_stub.c:1.6 Mon Jan 30 23:31:27 2012 +++ src/sys/net/bpf_stub.c Wed Jan 25 01:04:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bpf_stub.c,v 1.6 2012/01/30 23:31:27 matt Exp $ */ +/* $NetBSD: bpf_stub.c,v 1.7 2017/01/25 01:04:23 ozaki-r Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bpf_stub.c,v 1.6 2012/01/30 23:31:27 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bpf_stub.c,v 1.7 2017/01/25 01:04:23 ozaki-r Exp $"); #include <sys/param.h> #include <sys/kmem.h> @@ -67,6 +67,9 @@ struct bpf_ops bpf_ops_stub = { .bpf_mtap_af = (void *)bpf_stub_warn, .bpf_mtap_sl_in = (void *)bpf_stub_warn, .bpf_mtap_sl_out = (void *)bpf_stub_warn, + + .bpf_mtap_softint_init = (void *)bpf_stub_null, + .bpf_mtap_softint = (void *)bpf_stub_warn, }; struct bpf_ops *bpf_ops;