On Tue, Mar 29, 2016 at 08:58:35PM +1000, David Gwynne wrote:
> i think bpf_tap is broken, so id like to get rid of it.
> 
> the only thing(s) using it is ie, but they dont require bpf_tap.
> 
> the typical idiom with doing bpf on outgoing packets is to pass the
> mbuf in between dequeueing the packet from the send queue, and
> before it's given to the hardware.
> 
> this diff moves the bpf from reading a buffer out of a ring up into
> the start routine as just described.
> 
> ie on isa busses was already doing that, but also doing it again
> out of the ring. this simply removes the extra one. this means you
> wont get to see the packet twice, but once is enough for everyone
> else.
> 
> ok?

OK. Diff reads OK. Don't get hold up because of ie(4).
 
> Index: arch/sparc/dev/if_ie.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/sparc/dev/if_ie.c,v
> retrieving revision 1.62
> diff -u -p -r1.62 if_ie.c
> --- arch/sparc/dev/if_ie.c    16 Mar 2016 15:41:10 -0000      1.62
> +++ arch/sparc/dev/if_ie.c    29 Mar 2016 10:54:38 -0000
> @@ -998,19 +998,6 @@ static __inline void
>  iexmit(sc)
>       struct ie_softc *sc;
>  {
> -
> -#if NBPFILTER > 0
> -     /*
> -      * If BPF is listening on this interface, let it see the packet before
> -      * we push it on the wire.
> -      */
> -     if (sc->sc_arpcom.ac_if.if_bpf)
> -             bpf_tap(sc->sc_arpcom.ac_if.if_bpf,
> -                 sc->xmit_cbuffs[sc->xctail],
> -                 SWAP(sc->xmit_buffs[sc->xctail]->ie_xmit_flags),
> -                 BPF_DIRECTION_OUT);
> -#endif
> -
>       sc->xmit_buffs[sc->xctail]->ie_xmit_flags |= IE_XMIT_LAST;
>       sc->xmit_buffs[sc->xctail]->ie_xmit_next = SWAP(0xffff);
>       ST_24(sc->xmit_buffs[sc->xctail]->ie_xmit_buf,
> @@ -1314,6 +1301,11 @@ iestart(ifp)
>               IFQ_DEQUEUE(&sc->sc_arpcom.ac_if.if_snd, m);
>               if (!m)
>                       break;
> +
> +#if NBPFILTER > 0
> +             if (ifp->if_bpf)
> +                     bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_OUT);
> +#endif
>  
>               len = 0;
>               buffer = sc->xmit_cbuffs[sc->xchead];
> Index: dev/isa/if_ie.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/isa/if_ie.c,v
> retrieving revision 1.50
> diff -u -p -r1.50 if_ie.c
> --- dev/isa/if_ie.c   14 Mar 2016 23:08:06 -0000      1.50
> +++ dev/isa/if_ie.c   29 Mar 2016 10:54:38 -0000
> @@ -1120,18 +1120,6 @@ iexmit(sc)
>                   sc->xctail);
>  #endif
>  
> -#if NBPFILTER > 0
> -     /*
> -      * If BPF is listening on this interface, let it see the packet before
> -      * we push it on the wire.
> -      */
> -     if (sc->sc_arpcom.ac_if.if_bpf)
> -             bpf_tap(sc->sc_arpcom.ac_if.if_bpf,
> -                 sc->xmit_cbuffs[sc->xctail],
> -                 sc->xmit_buffs[sc->xctail]->ie_xmit_flags,
> -                 BPF_DIRECTION_OUT);
> -#endif
> -
>       sc->xmit_buffs[sc->xctail]->ie_xmit_flags |= IE_XMIT_LAST;
>       sc->xmit_buffs[sc->xctail]->ie_xmit_next = 0xffff;
>       sc->xmit_buffs[sc->xctail]->ie_xmit_buf =
> 

-- 
:wq Claudio

Reply via email to