On Mon, Sep 30, 2019 at 08:54:14AM +0200, Claudio Jeker wrote:
> On Mon, Sep 30, 2019 at 12:06:34PM +1000, David Gwynne wrote:
> > the "public" bpf api no longer supports custom copy functions, so we can
> > remove the plumbing for it internally in the bpf code.
> > 
> > ok?
> > 
> > Index: bpf.c
> > ===================================================================
> > RCS file: /cvs/src/sys/net/bpf.c,v
> > retrieving revision 1.180
> > diff -u -p -r1.180 bpf.c
> > --- bpf.c   30 Sep 2019 01:53:05 -0000      1.180
> > +++ bpf.c   30 Sep 2019 02:04:37 -0000
> > @@ -94,8 +94,6 @@ LIST_HEAD(, bpf_d) bpf_d_list;
> >  
> >  int        bpf_allocbufs(struct bpf_d *);
> >  void       bpf_ifname(struct bpf_if*, struct ifreq *);
> > -int        _bpf_mtap(caddr_t, const struct mbuf *, u_int,
> > -       void (*)(const void *, void *, size_t));
> >  void       bpf_mcopy(const void *, void *, size_t);
> >  int        bpf_movein(struct uio *, struct bpf_d *, struct mbuf **,
> >         struct sockaddr *);
> > @@ -105,7 +103,7 @@ int     bpfkqfilter(dev_t, struct knote *);
> >  void       bpf_wakeup(struct bpf_d *);
> >  void       bpf_wakeup_cb(void *);
> >  void       bpf_catchpacket(struct bpf_d *, u_char *, size_t, size_t,
> > -       void (*)(const void *, void *, size_t), struct timeval *);
> > +       struct timeval *);
> >  int        bpf_getdltlist(struct bpf_d *, struct bpf_dltlist *);
> >  int        bpf_setdlt(struct bpf_d *, u_int);
> >  
> > @@ -1241,12 +1239,8 @@ bpf_mcopy(const void *src_arg, void *dst
> >     }
> >  }
> >  
> > -/*
> > - * like bpf_mtap, but copy fn can be given. used by various bpf_mtap*
> > - */
> >  int
> > -_bpf_mtap(caddr_t arg, const struct mbuf *m, u_int direction,
> > -    void (*cpfn)(const void *, void *, size_t))
> > +bpf_mtap(caddr_t arg, const struct mbuf *m, u_int direction)
> >  {
> >     struct bpf_if *bp = (struct bpf_if *)arg;
> >     struct bpf_d *d;
> > @@ -1259,9 +1253,6 @@ _bpf_mtap(caddr_t arg, const struct mbuf
> >     if (m == NULL)
> >             return (0);
> >  
> > -   if (cpfn == NULL)
> > -           cpfn = bpf_mcopy;
> > -
> >     if (bp == NULL)
> >             return (0);
> >  
> > @@ -1299,8 +1290,7 @@ _bpf_mtap(caddr_t arg, const struct mbuf
> >                     }
> >  
> >                     mtx_enter(&d->bd_mtx);
> > -                   bpf_catchpacket(d, (u_char *)m, pktlen, slen, cpfn,
> > -                       &tv);
> > +                   bpf_catchpacket(d, (u_char *)m, pktlen, slen, &tv);
> >                     mtx_leave(&d->bd_mtx);
> >             }
> >     }
> > @@ -1345,16 +1335,7 @@ bpf_tap_hdr(caddr_t arg, const void *hdr
> >             *mp = (struct mbuf *)&md;
> >     }
> >  
> > -   return _bpf_mtap(arg, m0, direction, bpf_mcopy);
> > -}
> > -
> > -/*
> > - * Incoming linkage from device drivers, when packet is in an mbuf chain.
> > - */
> > -int
> > -bpf_mtap(caddr_t arg, const struct mbuf *m, u_int direction)
> > -{
> > -   return _bpf_mtap(arg, m, direction, NULL);
> > +   return bpf_mtap(arg, m0, direction);
> >  }
> >  
> >  /*
> > @@ -1382,7 +1363,7 @@ bpf_mtap_hdr(caddr_t arg, const void *da
> >     } else 
> >             m0 = m;
> >  
> > -   return _bpf_mtap(arg, m0, direction, NULL);
> > +   return bpf_mtap(arg, m0, direction);
> >  }
> >  
> >  /*
> > @@ -1460,7 +1441,7 @@ bpf_mtap_ether(caddr_t arg, const struct
> >   */
> >  void
> >  bpf_catchpacket(struct bpf_d *d, u_char *pkt, size_t pktlen, size_t 
> > snaplen,
> > -    void (*cpfn)(const void *, void *, size_t), struct timeval *tv)
> > +    struct timeval *tv)
> >  {
> >     struct bpf_hdr *hp;
> >     int totlen, curlen;
> > @@ -1513,10 +1494,12 @@ bpf_catchpacket(struct bpf_d *d, u_char 
> >     hp->bh_tstamp.tv_usec = tv->tv_usec;
> >     hp->bh_datalen = pktlen;
> >     hp->bh_hdrlen = hdrlen;
> > +
> >     /*
> >      * Copy the packet data into the store buffer and update its length.
> >      */
> > -   (*cpfn)(pkt, (u_char *)hp + hdrlen, (hp->bh_caplen = totlen - hdrlen));
> > +   bpf_mcopy(pkt, (u_char *)hp + hdrlen,
> > +       (hp->bh_caplen = totlen - hdrlen));
> 
> This new line is not really needed but also yuck on assigning the size in
> a function call argument. Maybe do the hp->bh_caplen = totlen - hdrlen before
> the call and pass hp->bh_caplen to bpf_mcopy().

ikr. i'll take it as a free second commit after this one.

> 
> >     d->bd_slen = curlen + totlen;
> >  
> >     if (d->bd_immediate) {
> > 
> 
> OK claudio@

cheers :)

> 
> -- 
> :wq Claudio

Reply via email to