summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorcsjp <csjp@FreeBSD.org>2006-06-14 02:23:28 +0000
committercsjp <csjp@FreeBSD.org>2006-06-14 02:23:28 +0000
commitc1cbf173b2b8ce75b3e4d0751756022bdf03714a (patch)
tree0e937f42c91cb08b5e5df6051c34c3f31da3c95c /sys/net
parentb0a06b380fa5e865f5dd1d97175d2472eb8b9479 (diff)
downloadFreeBSD-src-c1cbf173b2b8ce75b3e4d0751756022bdf03714a.zip
FreeBSD-src-c1cbf173b2b8ce75b3e4d0751756022bdf03714a.tar.gz
If bpf(4) has not been compiled into the kernel, initialize the bpf interface
pointer to a zeroed, statically allocated bpf_if structure. This way the LIST_EMPTY() macro will always return true. This allows us to remove the additional unconditional memory reference for each packet in the fast path. Discussed with: sam
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/bpf.c5
-rw-r--r--sys/net/bpf.h2
2 files changed, 6 insertions, 1 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index 00a95c8..532dc96 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -1790,6 +1790,7 @@ SYSINIT(bpfdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE,bpf_drvinit,NULL)
* A 'better' implementation would allow the core bpf functionality
* to be loaded at runtime.
*/
+static struct bpf_if bp_null;
void
bpf_tap(bp, pkt, pktlen)
@@ -1820,6 +1821,8 @@ bpfattach(ifp, dlt, hdrlen)
struct ifnet *ifp;
u_int dlt, hdrlen;
{
+
+ bpfattach2(ifp, dlt, hdrlen, &ifp->if_bpf);
}
void
@@ -1828,6 +1831,8 @@ bpfattach2(ifp, dlt, hdrlen, driverp)
u_int dlt, hdrlen;
struct bpf_if **driverp;
{
+
+ *driverp = &bp_null;
}
void
diff --git a/sys/net/bpf.h b/sys/net/bpf.h
index 0782a66..487784a 100644
--- a/sys/net/bpf.h
+++ b/sys/net/bpf.h
@@ -630,7 +630,7 @@ static __inline int
bpf_peers_present(struct bpf_if *bpf)
{
- if (bpf && !LIST_EMPTY(&bpf->bif_dlist))
+ if (!LIST_EMPTY(&bpf->bif_dlist))
return (1);
return (0);
}
OpenPOWER on IntegriCloud