On Thu, 3 Feb 2011, Monthadar Al Jaberi wrote:

On Thu, Feb 3, 2011 at 11:59 AM, Bjoern A. Zeeb
<bzeeb-li...@lists.zabbadoz.net> wrote:
On Thu, 3 Feb 2011, Monthadar Al Jaberi wrote:

I don't understand why you saw a CRED_TO_VNET of 0
I was under the impression that every process/thread in the system
would
be
on vnet0
in a vimage kernel.

This is how my printf looks like:
struct thread *td = curthread;
struct vnet *v = TD_TO_VNET(td);
struct ucred *cred = CRED_TO_VNET(td->ucred);
struct vnet *td_vnet = td->td_vnet;

here's your problem:

strcut vnet *vnet = cred->cr_prison->pr_vnet;

When I add CURVNET_SET(CRED_TO_VNET(curthread->td_ucred)); I get a panic
too...
But your suggestion works if I do like this:
curthread->td_vnet = curthread->td_ucred->cr_prison->pr_vnet;

CRED_TO_VNET(curthread->td_ucred) returns NULL

I wonder how you are building your module and if VIMAGE is properly
defined.  If it's not that would explain a lot of things.

I have put options VIMAGE, rebuild both world and kernel.

I can create jails with vnet options...

I build my module with the standard Makefile for modules:
...
KMOD    =  wtap
...
SRCS    =  if_wtap_module.c if_wtap.c if_medium.c hal.c

.include <bsd.kmod.mk>

Right but are you building your module along with the kernel or
outside the tree?  In the latter case you may want to add soemthing
like

SRCS+=          opt_global.h

.if defined(KERNBUILDDIR)
MKDEP=          -include ${KERNBUILDDIR}/opt_global.h
.else
CFLAGS+=        -include opt_global.h
MKDEP=          -include opt_global.h

opt_global.h:
        echo "#define VIMAGE 1" > ${.TARGET}
.endif

and/or point KERNBUILDDIR to where you built your kernels.




printf("td=%p, td->td_vnet=%p, td->td_ucred=%p, TD_TO_VNET=%p,
CRED_TO_VNET=%p\n", td, td_vnet, td->td_ucred, v, cred);

I made a fast search in /usr/src for "td_vnet" and found it was
assigned only in
int fork1(td, flags, pages, procp):
#ifdef VIMAGE
       td2->td_vnet = NULL;
       td2->td_vnet_lpush = NULL;
#endif

Nice try.  Want another search?  Hint: there is this in vnet.h:

#define curvnet curthread->td_vnet

And then you'll, again, find the CURVNET_SET_* macros.

Thank you

Something you may find useful as well btw is:

http://people.freebsd.org/~bz/20100530-02.vnet.9.html

weired compiler complains about that there is no <sys/vnet.h>, I
include <net/vnet.h> maybe old documentation?

it's net/vnet.h.  Documentation bug from a local transisiton time to
the general framework.  Thanks for catching;)  net/vnet.h will
obviously stay.

--
Bjoern A. Zeeb                                 You have to have visions!
        <ks> Going to jail sucks -- <bz> All my daemons like it!
  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html
_______________________________________________
freebsd-virtualization@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"

Reply via email to