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