]> git.proxmox.com Git - ovs.git/blame - tests/ofproto-dpif.at
Add OF1.3 TUNNEL_ID support.
[ovs.git] / tests / ofproto-dpif.at
CommitLineData
29901626
BP
1AT_BANNER([ofproto-dpif])
2
3AT_SETUP([ofproto-dpif - resubmit])
023e1e0a 4OVS_VSWITCHD_START
f7b8e494
JP
5ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
6 [16], [17], [18], [19], [20], [21])
29901626
BP
7AT_DATA([flows.txt], [dnl
8table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
9table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
10table=0 in_port=3 priority=2000 icmp actions=output(20)
11table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
12table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
13table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
14])
15AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31a19d69 16AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
29901626
BP
17AT_CHECK([tail -1 stdout], [0],
18 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
19])
023e1e0a 20OVS_VSWITCHD_STOP
29901626 21AT_CLEANUP
58a89177
EJ
22
23AT_SETUP([ofproto-dpif - registers])
023e1e0a 24OVS_VSWITCHD_START
f7b8e494 25ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
58a89177
EJ
26AT_DATA([flows.txt], [dnl
27in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
28in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
e9358af6
EJ
29in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
30in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
31
58a89177
EJ
32in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
33in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
34in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
35in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
36in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
37in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
38in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
39in_port=9,reg0=0xdeadbeef actions=output:20
40in_port=10,reg1=0xdeadbeef actions=output:21
41in_port=11,reg2=0xeef22dea actions=output:22
e9358af6
EJ
42
43dnl Sanilty check all registers
44in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
45in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
46in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
47in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
58a89177
EJ
48])
49AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 50AT_CHECK([ovs-appctl 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,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
58a89177 51AT_CHECK([tail -1 stdout], [0],
e9358af6 52 [Datapath actions: 20,21,22,33
58a89177 53])
023e1e0a 54OVS_VSWITCHD_STOP
58a89177 55AT_CLEANUP
f694937d
EJ
56
57AT_SETUP([ofproto-dpif - output])
023e1e0a 58OVS_VSWITCHD_START
f7b8e494 59ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
f694937d
EJ
60AT_DATA([flows.txt], [dnl
61in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
62in_port=2 actions=output:9
63in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
64in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
65in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
66in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
67in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
68])
69AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 70AT_CHECK([ovs-appctl 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,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
f694937d
EJ
71AT_CHECK([tail -1 stdout], [0],
72 [Datapath actions: 9,55,10,55,66,11,77,88
73])
023e1e0a 74OVS_VSWITCHD_STOP
f694937d 75AT_CLEANUP
8e9ce036 76
f0fd1a17
PS
77AT_SETUP([ofproto-dpif - dec_ttl])
78OVS_VSWITCHD_START
f7b8e494 79ADD_OF_PORTS([br0], [1], [2], [3], [4])
f0fd1a17
PS
80AT_DATA([flows.txt], [dnl
81table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
82table=1 in_port=1 action=dec_ttl,output:3
83])
84AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
85AT_CHECK([ovs-appctl 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,ttl=2,frag=no)' -generate], [0], [stdout])
6a7e895f 86AT_CHECK([tail -3 stdout], [0],
f0fd1a17 87 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
6a7e895f
BP
88This flow is handled by the userspace slow path because it:
89 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17
PS
90])
91AT_CHECK([ovs-appctl 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,ttl=3,frag=no)'], [0], [stdout])
92AT_CHECK([tail -1 stdout], [0],
93 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),3,4
94])
95AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
96AT_CHECK([tail -1 stdout], [0],
97 [Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
98])
99
982697a4 100AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 101AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
f0fd1a17
PS
102AT_CHECK([ovs-appctl 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,ttl=2,frag=no)' -generate], [0], [stdout])
103OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
104AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 105NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
aa6c9932 106priority=0,icmp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=1,icmp_type=0,icmp_code=0
f0fd1a17
PS
107])
108OVS_VSWITCHD_STOP
109AT_CLEANUP
110
111
77750738 112AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
113OVS_VSWITCHD_START
114ADD_OF_PORTS([br0], [1], [2])
77750738 115
77750738
JP
116AT_CHECK([ovs-ofctl add-flow br0 action=normal])
117
118# "in_port" defaults to OFPP_NONE if it's not specified.
119flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
120AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
121actual=`tail -1 stdout | sed 's/Datapath actions: //'`
122
e44768b7 123expected="1,2,100"
247527db 124AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
77750738 125mv stdout expout
247527db 126AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
77750738
JP
127
128OVS_VSWITCHD_STOP
129AT_CLEANUP
130
8b36f51e 131AT_SETUP([ofproto-dpif - DSCP])
8b36f51e
EJ
132OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
133AT_DATA([flows.txt], [dnl
134actions=output:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
135])
136AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
137AT_CHECK([ovs-vsctl -- \
138 set Port p1 qos=@newqos --\
139 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
140 --id=@q1 create Queue dscp=1 --\
141 --id=@q2 create Queue dscp=2], [0], [ignore])
142AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
143AT_CHECK([tail -1 stdout], [0],
144 [Datapath actions: dnl
e44768b7 145100,dnl
8b36f51e
EJ
146set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
147set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(priority(2)),1,dnl
1481,dnl
149set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
150set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(priority(0)),1,dnl
151set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
e44768b7 152100
8b36f51e
EJ
153])
154OVS_VSWITCHD_STOP
155AT_CLEANUP
156
fd19297b 157AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
158OVS_VSWITCHD_START
159ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
160
161AT_DATA([flows.txt], [dnl
a0fbe94a 162in_port=local actions=local,flood
fd19297b
EJ
163in_port=1 actions=flood
164in_port=2 actions=all
165in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
5bf93d67 166in_port=4 actions=enqueue:65534:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
fd19297b
EJ
167])
168AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
169AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
170AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
171
e44768b7 172AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
a0fbe94a
AR
173AT_CHECK([tail -1 stdout \
174| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
1751
1762
1773
1784
1797
180])
181
fd19297b
EJ
182AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
183AT_CHECK([tail -1 stdout \
184| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 185100
fd19297b
EJ
1862
1873
1884
1897
190])
191
192AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
193AT_CHECK([tail -1 stdout \
194| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 1951
e44768b7 196100
fd19297b
EJ
1973
1984
1996
2007
201])
202
203AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
204AT_CHECK([tail -1 stdout], [0],
e44768b7 205 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
206])
207
208AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
209AT_CHECK([tail -1 stdout], [0],
e44768b7 210 [Datapath actions: set(priority(1)),100,1,2,set(priority(2)),3,set(priority(1)),6,7
fd19297b
EJ
211])
212OVS_VSWITCHD_STOP
213AT_CLEANUP
214
8e9ce036 215AT_SETUP([ofproto-dpif - set_tunnel])
023e1e0a 216OVS_VSWITCHD_START
f7b8e494 217ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [90])
8e9ce036
EJ
218AT_DATA([flows.txt], [dnl
219in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5
220in_port=1 actions=set_tunnel:1,output:1
221in_port=2 actions=set_tunnel:1,output:2
222in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3
223in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4
224in_port=5 actions=set_tunnel:5
225])
226AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 227AT_CHECK([ovs-appctl 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,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
8e9ce036 228AT_CHECK([tail -1 stdout], [0],
4edb9ae9 229 [Datapath actions: set(tun_id(0x1)),1,2,set(tun_id(0x3)),3,4
8e9ce036 230])
023e1e0a 231OVS_VSWITCHD_STOP
15056dc8
EJ
232AT_CLEANUP
233
234AT_SETUP([ofproto-dpif - controller])
235OVS_VSWITCHD_START([dnl
236 add-port br0 p1 -- set Interface p1 type=dummy
237])
238
239AT_CAPTURE_FILE([ofctl_monitor.log])
240AT_DATA([flows.txt], [dnl
241cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 242cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
243cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
244
54834960
EJ
245cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
246cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
247cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
248cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
249cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
250cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
251cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
15056dc8
EJ
252])
253AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
254
255dnl Flow miss.
77a922c7 256AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
257
258for i in 1 2 3 ; do
259 ovs-appctl netdev-dummy/receive p1 '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=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'
260done
261
262OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
263AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 264OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
aabf5352 265priority=0,tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
15056dc8 266dnl
f0fd1a17 267OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
aabf5352 268priority=0,tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
15056dc8 269dnl
f0fd1a17 270OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
aabf5352 271priority=0,tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
15056dc8
EJ
272])
273
274dnl Singleton controller action.
77a922c7 275AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
276
277for i in 1 2 3 ; do
278 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
279done
280
281OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
282AT_CHECK([cat ofctl_monitor.log], [0], [dnl
283OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
aabf5352 284priority=0,tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
15056dc8
EJ
285dnl
286OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
aabf5352 287priority=0,tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
15056dc8
EJ
288dnl
289OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
aabf5352 290priority=0,tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
15056dc8
EJ
291])
292
293dnl Modified controller action.
77a922c7 294AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
295
296for i in 1 2 3 ; do
297 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
298done
299
300OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
301AT_CHECK([cat ofctl_monitor.log], [0], [dnl
302OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
aabf5352 303priority=0,tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
15056dc8
EJ
304dnl
305OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
aabf5352 306priority=0,tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
15056dc8
EJ
307dnl
308OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
aabf5352 309priority=0,tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
15056dc8
EJ
310])
311
312dnl Checksum TCP.
77a922c7 313AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
314
315for i in 1 ; do
316 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=20:22:22:22:22:22,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=11)'
317done
318
319OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
320AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 321NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
aabf5352 322priority=0,tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
15056dc8 323dnl
42edbe39 324NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
aabf5352 325priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
15056dc8 326dnl
42edbe39 327NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
aabf5352 328priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
15056dc8 329dnl
42edbe39 330NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
aabf5352 331priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
15056dc8 332dnl
42edbe39 333NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
aabf5352 334priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:1a03
15056dc8 335dnl
42edbe39 336NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aabf5352 337priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:3205
15056dc8 338dnl
42edbe39 339NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aabf5352 340priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=11 tcp_csum:31b8
15056dc8 341dnl
42edbe39 342NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aabf5352 343priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86 tcp_csum:316d
15056dc8 344dnl
42edbe39 345NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aabf5352 346priority=0,tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86 tcp_csum:316d
15056dc8
EJ
347])
348
349dnl Checksum UDP.
77a922c7 350AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
351
352for i in 1 ; do
353 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 1C 00 00 00 00 00 11 00 00 C0 A8 00 01 C0 A8 00 02 00 08 00 0B 00 00 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
354done
355
356OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
357AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 358NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
aa6c9932 359priority=0,udp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 360dnl
42edbe39 361NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
aa6c9932 362priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 363dnl
42edbe39 364NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
aa6c9932 365priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 366dnl
42edbe39 367NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
aa6c9932 368priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
15056dc8 369dnl
42edbe39 370NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
aa6c9932 371priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
15056dc8 372dnl
42edbe39 373NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aa6c9932 374priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:4439
15056dc8 375dnl
42edbe39 376NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aa6c9932 377priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=11 udp_csum:43ec
15056dc8 378dnl
42edbe39 379NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aa6c9932 380priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
15056dc8 381dnl
42edbe39 382NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
aa6c9932 383priority=0,udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
15056dc8
EJ
384])
385
ef0ce8ae
BP
386AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
387 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
388 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
389 cookie=0x3, table=1, n_packets=2, n_bytes=120, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
390 cookie=0x4, table=2, n_packets=2, n_bytes=120, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
391 cookie=0x5, table=3, n_packets=2, n_bytes=120, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
392 cookie=0x6, table=4, n_packets=2, n_bytes=120, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
393 cookie=0x7, table=5, n_packets=2, n_bytes=120, in_port=84 actions=load:0x5->NXM_NX_REG4[[]],load:0x6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,CONTROLLER:65535,resubmit(85,6)
394 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
395 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
396 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
397NXST_FLOW reply:
15056dc8
EJ
398])
399
400OVS_VSWITCHD_STOP
8e9ce036 401AT_CLEANUP
04c956fc 402
ecac4ebf 403AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 404OVS_VSWITCHD_START(
023e1e0a
BP
405 [set Bridge br0 fail-mode=standalone -- \
406 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 407 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
408 add-port br0 p3 tag=12 \
409 other-config:priority-tags=true -- \
ecac4ebf
BP
410 add-port br0 p4 tag=12 -- \
411 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
412 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
413 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
414 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
415 other-config:priority-tags=true -- \
ecac4ebf
BP
416 set Interface p1 type=dummy -- \
417 set Interface p2 type=dummy -- \
418 set Interface p3 type=dummy -- \
419 set Interface p4 type=dummy -- \
420 set Interface p5 type=dummy -- \
421 set Interface p6 type=dummy -- \
422 set Interface p7 type=dummy -- \
423 set Interface p8 type=dummy --])
04c956fc 424
247527db
BP
425dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
426dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 427dnl actions.
04c956fc 428for tuple in \
e44768b7
JP
429 "100 none 0 drop" \
430 "100 0 0 drop" \
431 "100 0 1 drop" \
432 "100 10 0 1,5,6,7,8,pop_vlan,2" \
433 "100 10 1 1,5,6,7,8,pop_vlan,2" \
434 "100 11 0 5,7" \
435 "100 11 1 5,7" \
436 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
437 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
438 "1 none 0 drop" \
439 "1 0 0 drop" \
440 "1 0 1 drop" \
e44768b7
JP
441 "1 10 0 5,6,7,8,100,pop_vlan,2" \
442 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
443 "1 11 0 drop" \
444 "1 11 1 drop" \
e44768b7
JP
445 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
446 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
447 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
448 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
449 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
450 "2 10 0 drop" \
451 "2 10 1 drop" \
452 "2 11 0 drop" \
453 "2 11 1 drop" \
454 "2 12 0 drop" \
455 "2 12 1 drop" \
e44768b7
JP
456 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
457 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
458 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
459 "3 10 0 drop" \
460 "3 10 1 drop" \
461 "3 11 0 drop" \
462 "3 11 1 drop" \
463 "3 12 0 drop" \
464 "3 12 1 drop" \
e44768b7
JP
465 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
466 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
467 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
468 "4 10 0 drop" \
469 "4 10 1 drop" \
470 "4 11 0 drop" \
471 "4 11 1 drop" \
472 "4 12 0 drop" \
473 "4 12 1 drop" \
e44768b7
JP
474 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
475 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
476 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
477 "5 10 0 1,6,7,8,100,pop_vlan,2" \
478 "5 10 1 1,6,7,8,100,pop_vlan,2" \
479 "5 11 0 7,100" \
480 "5 11 1 7,100" \
481 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
482 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
483 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
484 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
485 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
486 "6 10 0 1,5,7,8,100,pop_vlan,2" \
487 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
488 "6 11 0 drop" \
489 "6 11 1 drop" \
e44768b7
JP
490 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
491 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
492 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
493 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
494 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
495 "7 10 0 1,5,6,8,100,pop_vlan,2" \
496 "7 10 1 1,5,6,8,100,pop_vlan,2" \
497 "7 11 0 5,100" \
498 "7 11 1 5,100" \
499 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
500 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
501 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
502 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
503 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
504 "8 10 0 1,5,6,7,100,pop_vlan,2" \
505 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
506 "8 11 0 drop" \
507 "8 11 1 drop" \
e44768b7
JP
508 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
509 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
510do
511 set $tuple
512 in_port=$1
513 vlan=$2
ecac4ebf
BP
514 pcp=$3
515 expected=$4
04c956fc
BP
516
517 if test $vlan = none; then
247527db 518 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 519 else
247527db 520 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=$vlan,pcp=$pcp),encap(eth_type(0xabcd))"
04c956fc
BP
521 fi
522
395e68ce
BP
523 echo "----------------------------------------------------------------------"
524 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
525
ecac4ebf
BP
526 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
527 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 528
247527db 529 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 530 mv stdout expout
247527db 531 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
532done
533
534OVS_VSWITCHD_STOP
535AT_CLEANUP
7257b535
BP
536
537AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 538OVS_VSWITCHD_START
f7b8e494 539ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6])
7257b535
BP
540AT_DATA([flows.txt], [dnl
541priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
542priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
543priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
544priority=50 tcp ip_frag=no actions=output:4
545priority=50 tcp ip_frag=first actions=output:5
546priority=50 tcp ip_frag=later actions=output:6
547])
548AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
549
a61680c6 550base_flow="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=6,tos=0,ttl=128"
7257b535
BP
551no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
552first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
553later_flow="$base_flow,frag=later)"
554
555 # mode no first later
556for tuple in \
557 'normal 1 5 6' \
558 'drop 1 drop drop' \
559 'nx-match 1 2 6'
560do
561 set $tuple
562 mode=$1
563 no=$2
564 first=$3
565 later=$4
566
567 AT_CHECK([ovs-ofctl set-frags br0 $mode])
568 for type in no first later; do
569 eval flow=\$${type}_flow exp_output=\$$type
023e1e0a 570 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
7257b535
BP
571 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
572])
573 done
574done
023e1e0a 575OVS_VSWITCHD_STOP
7257b535 576AT_CLEANUP
848e8809
EJ
577
578AT_SETUP([ofproto-dpif - exit])
579OVS_VSWITCHD_START
f7b8e494 580ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
581AT_DATA([flows.txt], [dnl
582in_port=1 actions=output:10,exit,output:11
583in_port=2 actions=output:12,resubmit:1,output:12
584in_port=3 actions=output:13,resubmit:2,output:14
585])
586AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 587AT_CHECK([ovs-appctl 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,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
588AT_CHECK([tail -1 stdout], [0],
589 [Datapath actions: 10
590])
a61680c6 591AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),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,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
592AT_CHECK([tail -1 stdout], [0],
593 [Datapath actions: 12,10
594])
a61680c6 595AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),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,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
596AT_CHECK([tail -1 stdout], [0],
597 [Datapath actions: 13,12,10
598])
599OVS_VSWITCHD_STOP
600AT_CLEANUP
c06bba01
JP
601
602
603AT_SETUP([ofproto-dpif - mirroring, select_all])
9da5b93a
BP
604OVS_VSWITCHD_START(
605 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
606 add-port br0 p2 -- set Interface p2 type=dummy --\
607 add-port br0 p3 -- set Interface p3 type=dummy --\
608 set Bridge br0 mirrors=@m --\
609 --id=@p3 get Port p3 --\
610 --id=@m create Mirror name=mymirror \
9da5b93a 611 select_all=true output_port=@p3], [<0>
c06bba01
JP
612])
613
c06bba01
JP
614AT_DATA([flows.txt], [dnl
615in_port=1 actions=output:2
616in_port=2 actions=output:1
617])
618AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
619
247527db 620flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
621AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
622AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 623 [Datapath actions: 2,3
c06bba01
JP
624])
625
247527db 626flow="in_port(2),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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
627AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
628AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 629 [Datapath actions: 1,3
c06bba01
JP
630])
631
632OVS_VSWITCHD_STOP
633AT_CLEANUP
634
635
636AT_SETUP([ofproto-dpif - mirroring, select_src])
9da5b93a
BP
637OVS_VSWITCHD_START(
638 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
639 add-port br0 p2 -- set Interface p2 type=dummy --\
640 add-port br0 p3 -- set Interface p3 type=dummy --\
641 set Bridge br0 mirrors=@m --\
642 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
643 --id=@m create Mirror name=mymirror \
9da5b93a 644 select_src_port=@p1 output_port=@p3], [<0>
c06bba01
JP
645])
646
c06bba01
JP
647AT_DATA([flows.txt], [dnl
648in_port=1 actions=output:2
649in_port=2 actions=output:1
650])
651AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
652
247527db 653flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
654AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
655AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 656 [Datapath actions: 2,3
c06bba01
JP
657])
658
247527db 659flow="in_port(2),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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
660AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
661AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 662 [Datapath actions: 1
c06bba01
JP
663])
664OVS_VSWITCHD_STOP
665AT_CLEANUP
666
33158a18
JP
667AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
668OVS_VSWITCHD_START(
669 [add-port br0 p1 -- set Interface p1 type=dummy --\
670 add-port br0 p2 -- set Interface p2 type=dummy --\
671 set Bridge br0 mirrors=@m --\
672 --id=@p2 get Port p2 --\
673 --id=@m create Mirror name=mymirror \
674 select_all=true output_port=@p2], [<0>
675])
676
33158a18
JP
677AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
678
679# "in_port" defaults to OFPP_NONE if it's not specified.
680flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
681AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
682AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 683 [Datapath actions: 1,2
33158a18
JP
684])
685
686OVS_VSWITCHD_STOP
687AT_CLEANUP
688
c06bba01
JP
689
690AT_SETUP([ofproto-dpif - mirroring, select_dst])
9da5b93a 691OVS_VSWITCHD_START(
e44768b7
JP
692 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 --\
693 add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 --\
694 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 --\
c06bba01
JP
695 set Bridge br0 mirrors=@m --\
696 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
697 --id=@m create Mirror name=mymirror \
9da5b93a 698 select_dst_port=@p2 output_port=@p3], [<0>
c06bba01
JP
699])
700
c06bba01
JP
701AT_DATA([flows.txt], [dnl
702in_port=1 actions=output:2
703in_port=2 actions=output:1
704])
705AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
706
247527db 707flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
708AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
709AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 710 [Datapath actions: 2,3
c06bba01
JP
711])
712
247527db 713flow="in_port(2),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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
714AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
715AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 716 [Datapath actions: 1
c06bba01
JP
717])
718
719OVS_VSWITCHD_STOP
720AT_CLEANUP
721
722
723AT_SETUP([ofproto-dpif - mirroring, select_vlan])
9da5b93a
BP
724OVS_VSWITCHD_START(
725 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
726 add-port br0 p2 -- set Interface p2 type=dummy --\
727 add-port br0 p3 -- set Interface p3 type=dummy --\
728 set Bridge br0 mirrors=@m --\
729 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
730 --id=@m create Mirror name=mymirror \
9da5b93a 731 select_all=true select_vlan=11 output_port=@p3], [<0>
c06bba01
JP
732])
733
c06bba01
JP
734AT_DATA([flows.txt], [dnl
735in_port=1, actions=output:2
736])
737AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
738
247527db 739flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
740AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
741AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 742 [Datapath actions: 2
c06bba01
JP
743])
744
247527db 745flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
c06bba01
JP
746AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
747AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 748 [Datapath actions: 2
c06bba01
JP
749])
750
247527db 751flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
c06bba01
JP
752AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
753AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 754 [Datapath actions: 2,3
c06bba01
JP
755])
756
757OVS_VSWITCHD_STOP
758AT_CLEANUP
759
760
761AT_SETUP([ofproto-dpif - mirroring, output_port])
9da5b93a
BP
762OVS_VSWITCHD_START(
763 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
764 add-port br0 p2 -- set Interface p2 type=dummy --\
765 add-port br0 p3 -- set Interface p3 type=dummy --\
766 set Bridge br0 mirrors=@m --\
767 --id=@p3 get Port p3 --\
768 --id=@m create Mirror name=mymirror \
9da5b93a 769 select_all=true output_port=@p3], [<0>
c06bba01
JP
770])
771
c06bba01
JP
772AT_DATA([flows.txt], [dnl
773in_port=1 actions=mod_vlan_vid:17,output:2
774in_port=2 actions=output:1
775])
776AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
777
247527db 778flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
779AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
780AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 781 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
782])
783
247527db 784flow="in_port(2),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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
785AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
786AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 787 [Datapath actions: 1,3
c06bba01
JP
788])
789
790OVS_VSWITCHD_STOP
791AT_CLEANUP
792
c06bba01 793AT_SETUP([ofproto-dpif - mirroring, output_vlan])
9da5b93a
BP
794OVS_VSWITCHD_START(
795 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
796 add-port br0 p2 -- set Interface p2 type=dummy --\
797 set Bridge br0 mirrors=@m --\
798 --id=@m create Mirror name=mymirror \
9da5b93a 799 select_all=true output_vlan=12], [<0>
c06bba01
JP
800])
801
c06bba01
JP
802AT_DATA([flows.txt], [dnl
803in_port=1 actions=output:2
804in_port=2 actions=mod_vlan_vid:17,output:1
805])
806AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
807
247527db 808flow="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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
809AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
810actual=`tail -1 stdout | sed 's/Datapath actions: //'`
811
e44768b7 812expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 813AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 814mv stdout expout
247527db 815AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 816
247527db 817flow="in_port(2),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,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
818AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
819actual=`tail -1 stdout | sed 's/Datapath actions: //'`
820
e44768b7 821expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 822AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 823mv stdout expout
247527db 824AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
825
826OVS_VSWITCHD_STOP
827AT_CLEANUP
b44a10b7
BP
828
829m4_define([OFPROTO_TRACE],
830 [flow="$2"
831 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
832 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
833 expected="$4"
834 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
835 [0], [stdout])
836 mv stdout expout
837 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
838 [0], [expout])])
839
840AT_SETUP([ofproto-dpif - MAC learning])
841OVS_VSWITCHD_START(
842 [set bridge br0 fail-mode=standalone -- \
843 add-port br0 p1 -- set Interface p1 type=dummy -- \
844 add-port br0 p2 -- set Interface p2 type=dummy -- \
845 add-port br0 p3 -- set Interface p3 type=dummy])
846
b44a10b7
BP
847arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
848
849# Trace an ARP packet arriving on p3, to create a MAC learning entry.
850OFPROTO_TRACE(
851 [br0],
247527db 852 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 853 [-generate],
e44768b7 854 [1,2,100])
b44a10b7
BP
855
856# Check for the MAC learning entry.
83664f72 857AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 858 port VLAN MAC Age
247527db 859 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
860])
861
862# Trace a packet arrival destined for the learned MAC.
863# (This will also learn a MAC.)
864OFPROTO_TRACE(
865 [br0],
247527db 866 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 867 [-generate],
247527db 868 [3])
b44a10b7
BP
869
870# Check for both MAC learning entries.
83664f72 871AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 872 port VLAN MAC Age
247527db
BP
873 3 0 50:54:00:00:00:05 ?
874 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
875])
876
877# Trace a packet arrival that updates the first learned MAC entry.
878OFPROTO_TRACE(
879 [br0],
247527db 880 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 881 [-generate],
e44768b7 882 [1,3,100])
b44a10b7
BP
883
884# Check that the MAC learning entry was updated.
83664f72 885AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 886 port VLAN MAC Age
247527db
BP
887 1 0 50:54:00:00:00:06 ?
888 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
889])
890
891# Add another bridge.
892AT_CHECK(
893 [ovs-vsctl \
894 -- add-br br1 \
895 -- set bridge br1 datapath-type=dummy \
896 -- add-port br1 p4 -- set interface p4 type=dummy \
897 -- add-port br1 p5 -- set interface p5 type=dummy])
b44a10b7
BP
898
899# Trace some packet arrivals in br1 to create MAC learning entries there too.
900OFPROTO_TRACE(
901 [br1],
247527db 902 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 903 [-generate],
e44768b7 904 [5,101])
b44a10b7
BP
905OFPROTO_TRACE(
906 [br1],
247527db 907 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 908 [-generate],
e44768b7 909 [4,101])
b44a10b7
BP
910
911# Check that the MAC learning entries were added.
83664f72 912AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 913 port VLAN MAC Age
247527db
BP
914 4 0 50:54:00:00:00:06 ?
915 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
916])
917
918# Delete port p1 and see that its MAC learning entry disappeared, and
919# that the MAC learning entry for the same MAC was also deleted from br1.
920AT_CHECK([ovs-vsctl del-port p1])
83664f72 921AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 922 port VLAN MAC Age
247527db 923 2 0 50:54:00:00:00:05 ?
b44a10b7 924])
83664f72 925AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 926 port VLAN MAC Age
247527db 927 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
928])
929
930OVS_VSWITCHD_STOP
931AT_CLEANUP
17f7f7e0
BP
932
933dnl Test that basic NetFlow reports flow statistics correctly:
934dnl - The initial packet of a flow are correctly accounted.
935dnl - Later packets within a flow are correctly accounted.
936dnl - Flow actions changing (in this case, due to MAC learning)
937dnl cause a record to be sent.
938AT_SETUP([ofproto-dpif - NetFlow flow expiration])
939
37b694e7
BP
940AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
941NETFLOW_PORT=`cat stdout`
17f7f7e0
BP
942
943OVS_VSWITCHD_START(
944 [set Bridge br0 fail-mode=standalone -- \
945 add-port br0 p1 -- set Interface p1 type=dummy -- \
946 add-port br0 p2 -- set Interface p2 type=dummy -- \
947 set Bridge br0 netflow=@nf -- \
948 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
949 engine_id=1 engine_type=2 active_timeout=30 \
950 add-id-to-interface=false], [<0>
951])
952
0bb1b692 953ON_EXIT([kill `cat test-netflow.pid`])
4ba3d447
BP
954AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
955AT_CAPTURE_FILE([netflow.log])
17f7f7e0
BP
956
957for delay in 1000 30000; do
958 ovs-appctl netdev-dummy/receive p1 'in_port(2),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,ttl=64,frag=no),icmp(type=8,code=0)'
959 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
960
961 ovs-appctl time/warp $delay
962done
963
d441e1b3 964sleep 1
17f7f7e0
BP
965OVS_VSWITCHD_STOP
966ovs-appctl -t test-netflow exit
967
968AT_CHECK([[sed -e 's/, uptime [0-9]*//
969s/, now [0-9.]*//
65ba8e9c 970s/time \([0-9]*\)\.\.\.\1$/time <moment>/
17f7f7e0 971s/time [0-9]*\.\.\.[0-9]*/time <range>/
52440c19
BP
972' netflow.log | sort]], [0],
973 [
974header: v5, seq 0, engine 2,1
17f7f7e0 975header: v5, seq 1, engine 2,1
52440c19
BP
976seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
977seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
978seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
17f7f7e0
BP
979])
980AT_CLEANUP
981
982dnl Test that basic NetFlow reports active expirations correctly.
983AT_SETUP([ofproto-dpif - NetFlow active expiration])
984
37b694e7
BP
985AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
986NETFLOW_PORT=`cat stdout`
17f7f7e0
BP
987
988OVS_VSWITCHD_START(
989 [set Bridge br0 fail-mode=standalone -- \
990 add-port br0 p1 -- set Interface p1 type=dummy -- \
991 add-port br0 p2 -- set Interface p2 type=dummy -- \
992 set Bridge br0 netflow=@nf -- \
993 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
994 engine_id=1 engine_type=2 active_timeout=10 \
995 add-id-to-interface=false], [<0>
996])
997
0bb1b692 998ON_EXIT([kill `test-netflow.pid`])
77a922c7 999AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
17f7f7e0 1000
f802352d 1001AT_CHECK([ovs-appctl time/stop])
17f7f7e0
BP
1002n=1
1003while test $n -le 60; do
1004 n=`expr $n + 1`
1005
1006 ovs-appctl netdev-dummy/receive p1 'in_port(2),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=6,tos=0,ttl=64,frag=no),tcp(src=1234,dst=80)'
1007 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
1008
1009 ovs-appctl time/warp 1000
1010done
1011
1012ovs-appctl time/warp 10000
1013
d441e1b3 1014sleep 1
17f7f7e0
BP
1015OVS_VSWITCHD_STOP
1016ovs-appctl -t test-netflow exit
1017
1018# Count the number of reported packets:
1019# - From source to destination before MAC learning kicks in (just one).
1020# - From source to destination after that.
1021# - From destination to source.
1022n_learn=0
1023n_in=0
1024n_out=0
1025n_other=0
1026n_recs=0
1027none=0
1028while read line; do
1029 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1030 case $pkts in
1031 [[0-9]]*) ;;
1032 *) continue ;;
1033 esac
1034
1035 case $line in
52440c19 1036 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1037 counter=n_learn
1038 ;;
52440c19 1039 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1040 counter=n_in
1041 ;;
52440c19 1042 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
17f7f7e0
BP
1043 counter=n_out
1044 ;;
1045 *)
1046 counter=n_other
1047 ;;
1048 esac
1049 eval $counter=\`expr \$$counter + \$pkts\`
1050 n_recs=`expr $n_recs + 1`
1051done < netflow.log
1052
1053# There should be exactly 1 MAC learning packet,
1054# exactly 59 other packets in that direction,
1055# and exactly 60 packets in the other direction.
1056AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1057])
1058
1059# There should be 1 expiration for MAC learning,
1060# at least 5 active and a final expiration in one direction,
1061# and at least 5 active and a final expiration in the other direction.
1062echo $n_recs
1063AT_CHECK([test $n_recs -ge 13])
1064
1065AT_CLEANUP
f27f2134
BP
1066
1067AT_SETUP([idle_age and hard_age increase over time])
1068OVS_VSWITCHD_START
1069
1070# get_ages DURATION HARD IDLE
1071#
1072# Fetch the flow duration, hard age, and idle age into the variables
1073# whose names are given as arguments. Rounds DURATION down to the
1074# nearest integer. If hard_age doesn't appear in the output, sets
1075# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1076# to 0.
1077get_ages () {
1078 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1079
1080 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1081 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1082 AS_VAR_COPY([$1], [duration])
1083
1084 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1085 if test X"$hard" = X; then
1086 hard=none
1087 else
1088 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1089 fi
1090 AS_VAR_COPY([$2], [hard])
1091
1092 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1093 if test X"$idle" = X; then
1094 idle=0
1095 else
1096 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1097 fi
1098 AS_VAR_COPY([$3], [idle])
1099}
1100
1101# Add a flow and get its initial hard and idle age.
1102AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1103get_ages duration1 hard1 idle1
1104
1105# Warp time forward by 10 seconds, then modify the flow's actions.
1106ovs-appctl time/warp 10000
1107get_ages duration2 hard2 idle2
1108AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1109
1110# Warp time forward by 10 seconds.
1111ovs-appctl time/warp 10000
1112get_ages duration3 hard3 idle3
1113
1114# Warp time forward 10 more seconds, then pass some packets through the flow,
1115# then warp forward a few more times because idle times are only updated
1116# occasionally.
1117ovs-appctl time/warp 10000
1118ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
1119ovs-appctl time/warp 1000
1120ovs-appctl time/warp 1000
1121ovs-appctl time/warp 1000
1122get_ages duration4 hard4 idle4
1123
1124printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1125printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1126printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1127
1128# Duration should increase steadily over time.
1129AT_CHECK([test $duration1 -lt $duration2])
1130AT_CHECK([test $duration2 -lt $duration3])
1131AT_CHECK([test $duration3 -lt $duration4])
1132
1133# Hard age should be "none" initially because it's the same as flow_duration,
1134# then it should increase.
1135AT_CHECK([test $hard1 = none])
1136AT_CHECK([test $hard2 = none])
1137AT_CHECK([test $hard3 != none])
1138AT_CHECK([test $hard4 != none])
1139AT_CHECK([test $hard3 -lt $hard4])
1140
1141# Idle age should increase from 1 to 2 to 3, then decrease.
1142AT_CHECK([test $idle1 -lt $idle2])
1143AT_CHECK([test $idle2 -lt $idle3])
1144AT_CHECK([test $idle3 -gt $idle4])
1145
1146# Check some invariant relationships.
1147AT_CHECK([test $duration1 = $idle1])
1148AT_CHECK([test $duration2 = $idle2])
1149AT_CHECK([test $duration3 = $idle3])
1150AT_CHECK([test $idle3 -gt $hard3])
1151AT_CHECK([test $idle4 -lt $hard4])
1152AT_CHECK([test $hard4 -lt $duration4])
1153
1154OVS_VSWITCHD_STOP
1155AT_CLEANUP
0e553d9c
BP
1156
1157AT_SETUP([ofproto-dpif - fin_timeout])
1158OVS_VSWITCHD_START
1159AT_DATA([flows.txt], [dnl
1160in_port=1 actions=output:2
1161in_port=2 actions=mod_vlan_vid:17,output:1
1162])
1163AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1164AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1165[NXST_FLOW reply:
1166 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1167])
1168# Check that a TCP SYN packet does not change the timeout. (Because
1169# flow stats updates are mainly what implements the fin_timeout
1170# feature, we warp forward a couple of times to ensure that flow stats
1171# run before re-checking the flow table.)
1172AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1173])
1174AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1175warped
1176])
1177AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1178[NXST_FLOW reply:
1179 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1180])
1181# Check that a TCP FIN packet does change the timeout.
1182AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1183])
1184AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1185warped
1186])
1187AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1188[NXST_FLOW reply:
1189 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1190])
1191OVS_VSWITCHD_STOP
1192AT_CLEANUP
27022416
JP
1193
1194AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1195OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1196ADD_OF_PORTS([br0], [1], [2])
1197ADD_OF_PORTS([br1], [3])
1198
1199AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1200dummy@br0
1201dummy@br1
1202])
1203OVS_VSWITCHD_STOP
1204AT_CLEANUP
1205
1206AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1207OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1208ADD_OF_PORTS([br0], [1], [2])
1209ADD_OF_PORTS([br1], [3])
1210
1211AT_CHECK([ovs-appctl dpif/show], [0], [dnl
acf60855 1212br0 (dummy@ovs-dummy):
27022416
JP
1213 lookups: hit:0 missed:0 lost:0
1214 flows: 0
1215 br0 65534/100: (dummy)
1216 p1 1/1: (dummy)
1217 p2 2/2: (dummy)
acf60855 1218br1 (dummy@ovs-dummy):
27022416
JP
1219 lookups: hit:0 missed:0 lost:0
1220 flows: 0
1221 br1 65534/101: (dummy)
1222 p3 3/3: (dummy)
1223])
1224
1225AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
acf60855 1226br0 (dummy@ovs-dummy):
27022416
JP
1227 lookups: hit:0 missed:0 lost:0
1228 flows: 0
1229 br0 65534/100: (dummy)
1230 p1 1/1: (dummy)
1231 p2 2/2: (dummy)
1232])
1233OVS_VSWITCHD_STOP
1234AT_CLEANUP
1235
1236AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1237OVS_VSWITCHD_START([add-br br1 -- \
1238 set bridge br1 datapath-type=dummy fail-mode=secure])
1239ADD_OF_PORTS([br0], [1], [2])
1240ADD_OF_PORTS([br1], [3])
1241
1242AT_CHECK([ovs-appctl netdev-dummy/receive p1 '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,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1243])
1244AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1245])
1246AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1247])
1248
1249AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1250in_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,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:drop
1251in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0), packets:0, bytes:0, used:0.0s, actions:drop
1252])
1253
1254AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1255in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:drop
1256])
1257
1258OVS_VSWITCHD_STOP
1259AT_CLEANUP
1260
1261AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1262OVS_VSWITCHD_START([add-br br1 -- \
1263 set bridge br1 datapath-type=dummy fail-mode=secure])
1264ADD_OF_PORTS([br0], [1], [2])
1265ADD_OF_PORTS([br1], [3])
1266
1267AT_CHECK([ovs-appctl netdev-dummy/receive p1 '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,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1268])
1269AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1270])
1271AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1272])
1273
1274AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1275in_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,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:drop
1276in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0), packets:0, bytes:0, used:0.0s, actions:drop
1277])
1278
1279AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1280in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:drop
1281])
1282
1283AT_CHECK([ovs-appctl dpif/del-flows br0])
1284AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1285])
1286
1287AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1288in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:drop
1289])
1290
1291OVS_VSWITCHD_STOP
1292AT_CLEANUP