PERFORCE change 128041 for review
Marko Zec
zec at icir.org
Sun Oct 28 10:59:08 PDT 2007
On Thursday 25 October 2007 07:25:58 Julian Elischer wrote:
> Marko Zec wrote:
> > http://perforce.freebsd.org/chv.cgi?CH=128041
> >
> > Change 128041 by zec at zec_tpx32 on 2007/10/25 00:15:01
> >
> > A hack to allow for bpf taps to be open directly on ifnets
> > attached to foreign vnets.
> >
> > ifname at vimage_name is the form that should be used for
> > tcpdump or ethereal to attach directly to an ifnet in
> > a foerign vnet.
>
> by definition it would have to be a child vnet right?
Yes. vimage_by_name(struct thread *toplevel, char *name) searches for a vimage bellow the position in the hierarchy pointed by toplevel, so it can never return a ptr to a vimage above the toplevel position, i.e. it can find only children of *toplevel.
> > Affected files ...
> >
> > .. //depot/projects/vimage/src/sys/net/bpf.c#15 edit
> >
> > Differences ...
> >
> > ==== //depot/projects/vimage/src/sys/net/bpf.c#15 (text+ko) ====
> >
> > @@ -1156,9 +1156,32 @@
> > struct bpf_if *bp;
> > struct ifnet *theywant;
> >
> > +#define IMUNES_BPF_HACK
> > +#if defined(VIMAGE) && defined(IMUNES_BPF_HACK)
> > + struct vnet *target_vnet = curvnet;
> > + char *c;
> > +
> > + /* Hack to support tapping in foreign vnets */
> > + c = rindex(ifr->ifr_name, '@');
> > + if ( c != NULL ) {
> > + struct vimage *target_vimage;
> > +
> > + *c++ = 0;
> > + target_vimage = vimage_by_name(TD_TO_VIMAGE(curthread), c);
> > + if (target_vimage == NULL)
> > + return ENXIO;
> > + target_vnet = target_vimage->v_net;
> > + }
> > + CURVNET_SET_QUIET(target_vnet);
> > +#endif
> > +
> > theywant = ifunit(ifr->ifr_name);
> > - if (theywant == NULL || theywant->if_bpf == NULL)
> > + if (theywant == NULL || theywant->if_bpf == NULL) {
> > +#if defined(VIMAGE) && defined(IMUNES_BPF_HACK)
> > + CURVNET_RESTORE();
> > +#endif
> > return (ENXIO);
> > + }
> >
> > bp = theywant->if_bpf;
> > /*
> > @@ -1180,6 +1203,9 @@
> > BPFD_LOCK(d);
> > reset_d(d);
> > BPFD_UNLOCK(d);
> > +#if defined(VIMAGE) && defined(IMUNES_BPF_HACK)
> > + CURVNET_RESTORE();
> > +#endif
> > return (0);
> > }
More information about the p4-projects
mailing list