simulating wireless device (if_alloc panic, VirtualBox, VIMAGE)

Bjoern A. Zeeb bzeeb-lists at lists.zabbadoz.net
Thu Feb 3 11:00:07 UTC 2011


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.


>>> 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

-- 
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


More information about the freebsd-virtualization mailing list