( http://blog.csdn.net/quqi99 )
sudo apt-get install qemu-system qemu-kvm virtinst libvirt-bin openvswitch-datapath-source openvswitch-controller openvswitch-switch virt-top virt-manager Python-libvirt
sudo ovs-vsctl add-br br-mano
sudo ovs-vsctl add-port br-mano eth2
sudo virsh net-destroy default
sudo virsh net-define /tmp/br-mano.xml
<network>
<name>br-mano</name>
<forward mode='bridge'/>
<bridge name='br-mano'/>
<virtualport type='openvswitch'/>
</network>
#sudo virsh net-undefine default
sudo virsh net-start br-mano
sudo virsh net-autostart br-mano
sudo modprobe 8021q
sudo ip link add link eth1 name eth1.2 type vlan id 2
#sudo vconfig add eth1 2
#sudo ifconfig eth1.2 down
#sudo vconfig rem eth1.2
sudo ip link set eth1.2 up
sudo brctl addbr br2
sudo brctl setfd br2 0
sudo brctl stp br2 on
sudo ip link set br2 up
sudo brctl addif br2 eth1.2
sudo ifconfig br2 192.168.9.122/24
sudo ip tuntap add gw2 mode tap
sudo ip link set gw2 up
sudo brctl addif br2 gw2
hua@node1:~$ ip -d link show eth1.2
22: eth1.2@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br2 state UP mode DEFAULT group default qlen 1000
link/ether 2c:53:4a:02:20:3c brd ff:ff:ff:ff:ff:ff promiscuity 1
vlan protocol 802.1Q id 2 <REORDER_HDR>
sudo ovs-vsctl add-br br-veth0
sudo ovs-vsctl add-port br-veth0 eth1
sudo ip link add veth0 type veth peer name veth1
sudo ovs-vsctl add-port br-veth0 veth0
sudo ovs-vsctl add-port br-mano veth1
sudo ip link set veth0 up
sudo ip link set veth1 up
#sudo ovs-vsctl add-port br-veth0 veth0 -- set Interface veth0 type=patch options:peer=veth1
#sudo ovs-vsctl add-port br-mano veth1 -- set Interface veth1 type=patch options:peer=veth0
#sudo ovs-vsctl del-port br-mano veth1
#sudo ovs-vsctl del-port br-veth0 veth0
#Create ACCESS VLAN:
sudo ovs-vsctl set port vnet0 tag=2
#sudo ovs-vsctl remove port vnet0 tag 2
#Enable both ACCESS VLAN as well as TRUNK VLAN:
sudo ovs-vsctl set port vnet0 vlan_mode=trunk trunks=2 #access, native-tagged, native-untagged, trunk
#sudo ovs-vsctl set port eth2 vlan_mode=access trunks=[]
Inside VM: ping 10.0.3.1 -I eth0
sudo tcpdump -i eth1 -e -n 'arp or icmp' and src host 10.0.3.1
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
11:38:20.754894 52:54:00:f2:17:37 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 2, p 0, ethertype ARP, Request who-has 10.0.3.1 tell 10.0.3.2, length 28
OVS Bridge br-mano上的VM无论是采用在VM里打Tag还是在br-mano vnet0处打Tag后的vlan流量能到达eth1(vlan数据只在物理网卡上能使用tcpdump看到),但无法到达同一机器上linux bridge br2上的eth1.2,反之亦然