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
This commit is contained in:
Christian S.J. Peron 2006-06-14 02:23:28 +00:00
parent 415e46824c
commit 7eae78a419
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=159595
2 changed files with 6 additions and 1 deletions

View File

@ -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

View File

@ -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);
}