AT_BANNER([ofproto-dpif]) AT_SETUP([ofproto-dpif - resubmit]) OFPROTO_START AT_DATA([flows.txt], [dnl table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21) table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18) table=0 in_port=3 priority=2000 icmp actions=output(20) table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15) table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2) table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2) ]) AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) AT_CHECK([ovs-appctl -t test-openflowd ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0),icmp(type=8,code=0)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21 ]) OFPROTO_STOP AT_CLEANUP AT_SETUP([ofproto-dpif - registers]) OFPROTO_START AT_DATA([flows.txt], [dnl in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]] in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]] in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]] in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]] in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]] in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]] in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]] in_port=9,reg0=0xdeadbeef actions=output:20 in_port=10,reg1=0xdeadbeef actions=output:21 in_port=11,reg2=0xeef22dea actions=output:22 ]) AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) AT_CHECK([ovs-appctl -t test-openflowd ofproto/trace br0 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0),icmp(type=8,code=0)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], [Datapath actions: 20,21,22 ]) OFPROTO_STOP AT_CLEANUP AT_SETUP([ofproto-dpif - output]) OFPROTO_START AT_DATA([flows.txt], [dnl in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7 in_port=2 actions=output:9 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]] in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]] in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]] in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]] ]) AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) AT_CHECK([ovs-appctl -t test-openflowd ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0),icmp(type=8,code=0)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], [Datapath actions: 9,55,10,55,66,11,77,88 ]) OFPROTO_STOP AT_CLEANUP AT_SETUP([ofproto-dpif - set_tunnel]) OFPROTO_START AT_DATA([flows.txt], [dnl in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5 in_port=1 actions=set_tunnel:1,output:1 in_port=2 actions=set_tunnel:1,output:2 in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3 in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4 in_port=5 actions=set_tunnel:5 ]) AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) AT_CHECK([ovs-appctl -t test-openflowd ofproto/trace br0 'tun_id(0x1),in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0),icmp(type=8,code=0)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], [Datapath actions: set_tunnel(0x1),1,2,set_tunnel(0x3),3,4 ]) OFPROTO_STOP AT_CLEANUP AT_SETUP([ofproto-dpif - trunks]) OVS_VSWITCHD_START( [add-port br0 p1 trunks=10,12 -- set Interface p1 type=dummy -- \ add-port br0 p2 tag=10 -- set Interface p2 type=dummy -- \ add-port br0 p3 tag=12 -- set Interface p3 type=dummy -- \ add-port br0 p4 tag=12 -- set Interface p4 type=dummy]) AT_CHECK( [ovs-vsctl \ -- get Interface p1 ofport \ -- get Interface p2 ofport \ -- get Interface p3 ofport \ -- get Interface p4 ofport], [0], [stdout]) set `cat stdout` br0=0 p1=$1 p2=$2 p3=$3 p4=$4 dnl Each of these specifies an in_port, a VLAN VID (or "none"), and one dnl or more sets of valid datapath actions. (The order of datapath dnl actions is somewhat unpredictable, hence the ability to specify more dnl than one set.) for tuple in \ "$br0 none drop" \ "$br0 0 drop" \ "$br0 10 $p1,strip_vlan,$p2" \ "$br0 11 drop" \ "$br0 12 $p1,strip_vlan,$p3,$p4 $p1,strip_vlan,$p4,$p3" \ "$p1 none drop" \ "$p1 0 drop" \ "$p1 10 $br0,strip_vlan,$p2" \ "$p1 11 drop" \ "$p1 12 $br0,strip_vlan,$p4,$p3 $br0,strip_vlan,$p3,$p4" \ "$p2 none set_tci(vid=10,pcp=0),$br0,$p1 set_tci(vid=10,pcp=0),$p1,$br0" \ "$p2 0 set_tci(vid=10,pcp=1),$br0,$p1 set_tci(vid=10,pcp=1),$p1,$br0" \ "$p2 10 drop" \ "$p2 11 drop" \ "$p2 12 drop" \ "$p3 none $p4,set_tci(vid=12,pcp=0),$br0,$p1 $p4,set_tci(vid=12,pcp=0),$p1,$br0" \ "$p3 0 $p4,set_tci(vid=12,pcp=1),$br0,$p1 $p4,set_tci(vid=12,pcp=1),$p1,$br0" \ "$p3 10 drop" \ "$p3 11 drop" \ "$p3 12 drop" \ "$p4 none $p3,set_tci(vid=12,pcp=0),$br0,$p1 $p3,set_tci(vid=12,pcp=0),$p1,$br0" \ "$p4 0 $p3,set_tci(vid=12,pcp=1),$br0,$p1 $p3,set_tci(vid=12,pcp=1),$p1,$br0" \ "$p4 10 drop" \ "$p4 11 drop" \ "$p4 12 drop" do set $tuple in_port=$1 vlan=$2 shift; shift if test $vlan = none; then flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)" else flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),vlan(vid=$vlan,pcp=1),eth_type(0xabcd)" fi AT_CHECK( [echo "-- $tuple" echo "-- br0=$br0 p1=$p1 p2=$p2 p3=$p3 p4=$p4" ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout]) actions=`tail -1 stdout | sed 's/Datapath actions: //'` no_match=: for pattern do if test X"$actions" = X"$pattern"; then no_match=false fi done AT_FAIL_IF([$no_match]) done OVS_VSWITCHD_STOP AT_CLEANUP