Index: bpfdesc.h =================================================================== RCS file: /cvs/src/sys/net/bpfdesc.h,v diff -u -p -r1.49 bpfdesc.h --- bpfdesc.h 15 Aug 2024 12:20:20 -0000 1.49 +++ bpfdesc.h 19 Nov 2024 12:07:56 -0000 @@ -114,7 +114,7 @@ struct bpf_d { * Descriptor associated with each attached hardware interface. */ struct bpf_if { - struct bpf_if *bif_next; /* list of all interfaces */ + TAILQ_ENTRY(bpf_if) bif_next; /* list of all interfaces */ SMR_SLIST_HEAD(, bpf_d) bif_dlist; /* descriptor list */ struct bpf_if **bif_driverp; /* pointer into softc */ u_int bif_dlt; /* link layer type */ Index: bpf.c =================================================================== RCS file: /cvs/src/sys/net/bpf.c,v diff -u -p -r1.226 bpf.c --- bpf.c 17 Nov 2024 12:21:48 -0000 1.226 +++ bpf.c 19 Nov 2024 12:07:56 -0000 @@ -98,8 +98,8 @@ int bpf_maxbufsize = BPF_MAXBUFSIZE; /* * bpf_iflist is the list of interfaces; each corresponds to an ifnet * bpf_d_list is the list of descriptors */ -struct bpf_if *bpf_iflist; -LIST_HEAD(, bpf_d) bpf_d_list; +TAILQ_HEAD(, bpf_if) bpf_iflist = TAILQ_HEAD_INITIALIZER(bpf_iflist); +LIST_HEAD(, bpf_d) bpf_d_list = LIST_HEAD_INITIALIZER(bpf_d_list); int bpf_allocbufs(struct bpf_d *); void bpf_ifname(struct bpf_if*, struct ifreq *); @@ -369,7 +369,6 @@ bpf_detachd(struct bpf_d *d) void bpfilterattach(int n) { - LIST_INIT(&bpf_d_list); } /* @@ -1187,7 +1186,7 @@ bpf_setif(struct bpf_d *d, struct ifreq /* * Look through attached interfaces for the named one. */ - for (bp = bpf_iflist; bp != NULL; bp = bp->bif_next) { + TAILQ_FOREACH(bp, &bpf_iflist, bif_next) { if (strcmp(bp->bif_name, ifr->ifr_name) != 0) continue; @@ -1742,8 +1741,7 @@ bpfsattach(caddr_t *bpfp, const char *na bp->bif_ifp = NULL; bp->bif_dlt = dlt; - bp->bif_next = bpf_iflist; - bpf_iflist = bp; + TAILQ_INSERT_TAIL(&bpf_iflist, bp, bif_next); *bp->bif_driverp = NULL; @@ -1775,8 +1782,7 @@ bpfdetach(struct ifnet *ifp) KERNEL_ASSERT_LOCKED(); - for (bp = bpf_iflist; bp; bp = nbp) { - nbp = bp->bif_next; + TAILQ_FOREACH_SAFE(bp, &bpf_iflist, bif_next, nbp) { if (bp->bif_ifp == ifp) bpfsdetach(bp); } @@ -1786,7 +1792,7 @@ bpfdetach(struct ifnet *ifp) void bpfsdetach(void *p) { - struct bpf_if *bp = p, *tbp; + struct bpf_if *bp = p; struct bpf_d *bd; int maj; @@ -1804,15 +1810,7 @@ bpfsdetach(void *p) bpf_put(bd); } - for (tbp = bpf_iflist; tbp; tbp = tbp->bif_next) { - if (tbp->bif_next == bp) { - tbp->bif_next = bp->bif_next; - break; - } - } - - if (bpf_iflist == bp) - bpf_iflist = bp->bif_next; + TAILQ_REMOVE(&bpf_iflist, bp, bif_next); free(bp, M_DEVBUF, sizeof(*bp)); } @@ -1865,7 +1863,7 @@ bpf_getdltlist(struct bpf_d *d, struct b name = d->bd_bif->bif_name; n = 0; error = 0; - for (bp = bpf_iflist; bp != NULL; bp = bp->bif_next) { + TAILQ_FOREACH (bp, &bpf_iflist, bif_next) { if (strcmp(name, bp->bif_name) != 0) continue; if (bfl->bfl_list != NULL) { @@ -1896,7 +1894,7 @@ bpf_setdlt(struct bpf_d *d, u_int dlt) if (d->bd_bif->bif_dlt == dlt) return (0); name = d->bd_bif->bif_name; - for (bp = bpf_iflist; bp != NULL; bp = bp->bif_next) { + TAILQ_FOREACH (bp, &bpf_iflist, bif_next) { if (strcmp(name, bp->bif_name) != 0) continue; if (bp->bif_dlt == dlt)