Hello Ben, Jean, Thank you for your reply. As for my example of configuration:
port 1: trunks 100, 110, 120 (connected to tenant networks) port 2: trunks 100, 110, 120 (connected to tenant networks) port 3: trunks 200, 210, 220 (connected to tenant networks) port 4: trunks 200, 210, 220 (connected to tenant networks) port 5: trunks 300, 310, 320 (connected to tenant networks) port 6: trunks 300, 310, 320 (connected to tenant networks) port 7: trunk (connected to provider networks) port 8: trunk (connected to provider networks) For implementing it if I use Egress Tables, I understand that I should use following table. Is my understanding correct? First egress == 200 table 200: actset_output=1,actions=goto_table:201 actset_output=2,actions=goto_table:201 actset_output=3,actions=goto_table:202 actset_output=4,actions=goto_table:202 actset_output=3,actions=goto_table:203 actset_output=4,actions=goto_table:203 actset_output=7,actions= actset_output=8,actions= table 201: actset_output=*,vlan_id=100,actions= actset_output=*,vlan_id=110,actions= actset_output=*,vlan_id=120,actions= actset_output=*,actions=clear_actions table 202: actset_output=*,vlan_id=200,actions= actset_output=*,vlan_id=210,actions= actset_output=*,vlan_id=220,actions= actset_output=*,actions=clear_actions table 203: actset_output=*,vlan_id=300,actions= actset_output=*,vlan_id=310,actions= actset_output=*,vlan_id=320,actions= actset_output=*,actions=clear_actions On Fri, 6 Mar 2015 11:04:03 -0800, j...@hpl.hp.com wrote in E-mail "Re: Hybrid VLAN capability": > On Fri, Mar 06, 2015 at 10:27:22AM -0800, Ben Pfaff wrote: > > > > Another possibility is to use the "conjunctive match" feature in > > (upcoming) OVS 2.4. With this feature, you can effectively construct > > flows that say, > > > > (in_port in {set_A}) and (vlan_id in {set_B}),actions=... > > > > by adding n_A + n_B + 1 flows to the flow table, where n_A is the > > number of elements in {set_A} and n_B is the number in {set_B}. But I > > doubt that that feature maps well to hardware. > > I believe this will only help for ingress filtering. I think > ingress filtering is easy, you can just do it with two tables : > > table 0: > in_port=1,actions=goto_table:1 > in_port=2,actions=goto_table:1 > in_port=3,actions=goto_table:1 > in_port=4,actions=goto_table:1 > in_port=7,actions=goto_table:2 > > table 1: > in_port=*,vlan_id=100,actions=goto_table:2 > in_port=*,vlan_id=110,actions=goto_table:2 > in_port=*,vlan_id=120,actions=goto_table:2 > in_port=*,drop > > table 2: > in_port=1,actions=output:2,output:7,output:8 > in_port=2,actions=output:1,output:7,output:8 > in_port=3,actions=output:4,output:7,output:8 > in_port=4,actions=output:3,output:7,output:8 > in_port=7,actions=output:8 > > It is clear that "conjunctive match" would help to collapse > the first two tables into one, but there may be other way to do that, > such as using bitmasks on the VLAN or just wildcarding input port. > In term of what would be more efficient in the datapath, > I guess that would depend on the traffic pattern and how forwarding > rules look like. What is clear to me is that having all collapsed into > one megaflow lookup would beat having an additional specialised VLAN > lookup in the port itself. > > Where "conjunctive match" does not help is with egress > filtering. Obviously, actset_output would help, but it's tricky to use > in ingress tables and is non-transparent to the forwarding rules. > > With Egress Tables : > > table 0: > in_port=1,actions=goto_table:1 > in_port=2,actions=goto_table:1 > in_port=3,actions=goto_table:1 > in_port=4,actions=goto_table:1 > in_port=7,actions=goto_table:2 > in_port=8,actions=goto_table:2 > > table 1: > in_port=*,vlan_id=100,actions=goto_table:2 > in_port=*,vlan_id=110,actions=goto_table:2 > in_port=*,vlan_id=120,actions=goto_table:2 > in_port=*,drop > > table 2: > in_port=1,actions=output:2,output:7,output:8 > in_port=2,actions=output:1,output:7,output:8 > in_port=3,actions=output:4,output:7,output:8 > in_port=4,actions=output:3,output:7,output:8 > in_port=7,actions=output:8 > > First egress == 200 > > table 200: > actset_output=1,actions=goto_table:201 > actset_output=2,actions=goto_table:201 > actset_output=3,actions=goto_table:201 > actset_output=4,actions=goto_table:201 > actset_output=7,actions= > actset_output=8,actions= > > table 201: > actset_output=*,vlan_id=100,actions= > actset_output=*,vlan_id=110,actions= > actset_output=*,vlan_id=120,actions= > actset_output=*,actions=clear_actions > > How do that look like ? Clean enough ? > Again, "conjunctive match" would allow you to collapse table > 200 and 201. But that's only an optimisation ;-) > But to me the main issue is avoiding an extra lookup in the > output port. I personally believe that you won't have any trouble > folding egress tables into a single megaflow lookup without needing > recirculation in most cases. Recirculation is probably needed only > when using OFPP_ALL, group of type all or multiple output actions. > > Regards, > > Jean _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev