Support VLan for virtual network based on 8021q kernel module other than ovs backend.
Insert vlan-device into the datapath of the network traffic:
(outside of host) <--> physical_interface <--> vlan-dev(with VLAN-Tag)
<--> bridge <--> guests
Then VLAN-Tag will be applied to the guest's network traffic.
The VLan network acts as real layer-2 switch which provides 'access' port to
guest.
1. Create VLan network by setting mode='vlan' on the forward element, for
example:
...
<network>
<name>vlan10</name>
<forward mode="vlan" dev="eth0"/>
<vlan>
<tag id="10"/>
</vlan>
</network>
...
The mode attribute of <forward> should be 'vlan' (this patch added).
The dev attribute of <forward> specifies a physical interface
which forwards traffice between this VLan-network and outside.
The id attribue of the vlan tag indicates VLAN-Tag. Both vlan element
and tag element should be unique in this xml.
A guest connects to this VLan network by setting its xml like this:
<interface type='network'>
<source network='vlan10'/>
</interface>
2. We can enable dhcp for VLan network according to the current way, for example:
...
<network>
...
<ip address="192.168.126.2" netmask="255.255.255.0">
<dhcp>
<range start="192.168.126.120" end="192.168.126.129"/>
</dhcp>
</ip>
</network>
...
3. This can help to build Cross-Host VLan network for guests. We can simplify
the work to implement vlan-net of management app (e.g. OpenStack).
1) Distribute the xml of VLan network to all hosts, then 'virsh net-create ...'
on each host locally.
2) Makesure the outside switch's port linked to the physical interface (specified by
the dev of <forward>) is 'trunk' mode.
3) For each VLan network, ONLY one host can 'net-create' network with ip and
dhcp element to avoid dhcp conflict.
Shi Lei (3):
add functions: load(verify) 8021q module, create/destroy vlan-dev
support new forward mode of vlan for virtual network
fix other functions to add VIR_NETWORK_FORWARD_VLAN
configure.ac | 5 +-
src/conf/domain_conf.c | 1 +
src/conf/network_conf.c | 12 ++-
src/conf/network_conf.h | 1 +
src/conf/virnetworkobj.c | 1 +
src/libvirt_private.syms | 4 +
src/network/bridge_driver.c | 80 ++++++++++++++++--
src/qemu/qemu_process.c | 1 +
src/util/virnetdev.c | 195 ++++++++++++++++++++++++++++++++++++++++++++
src/util/virnetdev.h | 14 ++++
10 files changed, 301 insertions(+), 13 deletions(-)
--
2.7.4