X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Fofproto-dpif.at;h=b5ca08cf9b5d9e9830179873e2e3673b65c1d62a;hb=299915eadc559f12d145945436289931a74621b8;hp=a4fb737bafe69b3680213533ce5a25730c343b38;hpb=8e9ce036dd93307b50b9189438b3929234391d61;p=openvswitch diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at index a4fb737b..b5ca08cf 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -79,3 +79,149 @@ AT_CHECK([tail -1 stdout], [0], ]) OFPROTO_STOP AT_CLEANUP + +AT_SETUP([ofproto-dpif - VLAN handling]) +OVS_VSWITCHD_START( + [add-port br0 p1 trunks=10,12 -- \ + add-port br0 p2 tag=10 -- \ + add-port br0 p3 tag=12 -- \ + add-port br0 p4 tag=12 -- \ + add-port br0 p5 vlan_mode=native-tagged tag=10 -- \ + add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \ + add-port br0 p7 vlan_mode=native-untagged tag=12 -- \ + add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 -- \ + set Interface p1 type=dummy -- \ + set Interface p2 type=dummy -- \ + set Interface p3 type=dummy -- \ + set Interface p4 type=dummy -- \ + set Interface p5 type=dummy -- \ + set Interface p6 type=dummy -- \ + set Interface p7 type=dummy -- \ + set Interface p8 type=dummy --]) + +AT_CHECK( + [ovs-vsctl \ + -- get Interface p1 ofport \ + -- get Interface p2 ofport \ + -- get Interface p3 ofport \ + -- get Interface p4 ofport \ + -- get Interface p5 ofport \ + -- get Interface p6 ofport \ + -- get Interface p7 ofport \ + -- get Interface p8 ofport], + [0], [stdout]) +set `cat stdout` +br0=0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=$7 p8=$8 + +dnl Each of these specifies an in_port, a VLAN VID (or "none"), a VLAN +dnl PCP (used if the VID isn't "none") and the expected set of datapath +dnl actions. +dnl +dnl XXX Some of these actually output an 802.1Q header to an access port +dnl (see for example the actions for in_port=p3, vlan=0) to qualify the +dnl packet with a priority. That should be configurable. +for tuple in \ + "br0 none 0 drop" \ + "br0 0 0 drop" \ + "br0 0 1 drop" \ + "br0 10 0 p1,p5,p6,p7,p8,pop_vlan,p2" \ + "br0 10 1 p1,p5,p6,p7,p8,pop_vlan,push_vlan(vid=0,pcp=1),p2" \ + "br0 11 0 p5,p7" \ + "br0 11 1 p5,p7" \ + "br0 12 0 p1,p5,p6,pop_vlan,p3,p4,p7,p8" \ + "br0 12 1 p1,p5,p6,pop_vlan,push_vlan(vid=0,pcp=1),p3,p4,p7,p8" \ + "p1 none 0 drop" \ + "p1 0 0 drop" \ + "p1 0 1 drop" \ + "p1 10 0 br0,p5,p6,p7,p8,pop_vlan,p2" \ + "p1 10 1 br0,p5,p6,p7,p8,pop_vlan,push_vlan(vid=0,pcp=1),p2" \ + "p1 11 0 drop" \ + "p1 11 1 drop" \ + "p1 12 0 br0,p5,p6,pop_vlan,p3,p4,p7,p8" \ + "p1 12 1 br0,p5,p6,pop_vlan,push_vlan(vid=0,pcp=1),p3,p4,p7,p8" \ + "p2 none 0 push_vlan(vid=10,pcp=0),br0,p1,p5,p6,p7,p8" \ + "p2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),br0,p1,p5,p6,p7,p8" \ + "p2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),br0,p1,p5,p6,p7,p8" \ + "p2 10 0 drop" \ + "p2 10 1 drop" \ + "p2 11 0 drop" \ + "p2 11 1 drop" \ + "p2 12 0 drop" \ + "p2 12 1 drop" \ + "p3 none 0 p4,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p3 0 0 p4,p7,p8,pop_vlan,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p3 0 1 p4,p7,p8,pop_vlan,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \ + "p3 10 0 drop" \ + "p3 10 1 drop" \ + "p3 11 0 drop" \ + "p3 11 1 drop" \ + "p3 12 0 drop" \ + "p3 12 1 drop" \ + "p4 none 0 p3,p7,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p4 0 0 p3,p7,p8,pop_vlan,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p4 0 1 p3,p7,p8,pop_vlan,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \ + "p4 10 0 drop" \ + "p4 10 1 drop" \ + "p4 11 0 drop" \ + "p4 11 1 drop" \ + "p4 12 0 drop" \ + "p4 12 1 drop" \ + "p5 none 0 p2,push_vlan(vid=10,pcp=0),br0,p1,p6,p7,p8" \ + "p5 0 0 p2,pop_vlan,push_vlan(vid=10,pcp=0),br0,p1,p6,p7,p8" \ + "p5 0 1 p2,pop_vlan,push_vlan(vid=10,pcp=1),br0,p1,p6,p7,p8" \ + "p5 10 0 br0,p1,p6,p7,p8,pop_vlan,p2" \ + "p5 10 1 br0,p1,p6,p7,p8,pop_vlan,push_vlan(vid=0,pcp=1),p2" \ + "p5 11 0 br0,p7" \ + "p5 11 1 br0,p7" \ + "p5 12 0 br0,p1,p6,pop_vlan,p3,p4,p7,p8" \ + "p5 12 1 br0,p1,p6,pop_vlan,push_vlan(vid=0,pcp=1),p3,p4,p7,p8" \ + "p6 none 0 p2,push_vlan(vid=10,pcp=0),br0,p1,p5,p7,p8" \ + "p6 0 0 p2,pop_vlan,push_vlan(vid=10,pcp=0),br0,p1,p5,p7,p8" \ + "p6 0 1 p2,pop_vlan,push_vlan(vid=10,pcp=1),br0,p1,p5,p7,p8" \ + "p6 10 0 br0,p1,p5,p7,p8,pop_vlan,p2" \ + "p6 10 1 br0,p1,p5,p7,p8,pop_vlan,push_vlan(vid=0,pcp=1),p2" \ + "p6 11 0 drop" \ + "p6 11 1 drop" \ + "p6 12 0 br0,p1,p5,pop_vlan,p3,p4,p7,p8" \ + "p6 12 1 br0,p1,p5,pop_vlan,push_vlan(vid=0,pcp=1),p3,p4,p7,p8" \ + "p7 none 0 p3,p4,p8,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p7 0 0 p3,p4,p8,pop_vlan,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p7 0 1 p3,p4,p8,pop_vlan,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \ + "p7 10 0 br0,p1,p5,p6,p8,pop_vlan,p2" \ + "p7 10 1 br0,p1,p5,p6,p8,pop_vlan,push_vlan(vid=0,pcp=1),p2" \ + "p7 11 0 br0,p5" \ + "p7 11 1 br0,p5" \ + "p7 12 0 br0,p1,p5,p6,pop_vlan,p3,p4,p8" \ + "p7 12 1 br0,p1,p5,p6,pop_vlan,push_vlan(vid=0,pcp=1),p3,p4,p8" \ + "p8 none 0 p3,p4,p7,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p8 0 0 p3,p4,p7,pop_vlan,push_vlan(vid=12,pcp=0),br0,p1,p5,p6" \ + "p8 0 1 p3,p4,p7,pop_vlan,push_vlan(vid=12,pcp=1),br0,p1,p5,p6" \ + "p8 10 0 br0,p1,p5,p6,p7,pop_vlan,p2" \ + "p8 10 1 br0,p1,p5,p6,p7,pop_vlan,push_vlan(vid=0,pcp=1),p2" \ + "p8 11 0 drop" \ + "p8 11 1 drop" \ + "p8 12 0 br0,p1,p5,p6,pop_vlan,p3,p4,p7" \ + "p8 12 1 br0,p1,p5,p6,pop_vlan,push_vlan(vid=0,pcp=1),p3,p4,p7" +do + set $tuple + in_port=$1 + vlan=$2 + pcp=$3 + expected=$4 + + eval n_in_port=\$$in_port + if test $vlan = none; then + flow="in_port($n_in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)" + else + flow="in_port($n_in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),vlan(vid=$vlan,pcp=$pcp),eth_type(0xabcd)" + fi + + AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout]) + actual=`tail -1 stdout | sed 's/Datapath actions: //'` + + AT_CHECK([echo "in_port=$in_port vlan=$vlan" + $PERL $srcdir/compare-odp-actions.pl "$expected" "$actual" br0=$br0 p1=$p1 p2=$p2 p3=$p3 p4=$p4 p5=$p5 p6=$p6 p7=$p7 p8=$p8], [0], [ignore]) +done + +OVS_VSWITCHD_STOP +AT_CLEANUP