diff options
author | csjp <csjp@FreeBSD.org> | 2006-06-14 02:23:28 +0000 |
---|---|---|
committer | csjp <csjp@FreeBSD.org> | 2006-06-14 02:23:28 +0000 |
commit | c1cbf173b2b8ce75b3e4d0751756022bdf03714a (patch) | |
tree | 0e937f42c91cb08b5e5df6051c34c3f31da3c95c /sys | |
parent | b0a06b380fa5e865f5dd1d97175d2472eb8b9479 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/net/bpf.c | 5 | ||||
-rw-r--r-- | sys/net/bpf.h | 2 |
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); } |