Hey Sheng, Thanks for testing! I must admit I didn't test thoroughly with vlan as most of my networks are Nicira based.
I've done some research and I can fix it by using fake bridges (in openvswitch) when libvirt is too old. That requires some modifications to the plug routines, but nothing that can't be done. I've created two issues based on both our test results : CLOUDSTACK-2326 and CLOUDSTACK-2327. If you have more relevant input feel free to update the tickerts. I'll start working on them right away. Cheers, Hugo From: Sheng Yang [mailto:sh...@yasker.org] Sent: Friday, May 03, 2013 12:39 AM To: Hugo Trippaers Cc: <dev@cloudstack.apache.org> Subject: Re: OVS on KVM After upgrade to Ubuntu 13.04(libvirt 1.0.2), vlan tag works well. --Sheng On Thu, May 2, 2013 at 11:18 AM, Sheng Yang <sh...@yasker.org<mailto:sh...@yasker.org>> wrote: After searching I found this: http://libvirt.org/formatnetwork.html <quote> Setting VLAN tag (on supported network types only) ... <devices> <interface type='bridge'> <vlan trunk='yes'> <tag id='42'/> <tag id='47'/> </vlan> <source bridge='ovsbr0'/> <virtualport type='openvswitch'> <parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> </virtualport> </interface> <devices> ... If (and only if) the network type supports vlan tagging transparent to the guest, an optional <vlan> element can specify one or more vlan tags to apply to the traffic of all guests using this network **Since 0.10.0**. (openvswitch and type='hostdev' SR-IOV networks do support transparent vlan tagging of guest traffic; everything else, including standard linux bridges and libvirt's own virtual networks, do not support it. 802.1Qbh (vn-link) and 802.1Qbg (VEPA) switches provide their own way (outside of libvirt) to tag guest traffic onto specific vlans.) As expected, the tag attribute specifies which vlan tag to use. If a network has more than one <vlan> element defined, it is assumed that the user wants to do VLAN trunking using all the specified tags. In the case that vlan trunking with a single tag is desired, the optional attribute trunk='yes' can be added to the vlan element. </quote> I am using 0.9.13(with ubuntu 12.10). Does that means we need newer version? --Sheng On Thu, May 2, 2013 at 10:55 AM, Sheng Yang <sh...@yasker.org<mailto:sh...@yasker.org>> wrote: I DO SEE the tag on VM profile when agent start, but I didn't see them on OVS ports. 2013-05-01 18:04:44,702{GMT} DEBUG [kvm.resource.LibvirtComputingResource] (agentRequest-Handler-5:) starting v-2-VM: <domain type='kvm'> <name>v-2-VM</name> <uuid>1422832d-be18-352a-a08a-9bbff40e0d14</uuid> <description>Debian GNU/Linux 5.0 (32-bit)</description> <clock offset='utc'> </clock> <features> <pae/> <apic/> <acpi/> </features> <devices> <emulator>/usr/bin/kvm</emulator> <interface type='bridge'> <source bridge='cloud0'/> <mac address='0e:00:a9:fe:02:45'/> <model type='virtio'/> <virtualport type='openvswitch'> </virtualport> </interface> <interface type='bridge'> <source bridge='cloudbr0'/> <mac address='06:f7:5c:00:00:06'/> <model type='virtio'/> <virtualport type='openvswitch'> </virtualport> </interface> <interface type='bridge'> <source bridge='cloudbr0'/> <mac address='06:4c:12:00:00:1a'/> <model type='virtio'/> <virtualport type='openvswitch'> </virtualport> <vlan trunk='no'> <tag id='1610'/> <----------- here </vlan></interface> <serial type='pty'> <target port='0'/> </serial> <graphics type='vnc' autoport='yes' listen='' /> <disk device='disk' type='file'> <driver name='qemu' type='qcow2' cache='none' /> <source file='/mnt/20ad978d-a581-3a08-95fd-c2a45417513c/2f12ce26-4e4b-4d6e-b77e-1c45afff58e9'/> <target dev='vda' bus='virtio'/> </disk> <disk device='cdrom' type='file'> <driver name='qemu' type='raw' cache='none' /> <source file='/usr/share/cloudstack-common/vms/systemvm.iso'/> <target dev='hdc' bus='ide'/> </disk> <console type='pty'> <target port='0'/> </console> <input type='tablet' bus='usb'/> <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/v-2-VM.agent'/> <target type='virtio' name='v-2-VM.vport'/> <address type='virtio-serial'/> </channel> </devices> <memory>1048576</memory> <vcpu>1</vcpu> <os> <type arch='x86_64' machine='pc'>hvm</type> <boot dev='cdrom'/> <boot dev='hd'/> </os> <cputune> <shares>500</shares> </cputune> <on_reboot>restart</on_reboot> <on_poweroff>destroy</on_poweroff> <on_crash>destroy</on_crash> </domain> After this, vnet2 should be tagged with 1610, but: root@yasker-box1:~# ovs-vsctl list port vnet2 _uuid : 012a6140-bd87-4917-84cc-7190829c695a bond_downdelay : 0 bond_fake_iface : false bond_mode : [] bond_updelay : 0 external_ids : {} fake_bridge : false interfaces : [95bcf67b-12c1-44e5-87da-5663c6644da3] lacp : [] mac : [] name : "vnet2" other_config : {} qos : [] statistics : {} status : {} tag : [] trunks : [] vlan_mode : [] So it cannot access the public network. After: root@yasker-box1:~# ovs-vsctl set port vnet2 tag=1610 root@yasker-box1:~# ovs-vsctl list port vnet2 _uuid : 012a6140-bd87-4917-84cc-7190829c695a bond_downdelay : 0 bond_fake_iface : false bond_mode : [] bond_updelay : 0 external_ids : {} fake_bridge : false interfaces : [95bcf67b-12c1-44e5-87da-5663c6644da3] lacp : [] mac : [] name : "vnet2" other_config : {} qos : [] statistics : {} status : {} tag : 1610 trunks : [] vlan_mode : [] It can access the public network with vlan 1610. --Sheng On Thu, May 2, 2013 at 4:34 AM, Hugo Trippaers <htrippa...@schubergphilis.com<mailto:htrippa...@schubergphilis.com>> wrote: Hey Sheng, The tagging is done by libvirt. Can you check your agent.log? I would have expected an entry in the log file looking like this 's_logger.debug("creating a vlan dev and bridge for public traffic per traffic label " + trafficLabel);' Also the XML document for the vif sent to libvirt should have the following tag '<vlan trunk='no'>\n<tag id='" + _vlanTag + "'/>\n</vlan>"' What are your traffic labels set to for kvm? Could you share your agent.properties? Cheers, Hugo From: Sheng Yang [mailto:sh...@yasker.org<mailto:sh...@yasker.org>] Sent: Thursday, May 02, 2013 3:17 AM To: Hugo Trippaers; <dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>> Subject: OVS on KVM Hi Hugo, I am trying to use OVS on KVM now, but I found all public ports are not tagged with public vlan as it supposed to be, so any public traffic cannot goes out. I've verified that I am using OvsVifDriver. Here is the output of ovs-vsctl show: <quote> root@yasker-box1:~/kvm-agent# ovs-vsctl show 02281b72-131c-4b24-b191-fb1bb7fe186d Bridge "cloud0" Port "cloud0" Interface "cloud0" type: internal Port "vnet3" Interface "vnet3" Port "vnet0" Interface "vnet0" Bridge "cloudbr0" Port "vnet2" Interface "vnet2" Port "vnet6" Interface "vnet6" Port "vnet4" Interface "vnet4" Port "vnet9" Interface "vnet9" Port "vnet10" Interface "vnet10" Port "vnet1" Interface "vnet1" Port "cloudbr0" Interface "cloudbr0" type: internal Port "eth0" Interface "eth0" Port "vnet5" Interface "vnet5" ovs_version: "1.4.3" </quote> I've checked the Installation guide, it use different bridge for different vlan. But would that be the only way to work? Because we can have different public vlans. Maybe I got some setup wrong... Any comments? Thanks! --Sheng