Index: if_vmx.c =================================================================== RCS file: /cvs/src/sys/dev/pci/if_vmx.c,v diff -u -p -r1.91 if_vmx.c --- if_vmx.c 24 Feb 2025 09:40:01 -0000 1.91 +++ if_vmx.c 4 Mar 2025 01:18:20 -0000 @@ -124,6 +124,7 @@ struct vmxnet3_txqueue { struct vmxnet3_comp_ring comp_ring; struct vmxnet3_txq_shared *ts; struct ifqueue *ifq; + caddr_t *bpfp; struct kstat *txkstat; unsigned int queue; } __aligned(64); @@ -144,6 +145,7 @@ struct vmxnet3_queue { char intrname[16]; void *ih; int intr; + caddr_t bpf; }; struct vmxnet3_softc { @@ -452,9 +454,24 @@ vmxnet3_attach(struct device *parent, st #endif for (i = 0; i < sc->sc_nqueues; i++) { - ifp->if_ifqs[i]->ifq_softc = &sc->sc_q[i].tx; - sc->sc_q[i].tx.ifq = ifp->if_ifqs[i]; - sc->sc_q[i].rx.ifiq = ifp->if_iqs[i]; + struct vmxnet3_queue *q = &sc->sc_q[i]; + struct ifiqueue *ifiq; + + ifp->if_ifqs[i]->ifq_softc = &q->tx; + q->tx.ifq = ifp->if_ifqs[i]; + + ifiq = ifp->if_iqs[i]; + q->rx.ifiq = ifiq; + +#if NBPFILTER > 0 + if (sc->sc_intrmap != NULL) { + bpfxattach(&q->bpf, q->intrname, + ifp, DLT_EN10MB, ETHER_HDR_LEN); + + ifiq->ifiq_bpfp = &q->bpf; + } + q->tx.bpfp = &q->bpf; +#endif #if NKSTAT > 0 vmx_kstat_txstats(sc, &sc->sc_q[i].tx, i); @@ -1623,6 +1640,9 @@ vmxnet3_start(struct ifqueue *ifq) unsigned int prod, free, i; unsigned int post = 0; uint32_t rgen, gen; +#if NBPFILTER > 0 + caddr_t if_bpf; +#endif struct mbuf *m; @@ -1680,8 +1700,13 @@ vmxnet3_start(struct ifqueue *ifq) } #if NBPFILTER > 0 - if (ifp->if_bpf) - bpf_mtap_ether(ifp->if_bpf, m, BPF_DIRECTION_OUT); + if_bpf = ifp->if_bpf; + if (if_bpf) + bpf_mtap_ether(if_bpf, m, BPF_DIRECTION_OUT); + + if_bpf = *tq->bpfp; + if (if_bpf) + bpf_mtap_ether(if_bpf, m, BPF_DIRECTION_OUT); #endif ring->m[prod] = m;