Date: Wed, 02 Feb 2011 09:30:54 -0800 From: Julian Elischer <julian@freebsd.org> To: "Bjoern A. Zeeb" <bz@freebsd.org> Cc: FreeBSD virtualization mailing list <freebsd-virtualization@freebsd.org> Subject: Re: simulating wireless device (if_alloc panic, VirtualBox, VIMAGE) Message-ID: <4D4994CE.2090209@freebsd.org> In-Reply-To: <20110202164827.I80258@maildrop.int.zabbadoz.net> References: <AANLkTik8D_bLwcUKZdBT-kpkJdDXtPTLvAqfUe0cLoSz@mail.gmail.com> <4D484213.6050100@freebsd.org> <AANLkTikJKZLQVA5X2PQs0oT4iFsZYBw7K07kjQTc9iGD@mail.gmail.com> <4D486108.5060805@freebsd.org> <AANLkTi=mk2vfyXJBaK5mV2sBWEj0-RDZneLs%2BXq_c7sb@mail.gmail.com> <20110202164827.I80258@maildrop.int.zabbadoz.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2/2/11 9:12 AM, Bjoern A. Zeeb wrote: > On Wed, 2 Feb 2011, Monthadar Al Jaberi wrote: > > Hi, > >> Thanx makes more sense, but I have noticed something weired if you can >> shade some light on. >> >> I added printfs one when the module is first loaded (static int >> event_handler(module_t module, int event, void *arg)): >> curthread=0xc3f95870 >> curthread->td_vnet=0xc3170e00 >> curthread->td_ucred=0xc3185d00 >> TD_TO_VNET=0 >> CRED_TO_VNET=0 > > Try to load it from laoder on boot; I think that should work as we are > setting the curvent for the kernel startup. > > The problem you are seeing is a bug in the current implementation that > you cannot add any physical network interface after the kernel started. > This applies to cardbus/usb/... as well as any kind of ethernet > interface, so a kldload igb should yield it as well. > > The fix for that is easy and hard at the same time: > A) either touch all drivers > B) or touch all cloned interfaces and change 3 common lines. > or try to make cloners aware of vimages. > > Solution B) is sitting in perforce with the entire stuff that it > depends > on and was started with CH=179022,179255 but not limited to that if you > want to have a peek. > > What you certainly can do locally to your driver for now is to make a > change like this: > > +#ifdef VIMAGE > + CURVNET_SET(vnet0); > +#endif > ifp = if_alloc(IFT_ETHER); > +#ifdef VIMAGE > + CURVNET_RESTORE(); > +#endif > you don't really need the #ifdef except for readability as CURVNET_XXX ar enot defined for !vnet > It's the type A) kind of change from above that will break eventually > in the future. > > /bz >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D4994CE.2090209>