It looks like you're trying to add an 802.1Q header with VLAN 9 and sending the packet to an access port. That's not how access ports work. The FAQ explains the basics of VLANs.
Q: What's a VLAN? A: At the simplest level, a VLAN (short for "virtual LAN") is a way to partition a single switch into multiple switches. Suppose, for example, that you have two groups of machines, group A and group B. You want the machines in group A to be able to talk to each other, and you want the machine in group B to be able to talk to each other, but you don't want the machines in group A to be able to talk to the machines in group B. You can do this with two switches, by plugging the machines in group A into one switch and the machines in group B into the other switch. If you only have one switch, then you can use VLANs to do the same thing, by configuring the ports for machines in group A as VLAN "access ports" for one VLAN and the ports for group B as "access ports" for a different VLAN. The switch will only forward packets between ports that are assigned to the same VLAN, so this effectively subdivides your single switch into two independent switches, one for each group of machines. So far we haven't said anything about VLAN headers. With access ports, like we've described so far, no VLAN header is present in the Ethernet frame. This means that the machines (or switches) connected to access ports need not be aware that VLANs are involved, just like in the case where we use two different physical switches. Now suppose that you have a whole bunch of switches in your network, instead of just one, and that some machines in group A are connected directly to both switches 1 and 2. To allow these machines to talk to each other, you could add an access port for group A's VLAN to switch 1 and another to switch 2, and then connect an Ethernet cable between those ports. That works fine, but it doesn't scale well as the number of switches and the number of VLANs increases, because you use up a lot of valuable switch ports just connecting together your VLANs. This is where VLAN headers come in. Instead of using one cable and two ports per VLAN to connect a pair of switches, we configure a port on each switch as a VLAN "trunk port". Packets sent and received on a trunk port carry a VLAN header that says what VLAN the packet belongs to, so that only two ports total are required to connect the switches, regardless of the number of VLANs in use. Normally, only switches (either physical or virtual) are connected to a trunk port, not individual hosts, because individual hosts don't expect to see a VLAN header in the traffic that they receive. None of the above discussion says anything about particular VLAN numbers. This is because VLAN numbers are completely arbitrary. One must only ensure that a given VLAN is numbered consistently throughout a network and that different VLANs are given different numbers. (That said, VLAN 0 is usually synonymous with a packet that has no VLAN header, and VLAN 4095 is reserved.) On Sat, Mar 16, 2013 at 12:46:10PM +0800, Fang wrote: > May be my understanding is wrong.I tried ovs-ofctl add-flow br0 > cookie=1,nw_src=192.168.0.11,nw_dst=192.168.0.33,ip,actions=mod_vlan_vid=9,output:6 > ("6" is tap3),and failed. > Could you give me an example please.Thank you. > > > > > > > > > At 2013-03-15 23:09:07,"Ben Pfaff" <b...@nicira.com> wrote: > >On Fri, Mar 15, 2013 at 06:52:33PM +0800, Fang wrote: > >> Hello.I have three VMs on my host. > >> > >> Bridge "br0" > >> Port "br0" > >> Interface "br0" > >> type: internal > >> Port "tap1" > >> tag: 7 > >> Interface "tap1" > >> Port "tap2" > >> tag: 7 > >> Interface "tap2" > >> Port "tap3" > >> tag: 9 > >> Interface "tap3" > >> Port "eth0" > >> Interface "eth0" > >> ovs_version: "1.7.1" > >> > >> I want to make vm1 communicate with vm3 by modifying the vlan tag. > >> > >> VM1(tap1):192.168.0.11 > >> VM2(tap2):192.168.0.22 > >> VM3(tap3):192.168.0.33 > >> > >> I set > >> ovs-ofctl add-flow br0 > >> cookie=1,nw_src=192.168.0.11,nw_dst=192.168.0.33,ip,actions=mod_vlan_vid:9,NORMAL > >> but it did not work. > > > >This does not work for packets coming from vm1 because vm1 has an access > >port, not a trunk port, so "normal" drops packets that have 802.1Q > >headers. > > > >> I tried > >> ovs-ofctl add-flow br0 > >> cookie=1,priority=10,in_port=4,dl_vlan=7,actions=mod_vlan_vid:9,NORMAL > >> ("4" is port tap1) > >> and I also tried dl_src,dl_dst.All did not work. > > > >This does not work because packets received from vm1 do not have an > >802.1Q header, thus "dl_vlan=7" will not match them. > > > >You will need to write a rule that matches the packets you want and then > >sends them directly to their destination, rather than trying to go > >through "normal". _______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss