NOTE: this information has become obsolete as of FreeBSD 8.0.
VImage kernel options
.. and what they mean from the user or implementation perspective.
VIMAGE
This will be the only option once the entire work is in.
If option VIMAGE is turned on this will allow creation of multiple virtual instances. There will be indirection for each virtual instance like curvimage->vnet->mod_data[TYPE] though things might not be used that way but cached like thread->td_vnet. mod_data[TYPE] will hold the container structures struct vnet_inet, vnet_ipsec, ... for each TPYE like VNET_INET, VNET_IPSEC, ...
If nooption VIMAGE is set or there is no option VIMAGE there will be only one instance and no virtualization will be possible. There will be one global for each container struct. So a type of VNET_INET with the container struct struct vnet_inet will resolve to the global variable struct vnet_inet vnet_inet_0.
VIMAGE_GLOBALS
During the transition period while bringing the work and moving from globals to the container structs to the final product the intermediate option VIMAGE_GLOBALS will be used to distinguish between using the former globals or the container structs.
This option will be removed (along with the globals) as soon as everything was merged. It is basically there to allow benchmarking the same code with either the old globals or the new VImage logic.
option hierachie
If option VIMAGE is defined the final product will be used. If option VIMAGE is not defined the the single global container structs will be used unless option VIMAGE_GLOBALS is given. In that case we will fall back to the old globals.
VIMAGE |
VIMAGE_GLOBALS |
Result |
yes |
yes |
Not permitted. |
yes |
no |
Support multiple virtual instances. |
no |
yes |
Use the old globals. |
no |
no |
Use single global container struct instances. |