VKernel progress update - 10 Jan 2006
Sepherosa Ziehau
sepherosa at gmail.com
Sun Jan 14 00:06:36 PST 2007
On 1/12/07, Matthew Dillon <dillon at apollo.backplane.com> wrote:
I would suggest that VKE's be numbered from zero, because then we could
have the vkernel automatically allocate a free TAP interface and not
create confusion with rc.conf in the virtual environment.
Also, the vkernel can ifconfig up the TAP side of the interface as well
or do the basic bridge tie-in. That way the sysop wouldn't have to
worry about which tap interface was allocated.
Bridging is easy mode but not paricularly efficient because broadcasts
would wind up being spammed to all the running vkernels (not fun!).
routing a LAN IP might be a better solution. I can see a need for both
solutions.
So, e.g. leave the -I option intact but add some features and optional
real-kernel-side IP configuration. like this:
-I auto:10.0.0.1:10.0.0.2
-I auto:10.0.0.1:10.0.0.2:24
-I auto:bridge0
-I tap0:bridge0
auto - automatically find a free TAP interface and use it
10.0.0.1 - specify TAP interface IP
10.0.0.2 - specify VKE interface IP
24 - specify CIDR bits for TAP/BKE (e.g. would be 10.0.0.0/24)
if not specified a /30 would be used.
bridgeN - instead of specifying IPs, just tie the TAP interface
into the specified bridge.
(we have to make sure that disconnecting the TAP also
disconnects it from the bridge)
I think following patch does these:
http://leaf.dragonflybsd.org/~sephe/vke_multi_syntax.diff
NOTE:
1) bridge will not be brought up automaticly
2) non-existent bridge will not be created
Except above syntax, I have extended it a little bit:
-I tap0:x.x.x.x:y
will only set real kernel tap0's address and netmask
-I tap0:x.x.x.x
will only set real kernel tap0's address
-I tap0:bridge0:x.x.x.x
will tie tap0 to bridge0 in real kernel, and x.x.x.x will be vkeX's address
-I tap0:bridge0:x.x.x.x:y
will tie tap0 to bridge0 in real kernel, and x.x.x.x will be vkeX's
address and y will be vke0's netmask
If you have assigned vkeX's address/netmask on vkernel command line,
then in vkernel you only need 'ifconfig vkeX up', vkeX will have the
address/netmask supplied on command line.
Two sysctls are added for vkeX:
hw.vkeX.intr_rate (rw), #intr/second, default is 20, valid range is [1, hz]
hw.vkeX.tap_unit (ro), backend tap(4) interface unit in real kernel
And now 'ifconfig vkeX' will print backend tap(4) interface in real kernel
Make sure you have pulled in two tap(4) bug fixing in HAED, before
trying this patch.
Please test/review it. Hope I can drive it into repo before 1.8 branching.
Best Regards,
sephe
--
Live Free or Die
More information about the Kernel
mailing list