1 AT_BANNER([ofproto-dpif])
3 # Strips out uninteresting parts of flow output, as well as parts
4 # that vary from one run to another (e.g., timing and bond actions).
5 m4_define([STRIP_USED], [[sed '
6 s/used:[0-9]*\.[0-9]*/used:0.0/
8 m4_define([STRIP_XOUT], [[sed '
9 s/used:[0-9]*\.[0-9]*/used:0.0/
10 s/actions:.*/actions: <del>/
11 s/packets:[0-9]*/packets:0/
12 s/bytes:[0-9]*/bytes:0/
15 AT_SETUP([ofproto-dpif - dummy interface])
16 # Create br0 with interfaces p1 and p7
17 # and br1 with interfaces p2 and p8
18 # with p1 and p2 connected via unix domain socket
20 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
21 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
23 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
24 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
26 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
27 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
29 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
30 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
32 ovs-appctl time/warp 5000
33 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),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)'])
34 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
35 ovs-appctl time/warp 100
36 sleep 1 # wait for forwarders process packets
38 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
39 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
40 skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
43 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
44 skb_priority(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
45 skb_priority(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
50 AT_SETUP([ofproto-dpif - resubmit])
52 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
53 [16], [17], [18], [19], [20], [21])
54 AT_DATA([flows.txt], [dnl
55 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
56 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
57 table=0 in_port=3 priority=2000 icmp actions=output(20)
58 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
59 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
60 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
62 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
63 AT_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])
64 AT_CHECK([tail -1 stdout], [0],
65 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
70 AT_SETUP([ofproto-dpif - goto table])
72 ADD_OF_PORTS([br0], [1], [10], [11])
73 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
74 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
75 echo "table=64 actions=output(11)" >> flows.txt
76 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
77 AT_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])
78 AT_CHECK([tail -1 stdout], [0],
79 [Datapath actions: 10,11
84 AT_SETUP([ofproto-dpif - write actions])
86 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
87 AT_DATA([flows.txt], [dnl
88 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
89 table=1 ip actions=write_actions(output(13)),goto_table(2)
90 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
92 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
93 AT_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])
94 AT_CHECK([tail -1 stdout], [0],
95 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
100 AT_SETUP([ofproto-dpif - clear actions])
102 ADD_OF_PORTS([br0], [1], [10], [11], [12])
103 AT_DATA([flows.txt], [dnl
104 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
105 table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
107 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
108 AT_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])
109 AT_CHECK([tail -1 stdout], [0],
110 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
115 AT_SETUP([ofproto-dpif - group chaining not supported])
117 ADD_OF_PORTS([br0], [1], [10], [11])
118 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,group:123,bucket=output:11'],
120 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
121 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
126 AT_SETUP([ofproto-dpif - all group in action list])
128 ADD_OF_PORTS([br0], [1], [10], [11])
129 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
130 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
131 AT_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])
132 AT_CHECK([tail -1 stdout], [0],
133 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
138 AT_SETUP([ofproto-dpif - indirect group in action list])
140 ADD_OF_PORTS([br0], [1], [10])
141 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
142 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
143 AT_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])
144 AT_CHECK([tail -1 stdout], [0],
145 [Datapath actions: 10
150 AT_SETUP([ofproto-dpif - all group in action set])
152 ADD_OF_PORTS([br0], [1], [10], [11])
153 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
154 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
155 AT_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])
156 AT_CHECK([tail -1 stdout], [0],
157 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
162 AT_SETUP([ofproto-dpif - indirect group in action set])
164 ADD_OF_PORTS([br0], [1], [10])
165 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
166 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
167 AT_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])
168 AT_CHECK([tail -1 stdout], [0],
169 [Datapath actions: 10
174 AT_SETUP([ofproto-dpif - select group])
176 ADD_OF_PORTS([br0], [1], [10], [11])
177 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
178 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
180 # Try a bunch of different flows and make sure that they get distributed
182 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
183 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,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])
184 tail -1 stdout >> results
186 sort results | uniq -c
187 AT_CHECK([sort results | uniq], [0],
188 [Datapath actions: 10
194 AT_SETUP([ofproto-dpif - select group with watch port])
196 ADD_OF_PORTS([br0], [1], [10], [11])
197 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
198 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
199 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
200 AT_CHECK([tail -1 stdout], [0],
201 [Datapath actions: 11
206 AT_SETUP([ofproto-dpif - select group with weight])
208 ADD_OF_PORTS([br0], [1], [10], [11], [12])
209 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
210 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
211 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
212 AT_CHECK([tail -1 stdout], [0],
213 [Datapath actions: 11
218 AT_SETUP([ofproto-dpif - fast failover group])
220 ADD_OF_PORTS([br0], [1], [10], [11])
221 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
222 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
223 AT_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])
224 AT_CHECK([tail -1 stdout], [0],
225 [Datapath actions: drop
230 AT_SETUP([ofproto-dpif - registers])
232 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
233 AT_DATA([flows.txt], [dnl
234 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
235 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
236 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
237 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
239 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
240 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
241 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
242 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
243 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
244 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
245 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
246 in_port=9,reg0=0xdeadbeef actions=output:20
247 in_port=10,reg1=0xdeadbeef actions=output:21
248 in_port=11,reg2=0xeef22dea actions=output:22
250 dnl Sanilty check all registers
251 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
252 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
253 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
254 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
257 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
258 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
259 AT_CHECK([tail -1 stdout], [0],
260 [Datapath actions: 20,21,22,33
265 AT_SETUP([ofproto-dpif - push-pop])
267 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
268 AT_DATA([flows.txt], [dnl
269 in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
270 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
271 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
272 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
273 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
276 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
277 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
278 AT_CHECK([tail -1 stdout], [0],
279 [Datapath actions: 33,22,21,20
284 AT_SETUP([ofproto-dpif - output])
286 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
287 AT_DATA([flows.txt], [dnl
288 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
289 in_port=2 actions=output:9
290 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
291 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
292 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
293 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
294 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
295 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
298 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
299 AT_CHECK([tail -1 stdout], [0],
300 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
305 AT_SETUP([ofproto-dpif - dec_ttl])
307 ADD_OF_PORTS([br0], [1], [2], [3], [4])
308 AT_DATA([flows.txt], [dnl
309 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
310 table=1 in_port=1 action=dec_ttl,output:3
312 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
313 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
314 AT_CHECK([tail -3 stdout], [0],
315 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
316 This flow is handled by the userspace slow path because it:
317 - Sends "packet-in" messages to the OpenFlow controller.
319 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
320 AT_CHECK([tail -1 stdout], [0],
321 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
323 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
324 AT_CHECK([tail -1 stdout], [0],
325 [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
328 AT_CAPTURE_FILE([ofctl_monitor.log])
329 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
330 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
331 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
332 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
333 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
334 ip,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_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
340 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
342 ADD_OF_PORTS([br0], [1], [2])
344 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
346 # "in_port" defaults to OFPP_NONE if it's not specified.
347 flow="icmp,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,icmp_type=8,icmp_code=0"
348 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
349 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
358 AT_SETUP([ofproto-dpif - DSCP])
359 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
360 ADD_OF_PORTS([br0], [9])
361 AT_DATA([flows.txt], [dnl
362 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
364 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
365 AT_CHECK([ovs-vsctl -- \
366 set Port p1 qos=@newqos --\
367 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
368 --id=@q1 create Queue dscp=1 --\
369 --id=@q2 create Queue dscp=2], [0], [ignore])
370 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
371 AT_CHECK([tail -1 stdout], [0],
372 [Datapath actions: dnl
374 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
375 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
377 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
378 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
379 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
385 AT_SETUP([ofproto-dpif - output/flood flags])
387 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
389 AT_DATA([flows.txt], [dnl
390 in_port=local actions=local,flood
391 in_port=1 actions=flood
392 in_port=2 actions=all
393 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
394 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
396 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
397 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
398 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
400 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
401 AT_CHECK([tail -1 stdout \
402 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
410 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
411 AT_CHECK([tail -1 stdout \
412 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
420 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
421 AT_CHECK([tail -1 stdout \
422 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
431 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
432 AT_CHECK([tail -1 stdout], [0],
433 [Datapath actions: 100,1,2,4,6,7
436 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
437 AT_CHECK([tail -1 stdout], [0],
438 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
443 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTROLLER])
444 OVS_VSWITCHD_START([dnl
445 add-port br0 p1 -- set Interface p1 type=dummy
447 ON_EXIT([kill `cat ovs-ofctl.pid`])
449 AT_CAPTURE_FILE([ofctl_monitor.log])
451 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
454 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),tcp_flags(0x010)'
457 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
458 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
459 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
460 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_flags=0x010 tcp_csum:0
462 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
463 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_flags=0x010 tcp_csum:0
465 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
466 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_flags=0x010 tcp_csum:0
469 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
470 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
477 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
478 OVS_VSWITCHD_START([dnl
479 add-port br0 p1 -- set Interface p1 type=dummy
481 ON_EXIT([kill `cat ovs-ofctl.pid`])
483 AT_CAPTURE_FILE([ofctl_monitor.log])
484 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
486 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
489 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),tcp_flags(0x010)'
492 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
493 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
494 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
495 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_flags=0x010 tcp_csum:0
497 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
498 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_flags=0x010 tcp_csum:0
500 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
501 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_flags=0x010 tcp_csum:0
504 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
505 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
506 n_packets=3, n_bytes=180, actions=goto_table:1
507 OFPST_FLOW reply (OF1.2):
513 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
514 OVS_VSWITCHD_START([dnl
515 add-port br0 p1 -- set Interface p1 type=dummy
517 ON_EXIT([kill `cat ovs-ofctl.pid`])
519 AT_CAPTURE_FILE([ofctl_monitor.log])
520 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
522 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
525 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),tcp_flags(0x010)'
528 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
529 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
532 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
533 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
534 n_packets=3, n_bytes=180, actions=resubmit(1,1)
535 OFPST_FLOW reply (OF1.2):
541 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
542 OVS_VSWITCHD_START([dnl
543 add-port br0 p1 -- set Interface p1 type=dummy
545 ON_EXIT([kill `cat ovs-ofctl.pid`])
547 AT_CAPTURE_FILE([ofctl_monitor.log])
548 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
549 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
551 dnl Miss table 0, Hit table 1
552 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
555 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=9),tcp_flags(0x010)'
557 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
559 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
560 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
561 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=9,tcp_flags=0x010 tcp_csum:0
563 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
564 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=9,tcp_flags=0x010 tcp_csum:0
566 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
567 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=9,tcp_flags=0x010 tcp_csum:0
570 dnl Hit table 0, Miss all other tables, sent to controller
571 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
574 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),tcp_flags(0x010)'
576 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
578 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
579 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
580 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_flags=0x010 tcp_csum:0
582 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
583 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_flags=0x010 tcp_csum:0
585 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
586 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_flags=0x010 tcp_csum:0
589 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
590 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
591 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
592 OFPST_FLOW reply (OF1.2):
598 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
599 OVS_VSWITCHD_START([dnl
600 add-port br0 p1 -- set Interface p1 type=dummy
602 ON_EXIT([kill `cat ovs-ofctl.pid`])
604 AT_CAPTURE_FILE([ofctl_monitor.log])
605 AT_DATA([flows.txt], [dnl
606 table=0 actions=goto_table(1)
607 table=2 dl_src=10:11:11:11:11:11 actions=controller
609 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
610 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
612 dnl Hit table 0, Miss table 1, Hit table 2
613 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
616 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=9),tcp_flags(0x010)'
618 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
620 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
621 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
622 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=9,tcp_flags=0x010 tcp_csum:0
624 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
625 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=9,tcp_flags=0x010 tcp_csum:0
627 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
628 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=9,tcp_flags=0x010 tcp_csum:0
631 dnl Hit table 1, Miss all other tables, sent to controller
632 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
635 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),tcp_flags(0x010)'
637 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
639 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
640 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
641 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_flags=0x010 tcp_csum:0
643 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
644 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_flags=0x010 tcp_csum:0
646 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
647 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_flags=0x010 tcp_csum:0
650 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
651 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
652 n_packets=6, n_bytes=360, actions=goto_table:1
653 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
654 OFPST_FLOW reply (OF1.2):
660 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
661 OVS_VSWITCHD_START([dnl
662 add-port br0 p1 -- set Interface p1 type=dummy
664 ON_EXIT([kill `cat ovs-ofctl.pid`])
666 AT_CAPTURE_FILE([ofctl_monitor.log])
667 AT_DATA([flows.txt], [dnl
668 table=0 actions=resubmit(1,1)
669 table=2 dl_src=10:11:11:11:11:11 actions=controller
671 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
672 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
674 dnl Hit table 0, Miss table 1, Dropped
675 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
678 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=9),tcp_flags(0x010)'
680 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
682 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
685 dnl Hit table 1, Dropped
686 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
689 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),tcp_flags(0x010)'
691 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
693 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
696 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
697 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
698 n_packets=6, n_bytes=360, actions=resubmit(1,1)
699 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
700 OFPST_FLOW reply (OF1.2):
706 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
707 OVS_VSWITCHD_START([dnl
708 add-port br0 p1 -- set Interface p1 type=dummy
710 ON_EXIT([kill `cat ovs-ofctl.pid`])
712 AT_CAPTURE_FILE([ofctl_monitor.log])
713 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
715 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
717 dnl Test that missed packets are droped
719 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),tcp_flags(0x010)'
721 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
723 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
726 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
727 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
734 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
735 OVS_VSWITCHD_START([dnl
736 add-port br0 p1 -- set Interface p1 type=dummy
738 ON_EXIT([kill `cat ovs-ofctl.pid`])
740 AT_CAPTURE_FILE([ofctl_monitor.log])
741 AT_CHECK([ovs-ofctl del-flows br0])
742 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
743 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
745 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
747 dnl Test that missed packets are droped
749 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),tcp_flags(0x010)'
751 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
753 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
756 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
757 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
758 n_packets=3, n_bytes=180, actions=goto_table:1
759 OFPST_FLOW reply (OF1.2):
765 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
766 OVS_VSWITCHD_START([dnl
767 add-port br0 p1 -- set Interface p1 type=dummy
769 ON_EXIT([kill `cat ovs-ofctl.pid`])
771 AT_CAPTURE_FILE([ofctl_monitor.log])
772 AT_CHECK([ovs-ofctl del-flows br0])
773 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
774 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
776 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
778 dnl Test that missed packets are droped
780 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),tcp_flags(0x010)'
782 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
784 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
787 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
788 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
789 n_packets=3, n_bytes=180, actions=resubmit(1,1)
790 OFPST_FLOW reply (OF1.2):
796 AT_SETUP([ofproto-dpif - controller])
797 OVS_VSWITCHD_START([dnl
798 add-port br0 p1 -- set Interface p1 type=dummy
800 ON_EXIT([kill `cat ovs-ofctl.pid`])
802 AT_CAPTURE_FILE([ofctl_monitor.log])
803 AT_DATA([flows.txt], [dnl
804 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
805 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
806 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
808 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
809 cookie=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)
810 cookie=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)
811 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
812 cookie=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)
813 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
814 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
815 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
816 cookie=0xa dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
817 cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
818 cookie=0xa dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
819 cookie=0xa dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
820 cookie=0xa dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,controller
821 cookie=0xa dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),controller
822 cookie=0xa dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),controller
823 cookie=0xa dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,controller
824 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
825 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
826 cookie=0xc dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:1000->OXM_OF_MPLS_LABEL[[]],load:7->OXM_OF_MPLS_TC[[]],controller
827 cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],controller
829 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
832 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
835 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),tcp_flags(0x010)'
837 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
838 ovs-appctl -t ovs-ofctl exit
840 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
841 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
842 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_flags=0x010 tcp_csum:0
844 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
845 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_flags=0x010 tcp_csum:0
847 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
848 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_flags=0x010 tcp_csum:0
851 dnl Singleton controller action.
852 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
855 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),tcp_flags(0x002)'
857 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
858 ovs-appctl -t ovs-ofctl exit
860 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
861 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
862 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_flags=0x002 tcp_csum:0
864 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
865 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_flags=0x002 tcp_csum:0
867 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
868 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_flags=0x002 tcp_csum:0
871 dnl Modified controller action.
872 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
875 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),tcp_flags(0x001)'
877 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
878 ovs-appctl -t ovs-ofctl exit
880 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
881 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
882 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_flags=0x001 tcp_csum:0
884 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
885 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_flags=0x001 tcp_csum:0
887 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
888 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_flags=0x001 tcp_csum:0
891 dnl Modified VLAN controller action.
892 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
895 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
897 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
898 ovs-appctl -t ovs-ofctl exit
900 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
901 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
902 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
904 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
905 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
907 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
908 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
911 dnl Modified MPLS controller action.
912 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
915 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
917 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
918 ovs-appctl -t ovs-ofctl exit
920 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
921 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
922 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
924 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
925 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
927 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
928 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
931 dnl Modified MPLS controller action.
932 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
935 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
937 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
938 ovs-appctl -t ovs-ofctl exit
940 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
941 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
942 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
944 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
945 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
947 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
948 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
951 dnl Modified MPLS controller action.
952 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
954 dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
957 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
960 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
961 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
962 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
963 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
965 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
966 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
968 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
969 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
972 dnl Modified MPLS controller action.
973 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
976 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:44,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no))'
978 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
979 ovs-appctl -t ovs-ofctl exit
981 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
982 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
983 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
985 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
986 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
988 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
989 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
992 dnl Modified MPLS controller action.
993 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
996 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:45,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
998 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
999 ovs-appctl -t ovs-ofctl exit
1001 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1002 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1003 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1005 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1006 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1008 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1009 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1012 dnl Modified MPLS controller action.
1013 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1016 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:46,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1018 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1019 ovs-appctl -t ovs-ofctl exit
1021 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1022 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1023 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1025 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1026 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1028 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1029 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1032 dnl Modified MPLS controller action.
1033 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1036 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:47,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1038 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1039 ovs-appctl -t ovs-ofctl exit
1041 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1042 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1043 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1045 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1046 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1048 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1049 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1052 dnl Modified MPLS controller action.
1053 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1056 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:48,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1058 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1059 ovs-appctl -t ovs-ofctl exit
1061 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1062 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1063 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1065 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1066 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1068 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1069 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1072 dnl Modified MPLS actions.
1073 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1076 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)'
1078 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1079 ovs-appctl -t ovs-ofctl exit
1081 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1082 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1083 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1085 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1086 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1088 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1089 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1092 dnl Modified MPLS ipv6 controller action.
1093 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1096 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=70:77:77:77:77:77,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)'
1098 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1099 ovs-appctl -t ovs-ofctl exit
1101 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1102 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1103 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1105 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1106 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1108 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1109 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1113 dnl Modified MPLS pop action.
1114 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1115 dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
1116 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1118 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1121 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1124 # ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=60:66:66:66:66:66,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=100,bos=1)'
1126 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1127 ovs-appctl -t ovs-ofctl exit
1129 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1130 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1131 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,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=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1133 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1134 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,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=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1136 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1137 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,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=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1141 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1144 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),tcp_flags(0x001)'
1146 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1147 ovs-appctl -t ovs-ofctl exit
1149 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1150 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1151 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_flags=0x001 tcp_csum:0
1153 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1154 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_flags=0x001 tcp_csum:0
1156 NXT_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)
1157 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_flags=0x001 tcp_csum:0
1159 NXT_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)
1160 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_flags=0x001 tcp_csum:0
1162 NXT_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)
1163 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_flags=0x001 tcp_csum:1a03
1165 NXT_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)
1166 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_flags=0x001 tcp_csum:3205
1168 NXT_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)
1169 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_flags=0x001 tcp_csum:31b8
1171 NXT_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)
1172 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_flags=0x001 tcp_csum:316d
1174 NXT_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)
1175 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_flags=0x001 tcp_csum:316d
1179 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1182 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'
1184 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1185 ovs-appctl -t ovs-ofctl exit
1187 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1188 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1189 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
1191 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1192 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
1194 NXT_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)
1195 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
1197 NXT_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)
1198 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
1200 NXT_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)
1201 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
1203 NXT_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)
1204 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
1206 NXT_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)
1207 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
1209 NXT_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)
1210 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
1212 NXT_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)
1213 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
1216 dnl Modified ARP controller action.
1217 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1220 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,dst=ff:ff:ff:ff:ff:ff),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)'
1223 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1224 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1225 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1226 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1227 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1228 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1229 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1230 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1231 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1232 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1233 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1234 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1235 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1236 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1237 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1238 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1239 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1240 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1241 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1242 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1243 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1246 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1249 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1252 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 24 00 00 00 00 00 84 00 00 C0 A8 00 01 C0 A8 00 02 04 58 08 af 00 00 00 00 d9 d7 91 57 01 00 00 34 cf 28 ec 4e 00 01 40 00 00 0a ff ff b7 53 24 19 00 05 00 08 7f 00 00 01 00 05 00 08 c0 a8 02 07 00 0c 00 06 00 05 00 00 80 00 00 04 c0 00 00 04'
1255 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1256 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1257 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1258 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1259 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1261 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1262 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1264 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=102 (unbuffered)
1265 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1267 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=102 (unbuffered)
1268 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1270 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=102 (unbuffered)
1271 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1273 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1274 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1276 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1277 sctp,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=2223 sctp_csum:7f12662e
1279 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1280 sctp,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 sctp_csum:a7e86f67
1282 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1283 sctp,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 sctp_csum:a7e86f67
1286 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1287 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1288 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1289 cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1290 cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1291 cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1292 cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1293 cookie=0x7, table=5, n_packets=3, n_bytes=218, 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)
1294 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1295 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1296 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
1297 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1298 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1299 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1300 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,CONTROLLER:65535
1301 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),CONTROLLER:65535
1302 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),CONTROLLER:65535
1303 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
1304 cookie=0xa, n_packets=3, n_bytes=180, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
1305 cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1306 cookie=0xc, n_packets=3, n_bytes=180, dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:0x3e8->OXM_OF_MPLS_LABEL[[]],load:0x7->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1307 cookie=0xd, n_packets=3, n_bytes=180, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],CONTROLLER:65535
1308 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1309 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1317 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1318 OVS_VSWITCHD_START([dnl
1319 add-port br0 p1 -- set Interface p1 type=dummy
1321 ON_EXIT([kill `cat ovs-ofctl.pid`])
1323 AT_CAPTURE_FILE([ofctl_monitor.log])
1324 # A table-miss flow has priority 0 and no match
1325 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1327 dnl Singleton controller action.
1328 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1331 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),tcp_flags(0x002)'
1333 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1334 ovs-appctl -t ovs-ofctl exit
1336 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1337 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1338 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_flags=0x002 tcp_csum:0
1340 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1341 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_flags=0x002 tcp_csum:0
1343 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1344 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_flags=0x002 tcp_csum:0
1347 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1349 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1350 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1358 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1359 OVS_VSWITCHD_START([dnl
1360 add-port br0 p1 -- set Interface p1 type=dummy
1362 ON_EXIT([kill `cat ovs-ofctl.pid`])
1364 AT_CAPTURE_FILE([ofctl_monitor.log])
1365 # A table-miss flow has priority 0 and no match
1366 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1368 dnl Singleton controller action.
1369 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1372 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),tcp_flags(0x002)'
1374 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1375 ovs-appctl -t ovs-ofctl exit
1377 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1379 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1380 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1381 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_flags=0x002 tcp_csum:0
1383 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1384 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_flags=0x002 tcp_csum:0
1386 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1387 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_flags=0x002 tcp_csum:0
1390 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1392 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1393 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1394 OFPST_FLOW reply (OF1.3):
1400 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1402 ADD_OF_PORTS([br0], [1], [2])
1404 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1405 ovs-ofctl add-flow br0 'in_port=1,arp actions=load:2->OXM_OF_ARP_OP[[]],2,load:0xc0a88001->OXM_OF_ARP_SPA[[]],2,load:0x404444444441->OXM_OF_ARP_THA[[]],2'
1407 # Input some packets that should follow the arp modification slow-path.
1409 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,dst=ff:ff:ff:ff:ff:ff),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)'
1411 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1413 # Check the packets that were output.
1414 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1415 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1416 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1417 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1418 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1419 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1420 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1421 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1422 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1423 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1429 AT_SETUP([ofproto-dpif - VLAN handling])
1431 [set Bridge br0 fail-mode=standalone -- \
1432 add-port br0 p1 trunks=10,12 -- \
1433 add-port br0 p2 tag=10 -- \
1434 add-port br0 p3 tag=12 \
1435 other-config:priority-tags=true -- \
1436 add-port br0 p4 tag=12 -- \
1437 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1438 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1439 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1440 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1441 other-config:priority-tags=true -- \
1442 set Interface p1 type=dummy -- \
1443 set Interface p2 type=dummy -- \
1444 set Interface p3 type=dummy -- \
1445 set Interface p4 type=dummy -- \
1446 set Interface p5 type=dummy -- \
1447 set Interface p6 type=dummy -- \
1448 set Interface p7 type=dummy -- \
1449 set Interface p8 type=dummy --])
1451 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1452 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1458 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1459 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1462 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1463 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1467 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1468 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1471 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1472 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1473 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1474 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1475 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1482 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1483 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1484 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1491 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1492 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1493 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1500 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1501 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1502 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1503 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1504 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1507 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1508 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1509 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1510 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1511 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1512 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1513 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1516 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1517 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1518 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1519 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1520 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1521 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1522 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1525 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1526 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1527 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1528 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1529 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1530 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1531 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1534 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1535 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1543 if test $vlan = none; then
1544 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1546 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))"
1549 echo "----------------------------------------------------------------------"
1550 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1552 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1553 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1555 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1557 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1563 AT_SETUP([ofproto-dpif - MPLS handling])
1564 OVS_VSWITCHD_START([dnl
1565 add-port br0 p1 -- set Interface p1 type=dummy
1567 ON_EXIT([kill `cat ovs-ofctl.pid`])
1569 AT_CAPTURE_FILE([ofctl_monitor.log])
1570 AT_DATA([flows.txt], [dnl
1571 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1572 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1573 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1575 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1577 dnl In this test, we push an MPLS tag to an ethernet packet.
1578 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1581 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:00,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)'
1584 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1586 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1587 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1588 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1589 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1590 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1591 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1592 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1594 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1595 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1596 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1597 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1598 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1599 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1601 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1602 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1603 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1604 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1605 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1606 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1609 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1610 dnl copied exactly, except for the BOS bit.
1611 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1614 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:01,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1617 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1619 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1620 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1621 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1622 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1623 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1624 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1625 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1627 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1628 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1629 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1630 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1631 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1632 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1634 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1635 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1636 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1637 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1638 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1639 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1642 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1643 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1644 dnl to the MPLS ethertype of the MPLS push action which differs to that
1645 dnl of the input packet.
1646 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1649 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:02,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1652 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1654 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1655 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1656 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1657 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1658 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1659 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1660 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1662 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1663 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1664 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1665 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1666 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1667 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1669 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1670 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1671 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1672 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1673 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1674 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1680 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1681 OVS_VSWITCHD_START([dnl
1682 add-port br0 p1 -- set Interface p1 type=dummy
1684 ON_EXIT([kill `cat ovs-ofctl.pid`])
1686 AT_CAPTURE_FILE([ofctl_monitor.log])
1687 AT_DATA([flows.txt], [dnl
1688 cookie=0xa dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
1689 cookie=0xa dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
1690 cookie=0xa dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
1691 cookie=0xa dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
1692 cookie=0xa dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1693 cookie=0xa dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1694 cookie=0xa dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1695 cookie=0xa dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1696 cookie=0xa dl_src=40:44:44:44:54:58,vlan_tci=0x1000/0x1000 actions=load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1697 cookie=0xa dl_src=40:44:44:44:54:59,vlan_tci=0x1000/0x1000 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],set_vlan_pcp:1,load:99->OXM_OF_VLAN_VID[[]],controller
1699 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1701 dnl Modified MPLS controller action.
1702 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1703 dnl both of these in the final flow
1704 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1707 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:50,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)'
1710 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1712 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1713 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1714 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1715 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1716 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1717 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1718 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1719 00000040 00 00 00 00
1721 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1722 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1723 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1724 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1725 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1726 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1727 00000040 00 00 00 00
1729 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1730 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1731 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1732 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1733 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1734 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1735 00000040 00 00 00 00
1738 dnl Modified MPLS controller action.
1739 dnl In this test, the input packet in vlan-tagged, which should be stripped
1740 dnl before we push the MPLS and VLAN tags.
1741 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1744 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:51,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1746 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1747 ovs-appctl -t ovs-ofctl exit
1749 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1750 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1751 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1752 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1753 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1754 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1755 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1757 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1758 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1759 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1760 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1761 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1762 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1764 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1765 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1766 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1767 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1768 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1769 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1772 dnl Modified MPLS controller action.
1773 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1774 dnl both of these in the final flow
1775 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1778 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:52,dst=52: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)'
1780 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1782 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1783 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1784 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1785 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1786 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1787 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1788 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1789 00000040 00 00 00 00
1791 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1792 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1793 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1794 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1795 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1796 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1797 00000040 00 00 00 00
1799 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1800 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1801 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1802 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1803 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1804 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1805 00000040 00 00 00 00
1808 dnl Modified MPLS controller action.
1809 dnl In this test, the input packet in vlan-tagged, which should be stripped
1810 dnl before we push the MPLS and VLAN tags.
1811 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1814 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:53,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1816 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1817 ovs-appctl -t ovs-ofctl exit
1819 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1820 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1821 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1822 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1823 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1824 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1825 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1827 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1828 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1829 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1830 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1831 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1832 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1834 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1835 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1836 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1837 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1838 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1839 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1842 dnl Modified MPLS controller action.
1843 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1844 dnl actions are reordered, so we see both of these in the final flow.
1845 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1848 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:54,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)'
1850 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1851 ovs-appctl -t ovs-ofctl exit
1853 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1854 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1855 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1856 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1857 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1858 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1859 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1860 00000040 00 00 00 00
1862 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1863 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1864 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1865 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1866 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1867 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1868 00000040 00 00 00 00
1870 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1871 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1872 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1873 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1874 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1875 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1876 00000040 00 00 00 00
1879 dnl Modified MPLS controller action.
1880 dnl In this test, the input packet in vlan-tagged, which should be stripped
1881 dnl before we push the MPLS and VLAN tags.
1882 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1885 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:55,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1887 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1888 ovs-appctl -t ovs-ofctl exit
1890 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1891 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1892 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1893 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1894 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1895 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1896 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1898 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1899 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1900 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1901 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1902 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1903 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1905 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1906 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1907 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1908 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1909 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1910 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1913 dnl Modified MPLS controller action.
1914 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1915 dnl actions are reordered, so we see both of these in the final flow.
1916 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1919 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:56,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)'
1921 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1922 ovs-appctl -t ovs-ofctl exit
1924 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1925 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1926 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1927 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1928 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1929 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1930 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1931 00000040 00 00 00 00
1933 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1934 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1935 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1936 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1937 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1938 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1939 00000040 00 00 00 00
1941 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1942 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1943 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1944 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1945 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1946 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1947 00000040 00 00 00 00
1950 dnl Modified MPLS controller action.
1951 dnl In this test, the input packet in vlan-tagged, which should be stripped
1952 dnl before we push the MPLS and VLAN tags.
1953 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1956 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:57,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1958 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1959 ovs-appctl -t ovs-ofctl exit
1961 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1962 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1963 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1964 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1965 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1966 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1967 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1969 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1970 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1971 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1972 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1973 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1974 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1976 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1977 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1978 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1979 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1980 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1981 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1984 dnl Modified MPLS controller action.
1985 dnl In this test, the input packet in vlan-tagged, which should be stripped
1986 dnl before we push the MPLS and VLAN tags.
1987 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1990 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:58,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
1992 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1993 ovs-appctl -t ovs-ofctl exit
1995 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1996 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1997 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1998 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
1999 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2000 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2001 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2003 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2004 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2005 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2006 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2007 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2008 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2010 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2011 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2012 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2013 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2014 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2015 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2018 dnl Modified MPLS controller action.
2019 dnl In this test, the input packet in vlan-tagged, which should be modified
2020 dnl before we push MPLS and VLAN tags.
2021 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2024 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:59,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
2026 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2027 ovs-appctl -t ovs-ofctl exit
2029 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2030 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2031 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2032 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2033 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2034 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2035 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2037 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2038 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2039 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2040 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2041 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2042 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2044 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2045 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2046 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2047 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2048 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2049 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2052 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2053 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2054 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2055 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2056 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2057 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2058 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2059 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2060 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2061 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2062 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2063 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
2064 OFPST_FLOW reply (OF1.2):
2070 AT_SETUP([ofproto-dpif - fragment handling])
2072 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2073 AT_DATA([flows.txt], [dnl
2074 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2075 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2076 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2077 priority=50 tcp ip_frag=no actions=output:4
2078 priority=50 tcp ip_frag=first actions=output:5
2079 priority=50 tcp ip_frag=later actions=output:6
2081 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2083 base_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"
2084 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2085 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2086 later_flow="$base_flow,frag=later)"
2088 # mode no first later
2091 'drop 1 drop drop' \
2100 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2101 for type in no first later; do
2102 eval flow=\$${type}_flow exp_output=\$$type
2103 printf "\n%s\n" "----$mode $type-----"
2104 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2106 if test $mode = drop && test $type != no; then
2107 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2109 echo "Datapath actions: $exp_output" >> expout
2110 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2116 AT_SETUP([ofproto-dpif - exit])
2118 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2119 AT_DATA([flows.txt], [dnl
2120 in_port=1 actions=output:10,exit,output:11
2121 in_port=2 actions=output:12,resubmit:1,output:12
2122 in_port=3 actions=output:13,resubmit:2,output:14
2124 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2125 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
2126 AT_CHECK([tail -1 stdout], [0],
2127 [Datapath actions: 10
2129 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
2130 AT_CHECK([tail -1 stdout], [0],
2131 [Datapath actions: 12,10
2133 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
2134 AT_CHECK([tail -1 stdout], [0],
2135 [Datapath actions: 13,12,10
2141 AT_SETUP([ofproto-dpif - mirroring, select_all])
2143 ADD_OF_PORTS([br0], 1, 2, 3)
2145 set Bridge br0 mirrors=@m --\
2146 --id=@p3 get Port p3 --\
2147 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2149 AT_DATA([flows.txt], [dnl
2150 in_port=1 actions=output:2
2151 in_port=2 actions=output:1
2153 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2155 flow="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)"
2156 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2157 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2158 [Datapath actions: 2,3
2161 flow="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)"
2162 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2163 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2164 [Datapath actions: 1,3
2171 AT_SETUP([ofproto-dpif - mirroring, select_src])
2173 ADD_OF_PORTS([br0], 1, 2, 3)
2175 set Bridge br0 mirrors=@m --\
2176 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2177 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2179 AT_DATA([flows.txt], [dnl
2180 in_port=1 actions=output:2
2181 in_port=2 actions=output:1
2183 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2185 flow="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)"
2186 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2187 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2188 [Datapath actions: 2,3
2191 flow="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)"
2192 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2193 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2194 [Datapath actions: 1
2199 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2201 ADD_OF_PORTS([br0], 1, 2)
2203 set Bridge br0 mirrors=@m --\
2204 --id=@p2 get Port p2 --\
2205 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2207 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2209 # "in_port" defaults to OFPP_NONE if it's not specified.
2210 flow="icmp,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_ttl=128,icmp_type=8,icmp_code=0"
2211 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2212 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2213 [Datapath actions: 1,2
2220 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2222 ADD_OF_PORTS([br0], 1, 2, 3)
2224 set Bridge br0 mirrors=@m --\
2225 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2226 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2228 AT_DATA([flows.txt], [dnl
2229 in_port=1 actions=output:2
2230 in_port=2 actions=output:1
2232 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2234 flow="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)"
2235 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2236 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2237 [Datapath actions: 2,3
2240 flow="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)"
2241 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2242 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2243 [Datapath actions: 1
2250 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2252 ADD_OF_PORTS([br0], 1, 2, 3)
2254 set Bridge br0 mirrors=@m --\
2255 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2256 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2258 AT_DATA([flows.txt], [dnl
2259 in_port=1, actions=output:2
2261 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2263 flow="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)"
2264 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2265 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2266 [Datapath actions: 2
2269 flow="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))"
2270 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2271 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2272 [Datapath actions: 2
2275 flow="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))"
2276 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2277 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2278 [Datapath actions: 2,3
2285 AT_SETUP([ofproto-dpif - mirroring, output_port])
2287 ADD_OF_PORTS([br0], 1, 2, 3)
2289 set Bridge br0 mirrors=@m --\
2290 --id=@p3 get Port p3 --\
2291 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2293 AT_DATA([flows.txt], [dnl
2294 in_port=1 actions=mod_vlan_vid:17,output:2
2295 in_port=2 actions=output:1
2297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2299 flow="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)"
2300 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2301 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2302 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2305 flow="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)"
2306 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2307 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2308 [Datapath actions: 1,3
2314 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2316 ADD_OF_PORTS([br0], 1, 2)
2318 set Bridge br0 mirrors=@m --\
2319 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2321 AT_DATA([flows.txt], [dnl
2322 in_port=1 actions=output:2
2323 in_port=2 actions=mod_vlan_vid:17,output:1
2325 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2327 flow="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)"
2328 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2329 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2331 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2332 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2334 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2336 flow="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)"
2337 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2338 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2340 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2341 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2343 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2348 # Two testcases below are for the ofproto/trace command
2349 # The first one tests all correct syntax:
2350 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2351 # ofproto/trace br_name br_flow [-generate|packet]
2352 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2353 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2354 ADD_OF_PORTS([br0], 1, 2, 3)
2356 AT_DATA([flows.txt], [dnl
2357 in_port=1 actions=output:2
2358 in_port=2 actions=output:1
2360 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2362 odp_flow="in_port(p1)"
2364 # Test command: ofproto/trace odp_flow with in_port as a name.
2365 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2366 AT_CHECK([tail -1 stdout], [0], [dnl
2370 odp_flow="in_port(1)"
2371 # Test command: ofproto/trace odp_flow
2372 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2373 AT_CHECK([tail -1 stdout], [0], [dnl
2377 # Test command: ofproto/trace dp_name odp_flow
2378 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2379 AT_CHECK([tail -1 stdout], [0], [dnl
2382 # Test commmand: ofproto/trace br_name br_flow
2383 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2384 AT_CHECK([tail -1 stdout], [0], [dnl
2388 # Delete the inserted flows
2389 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2390 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2392 # This section beflow tests the [-generate] option
2393 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2394 br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
2396 # Test command: ofproto/trace odp_flow
2397 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2398 # Check for no MAC learning entry
2399 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2403 # Test command: ofproto/trace br_name br_flow
2404 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2405 # Check for no MAC learning entry
2406 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2410 # Test command: ofproto/trace odp_flow -generate
2411 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2412 # Check for the MAC learning entry
2413 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2415 3 0 50:54:00:00:00:05 ?
2418 # Test command: ofproto/trace dp_name odp_flow -generate
2419 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2420 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2421 -generate], [0], [stdout])
2422 # Check for both MAC learning entries
2423 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2425 3 0 50:54:00:00:00:05 ?
2426 1 0 50:54:00:00:00:06 ?
2429 # Test command: ofproto/trace br_name br_flow -generate
2430 AT_CHECK([ovs-appctl ofproto/trace br0 \
2431 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2432 -generate], [0], [stdout])
2433 # Check for both MAC learning entries.
2434 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2436 3 0 50:54:00:00:00:05 ?
2437 1 0 50:54:00:00:00:06 ?
2438 2 0 50:54:00:00:00:07 ?
2441 # This section beflow tests the [packet] option
2442 # The ovs-tcpundump of packets between port1 and port2
2443 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2444 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2446 # Construct the MAC learning table
2447 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2448 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2449 -generate], [0], [stdout])
2451 # Construct the MAC learning table
2452 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2453 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2454 -generate], [0], [stdout])
2456 # Test command: ofproto/trace odp_flow packet
2457 AT_CHECK([ovs-appctl ofproto/trace \
2458 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2459 AT_CHECK([tail -1 stdout], [0], [dnl
2462 AT_CHECK([head -n 2 stdout], [0], [dnl
2464 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2467 # Test command: ofproto/trace dp_name odp_flow packet
2468 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2469 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2470 AT_CHECK([tail -1 stdout], [0], [dnl
2473 AT_CHECK([head -n 2 stdout], [0], [dnl
2475 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2478 # Test command: ofproto/trace br_name br_flow packet
2479 AT_CHECK([ovs-appctl ofproto/trace br0 \
2480 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2481 AT_CHECK([tail -1 stdout], [0], [dnl
2484 AT_CHECK([head -n 2 stdout], [0], [dnl
2486 Flow: pkt_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2492 # The second test tests the corner cases
2493 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2495 ADD_OF_PORTS([br0], 1, 2)
2498 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2499 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2501 generate="-generate"
2502 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2504 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2510 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2512 AT_CHECK([tail -2 stderr], [0], [dnl
2513 Cannot find the datapath
2514 ovs-appctl: ovs-vswitchd: server returned an error
2517 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2523 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2525 AT_CHECK([tail -2 stderr], [0], [dnl
2526 Cannot find the datapath
2527 ovs-appctl: ovs-vswitchd: server returned an error
2530 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2536 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2538 AT_CHECK([tail -2 stderr], [0], [dnl
2539 Cannot find the datapath
2540 ovs-appctl: ovs-vswitchd: server returned an error
2543 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2549 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2551 AT_CHECK([tail -2 stderr], [0], [dnl
2552 Cannot find the datapath
2553 ovs-appctl: ovs-vswitchd: server returned an error
2556 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2562 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2564 AT_CHECK([tail -2 stderr], [0], [dnl
2566 ovs-appctl: ovs-vswitchd: server returned an error
2569 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2575 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2577 AT_CHECK([tail -2 stderr], [0], [dnl
2578 Must specify bridge name
2579 ovs-appctl: ovs-vswitchd: server returned an error
2582 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2583 AT_CHECK([ovs-appctl ofproto/trace \
2584 ovs-dummy "$odp_flow" garbage_option],
2585 [2], [stdout],[stderr])
2586 AT_CHECK([tail -2 stderr], [0], [dnl
2587 Trailing garbage in packet data
2588 ovs-appctl: ovs-vswitchd: server returned an error
2591 # Test incorrect command: ofproto/trace with 4 arguments
2592 AT_CHECK([ovs-appctl ofproto/trace \
2593 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2594 AT_CHECK([tail -2 stderr], [0], [dnl
2595 "ofproto/trace" command takes at most 3 arguments
2596 ovs-appctl: ovs-vswitchd: server returned an error
2599 # Test incorrect command: ofproto/trace with 0 argument
2600 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2601 AT_CHECK([tail -2 stderr], [0], [dnl
2602 "ofproto/trace" command requires at least 1 arguments
2603 ovs-appctl: ovs-vswitchd: server returned an error
2609 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2611 ADD_OF_PORTS([br0], 1, 2, 3)
2613 AT_DATA([flows.txt], [dnl
2614 in_port=1 actions=output:2
2615 in_port=2 actions=output:1
2617 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2619 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2620 AT_CHECK([tail -1 stdout], [0], [dnl
2621 Datapath actions: push_vlan(vid=123,pcp=0),2
2628 m4_define([OFPROTO_TRACE],
2630 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2631 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2633 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2636 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2639 AT_SETUP([ofproto-dpif - MAC learning])
2640 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2641 ADD_OF_PORTS([br0], 1, 2, 3)
2643 arp='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)'
2645 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2648 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2652 # Check for the MAC learning entry.
2653 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2655 3 0 50:54:00:00:00:05 ?
2658 # Trace a packet arrival destined for the learned MAC.
2659 # (This will also learn a MAC.)
2662 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2666 # Check for both MAC learning entries.
2667 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2669 3 0 50:54:00:00:00:05 ?
2670 1 0 50:54:00:00:00:06 ?
2673 # Trace a packet arrival that updates the first learned MAC entry.
2676 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2680 # Check that the MAC learning entry was updated.
2681 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2683 1 0 50:54:00:00:00:06 ?
2684 2 0 50:54:00:00:00:05 ?
2687 # Add another bridge.
2691 -- set bridge br1 datapath-type=dummy])
2692 ADD_OF_PORTS([br1], 4, 5)
2694 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2697 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2702 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2706 # Check that the MAC learning entries were added.
2707 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2709 4 0 50:54:00:00:00:06 ?
2710 5 0 50:54:00:00:00:07 ?
2713 # Delete port p1 and see that its MAC learning entry disappeared, and
2714 # that the MAC learning entry for the same MAC was also deleted from br1.
2715 AT_CHECK([ovs-vsctl del-port p1])
2716 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2718 2 0 50:54:00:00:00:05 ?
2720 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2722 5 0 50:54:00:00:00:07 ?
2728 AT_SETUP([ofproto-dpif - MAC table overflow])
2730 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2731 ADD_OF_PORTS([br0], 1, 2, 3)
2733 arp='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)'
2735 AT_CHECK([ovs-appctl time/stop])
2737 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2738 for i in 0 1 2 3 4 5 6 7 8 9; do
2741 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2744 ovs-appctl time/warp 1000
2747 # Check for the MAC learning entries.
2748 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2750 3 0 50:54:00:00:00:00
2751 3 0 50:54:00:00:00:01
2752 3 0 50:54:00:00:00:02
2753 3 0 50:54:00:00:00:03
2754 3 0 50:54:00:00:00:04
2755 3 0 50:54:00:00:00:05
2756 3 0 50:54:00:00:00:06
2757 3 0 50:54:00:00:00:07
2758 3 0 50:54:00:00:00:08
2759 3 0 50:54:00:00:00:09
2763 # Trace another ARP packet on another MAC.
2766 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2770 # Check that the new one chased the oldest one out of the table.
2771 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2773 3 0 50:54:00:00:00:01 ?
2774 3 0 50:54:00:00:00:02 ?
2775 3 0 50:54:00:00:00:03 ?
2776 3 0 50:54:00:00:00:04 ?
2777 3 0 50:54:00:00:00:05 ?
2778 3 0 50:54:00:00:00:06 ?
2779 3 0 50:54:00:00:00:07 ?
2780 3 0 50:54:00:00:00:08 ?
2781 3 0 50:54:00:00:00:09 ?
2782 3 0 50:54:00:00:00:10 ?
2788 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2790 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2792 # IP_VERSION_TYPE is used in AT_SETUP
2793 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2794 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2795 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2797 ON_EXIT([kill `cat test-sflow.pid`])
2798 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2799 AT_CAPTURE_FILE([sflow.log])
2800 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2801 ovs-appctl time/stop
2803 ADD_OF_PORTS([br0], 1, 2)
2805 set Interface br0 options:ifindex=1002 -- \
2806 set Interface p1 options:ifindex=1004 -- \
2807 set Interface p2 options:ifindex=1003 -- \
2808 set Bridge br0 sflow=@sf -- \
2809 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
2810 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
2812 dnl open with ARP packets to seed the bridge-learning. The output
2813 dnl ifIndex numbers should be reported predictably after that.
2814 dnl Since we set sampling=1 we should see all of these packets
2815 dnl reported. Sorting the output by data-source and seqNo makes
2816 dnl it deterministic. Ensuring that we send at least two packets
2817 dnl into each port means we get to check the seq nos are
2818 dnl incrementing correctly.
2819 dnl because packets from different ports can be handled by separate
2820 dnl threads, put some sleeps
2822 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.2,tip=192.168.0.1,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
2824 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:07,tha=00:00:00:00:00:00)'
2826 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)'
2828 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)'
2829 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(0x86dd),ipv6(src=fe80::1,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
2831 dnl sleep long enough to get more than one counter sample
2832 dnl from each datasource so we can check sequence numbers
2833 for i in `seq 1 30`; do
2834 ovs-appctl time/warp 100
2837 ovs-appctl -t test-sflow exit
2839 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
2860 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
2880 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
2900 hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
2920 hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
2940 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-67-00-00-00-00-00-0A-80-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-01-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02-00-00-00-00-00-00
2943 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
2957 in_broadcasts=4294967295
2960 in_unknownprotos=4294967295
2963 out_multicasts=4294967295
2964 out_broadcasts=4294967295
2980 in_broadcasts=4294967295
2983 in_unknownprotos=4294967295
2986 out_multicasts=4294967295
2987 out_broadcasts=4294967295
3003 in_broadcasts=4294967295
3006 in_unknownprotos=4294967295
3009 out_multicasts=4294967295
3010 out_broadcasts=4294967295
3026 in_broadcasts=4294967295
3029 in_unknownprotos=4294967295
3032 out_multicasts=4294967295
3033 out_broadcasts=4294967295
3049 in_broadcasts=4294967295
3052 in_unknownprotos=4294967295
3055 out_multicasts=4294967295
3056 out_broadcasts=4294967295
3072 in_broadcasts=4294967295
3075 in_unknownprotos=4294967295
3078 out_multicasts=4294967295
3079 out_broadcasts=4294967295
3086 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3087 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3089 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3091 # Test that basic NetFlow reports flow statistics correctly:
3092 # The initial packet of a flow are correctly accounted.
3093 # Later packets within a flow are correctly accounted.
3094 # Flow actions changing (in this case, due to MAC learning)
3095 # cause a record to be sent.
3097 # IP_VERSION_TYPE is used in AT_SETUP
3098 m4_define([CHECK_NETFLOW_EXPIRATION],
3099 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3100 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3101 ADD_OF_PORTS([br0], 1, 2)
3103 ovs-appctl time/stop
3104 ON_EXIT([kill `cat test-netflow.pid`])
3105 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3106 AT_CAPTURE_FILE([netflow.log])
3107 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3110 set Bridge br0 netflow=@nf -- \
3111 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3112 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3114 for delay in 1000 30000; do
3115 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)'
3116 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)'
3118 ovs-appctl time/warp $delay
3121 ovs-appctl time/warp 6000
3124 ovs-appctl -t test-netflow exit
3126 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3128 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3130 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3131 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3132 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3136 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3137 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3139 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3141 # Test that basic NetFlow reports active expirations correctly.
3143 # IP_VERSION_TYPE is used in AT_SETUP
3144 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3145 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3147 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3148 ADD_OF_PORTS([br0], 1, 2)
3150 ON_EXIT([kill `cat test-netflow.pid`])
3151 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3152 AT_CAPTURE_FILE([netflow.log])
3153 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3156 set Bridge br0 netflow=@nf -- \
3157 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3158 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3160 AT_CHECK([ovs-appctl time/stop])
3162 while test $n -le 60; do
3165 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)'
3166 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)'
3168 ovs-appctl time/warp 1000
3171 ovs-appctl time/warp 10000
3175 ovs-appctl -t test-netflow exit
3177 # Count the number of reported packets:
3178 # - From source to destination before MAC learning kicks in (just one).
3179 # - From source to destination after that.
3180 # - From destination to source.
3188 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3195 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3198 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3201 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3208 eval $counter=\`expr \$$counter + \$pkts\`
3209 n_recs=`expr $n_recs + 1`
3212 # There should be exactly 1 MAC learning packet,
3213 # exactly 59 other packets in that direction,
3214 # and exactly 60 packets in the other direction.
3215 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3220 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3221 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3223 AT_SETUP([ofproto-dpif - flow stats])
3225 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3226 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3228 ovs-appctl time/stop
3230 for i in `seq 1 10`; do
3231 ovs-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)'
3234 ovs-appctl time/warp 1000
3236 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3237 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3238 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3239 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3244 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3246 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3247 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3249 ovs-appctl time/stop
3251 for i in `seq 1 10`; do
3252 ovs-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)'
3255 ovs-appctl time/warp 100
3256 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3257 ovs-appctl time/warp 1000
3259 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3260 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3261 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3262 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3267 AT_SETUP([idle_age and hard_age increase over time])
3270 # get_ages DURATION HARD IDLE
3272 # Fetch the flow duration, hard age, and idle age into the variables
3273 # whose names are given as arguments. Rounds DURATION down to the
3274 # nearest integer. If hard_age doesn't appear in the output, sets
3275 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3278 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3280 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3281 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3282 AS_VAR_COPY([$1], [duration])
3284 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3285 if test X"$hard" = X; then
3288 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3290 AS_VAR_COPY([$2], [hard])
3292 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3293 if test X"$idle" = X; then
3296 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3298 AS_VAR_COPY([$3], [idle])
3301 # Add a flow and get its initial hard and idle age.
3302 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3303 get_ages duration1 hard1 idle1
3305 ovs-appctl time/stop
3306 # Warp time forward by 10 seconds, then modify the flow's actions.
3307 ovs-appctl time/warp 10000
3308 get_ages duration2 hard2 idle2
3309 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3311 # Warp time forward by 10 seconds.
3312 ovs-appctl time/warp 10000
3313 get_ages duration3 hard3 idle3
3315 # Warp time forward 10 more seconds, then pass some packets through the flow,
3316 # then warp forward a few more times because idle times are only updated
3318 ovs-appctl time/warp 10000
3319 ovs-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)'
3320 ovs-appctl time/warp 1000
3321 ovs-appctl time/warp 1000
3322 ovs-appctl time/warp 1000
3323 get_ages duration4 hard4 idle4
3325 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3326 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3327 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3329 # Duration should increase steadily over time.
3330 AT_CHECK([test $duration1 -lt $duration2])
3331 AT_CHECK([test $duration2 -lt $duration3])
3332 AT_CHECK([test $duration3 -lt $duration4])
3334 # Hard age should be "none" initially because it's the same as flow_duration,
3335 # then it should increase.
3336 AT_CHECK([test $hard1 = none])
3337 AT_CHECK([test $hard2 = none])
3338 AT_CHECK([test $hard3 != none])
3339 AT_CHECK([test $hard4 != none])
3340 AT_CHECK([test $hard3 -lt $hard4])
3342 # Idle age should increase from 1 to 2 to 3, then decrease.
3343 AT_CHECK([test $idle1 -lt $idle2])
3344 AT_CHECK([test $idle2 -lt $idle3])
3345 AT_CHECK([test $idle3 -gt $idle4])
3347 # Check some invariant relationships.
3348 AT_CHECK([test $duration1 = $idle1])
3349 AT_CHECK([test $duration2 = $idle2])
3350 AT_CHECK([test $duration3 = $idle3])
3351 AT_CHECK([test $idle3 -gt $hard3])
3352 AT_CHECK([test $idle4 -lt $hard4])
3353 AT_CHECK([test $hard4 -lt $duration4])
3358 AT_SETUP([ofproto-dpif - fin_timeout])
3360 AT_DATA([flows.txt], [dnl
3361 in_port=1 actions=output:2
3362 in_port=2 actions=mod_vlan_vid:17,output:1
3364 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3365 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3367 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3370 ovs-appctl time/stop
3371 # Check that a TCP SYN packet does not change the timeout. (Because
3372 # flow stats updates are mainly what implements the fin_timeout
3373 # feature, we warp forward a couple of times to ensure that flow stats
3374 # run before re-checking the flow table.)
3375 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3376 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3379 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3381 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3383 # Check that a TCP FIN packet does change the timeout.
3384 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3385 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3388 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3390 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3395 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3396 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3397 ADD_OF_PORTS([br0], [1], [2])
3398 ADD_OF_PORTS([br1], [3])
3400 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3407 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3408 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3409 ADD_OF_PORTS([br0], [1], [2])
3410 ADD_OF_PORTS([br1], [3])
3412 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3413 dummy@ovs-dummy: hit:0 missed:0
3415 br0 65534/100: (dummy)
3419 br1 65534/101: (dummy)
3425 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3426 OVS_VSWITCHD_START([add-br br1 -- \
3427 set bridge br1 datapath-type=dummy fail-mode=secure])
3428 ADD_OF_PORTS([br0], [1], [2])
3429 ADD_OF_PORTS([br1], [3])
3431 AT_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)'])
3432 AT_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)'])
3433 AT_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)'])
3435 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3436 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3437 skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3440 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3441 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3444 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3445 skb_priority(0),skb_mark(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3446 skb_priority(0),skb_mark(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3449 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3450 skb_priority(0),skb_mark(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3456 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3457 OVS_VSWITCHD_START([dnl
3458 add-port br0 p1 -- set Interface p1 type=dummy
3460 ON_EXIT([kill `cat ovs-ofctl.pid`])
3462 AT_CAPTURE_FILE([ofctl_monitor.log])
3463 AT_DATA([flows.txt], [dnl
3464 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3465 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3467 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3469 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3470 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3472 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3473 dnl 60:66:66:66:66:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
3474 dnl (label 20, exp 0, [S], ttl 32)
3475 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3476 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3478 for dl_src in 00 01; do
3479 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45"])
3481 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3482 skb_priority(0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3490 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3491 OVS_VSWITCHD_START([dnl
3492 add-port br0 p1 -- set Interface p1 type=dummy
3494 ON_EXIT([kill `cat ovs-ofctl.pid`])
3496 AT_CAPTURE_FILE([ofctl_monitor.log])
3497 AT_DATA([flows.txt], [dnl
3498 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3499 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3501 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3503 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3504 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3505 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3507 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3508 dnl 60:66:66:66:66:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
3509 dnl (label 20, exp 0, ttl 32)
3510 dnl (label 20, exp 0, ttl 32)
3511 dnl (label 20, exp 0, [S], ttl 32)
3512 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3513 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3515 for dl_src in 00 01; do
3516 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45"])
3518 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3519 skb_priority(0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3526 AT_SETUP([ofproto-dpif - patch ports])
3527 OVS_VSWITCHD_START([add-br br1 \
3528 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3529 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3530 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3532 ADD_OF_PORTS([br0], [2])
3533 ADD_OF_PORTS([br1], [3])
3535 AT_CHECK([ovs-appctl time/stop])
3537 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3538 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3540 for i in $(seq 1 10); do
3541 ovs-appctl netdev-dummy/receive br0 'in_port(100),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)'
3542 if [[ $i -eq 1 ]]; then
3547 for i in $(seq 1 5); do
3548 ovs-appctl netdev-dummy/receive br1 'in_port(101),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=8,code=0)'
3549 if [[ $i -eq 1 ]]; then
3554 AT_CHECK([ovs-appctl time/warp 500], [0],
3558 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3559 dummy@ovs-dummy: hit:13 missed:2
3561 br0 65534/100: (dummy)
3563 pbr0 1/none: (patch: peer=pbr1)
3565 br1 65534/101: (dummy)
3567 pbr1 1/none: (patch: peer=pbr0)
3570 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3571 skb_priority(0),in_port(100),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:9, bytes:540, used:0.0s, actions:101,3,2
3573 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3574 skb_priority(0),in_port(101),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:4, bytes:240, used:0.0s, actions:100,2,3
3577 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3578 OFPST_PORT reply (xid=0x4): 1 ports
3579 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3580 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3583 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3584 OFPST_PORT reply (xid=0x4): 1 ports
3585 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3586 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3592 AT_SETUP([ofproto-dpif - port duration])
3593 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3594 ADD_OF_PORTS([br0], 1, 2)
3596 ovs-appctl time/stop
3597 ovs-appctl time/warp 10000
3599 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3600 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3609 dnl ----------------------------------------------------------------------
3610 AT_BANNER([ofproto-dpif -- megaflows])
3612 AT_SETUP([ofproto-dpif megaflow - port classification])
3614 ADD_OF_PORTS([br0], [1], [2])
3615 AT_DATA([flows.txt], [dnl
3616 table=0 in_port=1 actions=output(2)
3618 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3619 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3620 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3622 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3623 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
3628 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3630 ADD_OF_PORTS([br0], [1], [2])
3631 AT_DATA([flows.txt], [dnl
3632 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3634 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3635 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3636 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3638 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3639 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3640 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3645 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3647 ADD_OF_PORTS([br0], [1], [2])
3648 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
3649 AT_DATA([flows.txt], [dnl
3650 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3652 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3653 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3654 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3656 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3657 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3658 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3663 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3665 ADD_OF_PORTS([br0], [1], [2])
3666 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
3667 AT_DATA([flows.txt], [dnl
3668 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3670 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3671 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'])
3672 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
3674 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3675 skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3676 skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3681 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3683 ADD_OF_PORTS([br0], [1], [2])
3684 AT_DATA([flows.txt], [dnl
3685 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3687 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3688 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3689 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3690 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3691 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0), packets:0, bytes:0, used:0.0s, actions: <del>
3696 AT_SETUP([ofproto-dpif megaflow - normal])
3698 ADD_OF_PORTS([br0], [1], [2])
3699 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3700 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3701 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3703 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3704 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3705 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3710 AT_SETUP([ofproto-dpif megaflow - mpls])
3712 ADD_OF_PORTS([br0], [1], [2])
3713 AT_DATA([flows.txt], [dnl
3714 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3715 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3717 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3718 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
3719 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
3721 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3722 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), packets:0, bytes:0, used:never, actions: <del>
3723 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), packets:0, bytes:0, used:never, actions: <del>
3728 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3730 # IP_VERSION_TYPE is used in AT_SETUP
3731 m4_define([CHECK_MEGAFLOW_NETFLOW],
3732 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3734 ADD_OF_PORTS([br0], [1], [2])
3736 dnl NetFlow configuration disables wildcarding relevant fields
3737 ON_EXIT([kill `cat test-netflow.pid`])
3738 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3739 AT_CAPTURE_FILE([netflow.log])
3740 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3742 set Bridge br0 netflow=@nf -- \
3743 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3744 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3746 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3747 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3748 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3750 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3751 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
3752 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
3757 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3758 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3760 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3762 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3763 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3764 set interface p2 type=dummy ofport_request=2 -- \
3765 set interface p3 type=dummy ofport_request=3])
3766 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3769 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3770 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3771 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3773 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3774 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3775 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3780 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3782 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3783 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3784 set interface p2 type=dummy ofport_request=2 -- \
3785 set interface p3 type=dummy ofport_request=3])
3786 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3789 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3790 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3791 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3793 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3794 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3795 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3800 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3801 # Create bond0 on br0 with interfaces p0 and p1
3802 # and bond1 on br1 with interfaces p2 and p3
3803 # with p0 patched to p2 and p1 patched to p3.
3805 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3806 other-config:lacp-time=fast \
3807 other-config:bond-rebalance-interval=0 -- \
3808 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3809 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3811 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3812 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3813 fail-mode=secure -- \
3814 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3815 other-config:lacp-time=fast \
3816 other-config:bond-rebalance-interval=0 -- \
3817 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3818 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3820 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3822 ADD_OF_PORTS([br0], [7])
3823 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3824 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
3825 ovs-appctl time/stop
3826 ovs-appctl time/warp 5000
3827 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),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)'])
3828 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3830 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3831 skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
3832 skb_priority(0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
3837 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3839 ADD_OF_PORTS([br0], [1], [2])
3840 AT_DATA([flows.txt], [dnl
3841 table=0 in_port=1,ip actions=resubmit(90)
3842 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3844 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3845 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3846 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3848 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3849 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3850 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3855 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3857 ADD_OF_PORTS([br0], [1], [2])
3858 AT_DATA([flows.txt], [dnl
3859 table=0 in_port=1,ip actions=resubmit(,1)
3860 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3862 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3863 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3864 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
3865 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3867 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3868 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3869 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3874 AT_SETUP([ofproto-dpif megaflow - goto_table action])
3876 ADD_OF_PORTS([br0], [1], [2])
3877 AT_DATA([flows.txt], [dnl
3878 table=0 in_port=1,ip actions=goto_table(1)
3879 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3881 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3882 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3883 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3885 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3886 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3887 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3892 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3894 ADD_OF_PORTS([br0], [1], [2], [3])
3896 set Bridge br0 mirrors=@m --\
3897 --id=@p3 get Port p3 --\
3898 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3900 AT_DATA([flows.txt], [dnl
3901 in_port=1 actions=output:2
3903 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3904 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3905 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3907 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3908 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
3913 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3915 ADD_OF_PORTS([br0], [1], [2], [3])
3917 set Bridge br0 mirrors=@m --\
3918 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3919 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3921 AT_DATA([flows.txt], [dnl
3922 in_port=1 actions=output:2
3924 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3925 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=11,pcp=7),encap(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))'])
3926 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3928 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3929 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3930 skb_priority(0),in_port(1),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff)), packets:0, bytes:0, used:never, actions: <del>
3935 AT_SETUP([ofproto-dpif megaflow - move action])
3937 ADD_OF_PORTS([br0], [1], [2])
3938 AT_DATA([flows.txt], [dnl
3939 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
3940 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
3941 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
3943 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3944 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3945 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3947 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3948 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3949 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3954 AT_SETUP([ofproto-dpif megaflow - push action])
3956 ADD_OF_PORTS([br0], [1], [2])
3957 AT_DATA([flows.txt], [dnl
3958 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
3960 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3961 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3962 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3964 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3965 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3966 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
3971 AT_SETUP([ofproto-dpif megaflow - learning])
3973 ADD_OF_PORTS([br0], [1], [2])
3974 AT_DATA([flows.txt], [dnl
3975 table=0 in_port=1 actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
3977 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3978 ovs-appctl time/stop
3979 # We send each packet twice because the first packet in each flow causes the
3980 # flow table to change and thus revalidations, which (depending on timing)
3981 # can keep a megaflow from being installed. The revalidations are done by
3982 # the second iteration, allowing the flows to be installed.
3984 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
3985 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3986 ovs-appctl time/warp 100
3989 dnl The original flow is missing due to a revalidation.
3990 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3991 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
3992 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
3997 AT_SETUP([ofproto-dpif megaflow - tunnels])
3999 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4000 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4001 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4002 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4004 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4005 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4006 ofport_request=4 options:key=flow])
4007 AT_DATA([flows.txt], [dnl
4008 in_port=1,actions=output(2)
4009 in_port=3,actions=output(4)
4011 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4012 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4013 dnl will cause the packet to be dropped.
4014 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
4015 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
4016 AT_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=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
4017 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
4019 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4020 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
4021 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
4022 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
4027 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4029 ADD_OF_PORTS([br0], [1], [2])
4030 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
4031 AT_DATA([flows.txt], [dnl
4032 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4034 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4035 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
4036 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4038 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4039 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
4040 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no), packets:0, bytes:0, used:never, actions: <del>
4045 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4047 ADD_OF_PORTS([br0], [1], [2])
4048 AT_DATA([flows.txt], [dnl
4049 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4051 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4052 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
4053 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4055 dnl The megaflows do not match the same fields, since the first packet
4056 dnl is essentially a no-op. (The new destination MAC is the same as the
4057 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4058 dnl so that a packet that doesn't need its MAC address changed doesn't
4059 dnl hide one that does. Since the first entry doesn't need to change,
4060 dnl only the destination MAC address is matched (as decided by
4061 dnl ofproto-dpif). The second entry actually updates the destination
4062 dnl MAC, so both the source and destination MAC addresses are
4063 dnl un-wildcarded, since the ODP commit functions update both the source
4064 dnl and destination MAC addresses.
4065 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4066 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:2
4067 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
4072 AT_SETUP([ofproto-dpif megaflow - disabled])
4074 ADD_OF_PORTS([br0], [1], [2])
4075 AT_DATA([flows.txt], [dnl
4076 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4077 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4079 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4081 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4082 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4083 for i in 1 2 3 4; do
4084 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
4085 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4088 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4089 skb_priority(0),skb_mark(0),in_port(1/0xffff),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:3, bytes:180, used:0.0s, actions:2
4090 skb_priority(0),skb_mark(0),in_port(1/0xffff),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
4095 AT_SETUP([ofproto-dpif - datapath port number change])
4096 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4097 ADD_OF_PORTS([br0], 1)
4099 # Trace a flow that should output to p1.
4100 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4102 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4105 # Change p1's port number to 5.
4106 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4108 # Trace a flow that should output to p1 in its new location.
4109 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4111 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4116 # Tests the bundling with various bfd and cfm configurations.
4117 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4118 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4119 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4120 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4121 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4122 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4123 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4124 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4125 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4126 set Interface p0 cfm_mpid=1 -- \
4127 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4129 ovs-appctl time/stop
4130 # advance the clock to stablize everything.
4131 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4132 # cfm/show should show 'recv' fault.
4133 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4136 # bfd/show should show 'up'.
4137 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4138 Local Session State: up
4139 Remote Session State: up
4140 Local Session State: up
4141 Remote Session State: up
4143 # bond/show should show 'may-enable: true' for all slaves.
4144 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4151 # now disable the bfd on p1.
4152 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4153 # advance the clock to stablize everything.
4154 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4155 # cfm/show should show 'recv' fault.
4156 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4159 # bfd/show should show 'down'.
4160 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4161 Local Session State: down
4162 Remote Session State: down
4164 # bond/show should show 'may-enable: false' for p0.
4165 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4170 # now enable the bfd on p1 and disable bfd on p0.
4171 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4172 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4173 # advance the clock to stablize everything.
4174 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4175 # cfm/show should show 'recv' fault.
4176 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4179 # bfd/show should show 'down'.
4180 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4181 Local Session State: down
4182 Remote Session State: down
4184 # bond/show should show 'may-enable: false' for p0 and p1.
4185 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4195 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4196 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4199 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4201 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4202 monitor thread created
4204 # disable bfd on p0.
4205 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4207 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4208 monitor thread terminated
4210 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4213 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4215 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4216 monitor thread created
4218 # disable cfm on p0.
4219 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4221 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4222 monitor thread terminated
4224 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4226 # enable both bfd and cfm on p0.
4227 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4229 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4230 monitor thread created
4232 # disable bfd on p0.
4233 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4234 # check log, there should not be the log of thread terminated.
4235 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4237 # reenable bfd on p0.
4238 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4239 # check log, should still be on log of thread created.
4240 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4241 monitor thread created
4243 # disable bfd and cfm together.
4244 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4246 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4247 monitor thread terminated
4253 # this test helps avoid the deadlock between the main thread and monitor thread.
4254 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4257 for i in `seq 1 199`
4259 AT_CHECK([ovs-vsctl add-port br0 p$i -- set interface p$i type=gre options:remote_ip=1.2.3.4 options:key=$i bfd:enable=true])
4265 AT_BANNER([ofproto-dpif - flow translation resource limits])
4267 AT_SETUP([ofproto-dpif - infinite resubmit])
4269 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4270 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4272 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4274 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4277 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4280 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4282 ADD_OF_PORTS([br0], 1)
4283 (for i in `seq 1 64`; do
4285 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4287 echo "in_port=65, actions=local") > flows
4288 AT_CHECK([ovs-ofctl add-flows br0 flows])
4289 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4290 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4292 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4295 AT_SETUP([ofproto-dpif - too many output actions])
4297 ADD_OF_PORTS([br0], 1)
4298 (for i in `seq 1 12`; do
4300 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4302 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4303 AT_CHECK([ovs-ofctl add-flows br0 flows])
4304 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4305 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4308 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4310 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4313 AT_SETUP([ofproto-dpif - stack too deep])
4315 ADD_OF_PORTS([br0], 1)
4316 (for i in `seq 1 12`; do
4318 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4320 push="push:NXM_NX_REG0[[]]"
4321 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4322 AT_CHECK([ovs-ofctl add-flows br0 flows])
4323 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4324 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4326 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])