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;
 

Reply via email to