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)'
456 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
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)'
491 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
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([test `wc -l < ofctl_monitor.log` -ge 6])
558 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
560 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
561 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
562 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
564 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
565 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
567 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
568 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
571 dnl Hit table 0, Miss all other tables, sent to controller
572 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
575 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)'
577 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
578 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
580 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
581 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
582 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
584 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
585 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
587 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
588 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
591 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
592 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
593 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
594 OFPST_FLOW reply (OF1.2):
600 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
601 OVS_VSWITCHD_START([dnl
602 add-port br0 p1 -- set Interface p1 type=dummy
604 ON_EXIT([kill `cat ovs-ofctl.pid`])
606 AT_CAPTURE_FILE([ofctl_monitor.log])
607 AT_DATA([flows.txt], [dnl
608 table=0 actions=goto_table(1)
609 table=2 dl_src=10:11:11:11:11:11 actions=controller
611 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
612 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
614 dnl Hit table 0, Miss table 1, Hit table 2
615 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
618 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)'
620 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
621 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
623 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
630 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
631 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
634 dnl Hit table 1, Miss all other tables, sent to controller
635 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
638 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)'
640 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
641 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
643 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
644 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
645 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
647 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
648 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 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
651 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
654 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
655 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
656 n_packets=6, n_bytes=360, actions=goto_table:1
657 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
658 OFPST_FLOW reply (OF1.2):
664 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
665 OVS_VSWITCHD_START([dnl
666 add-port br0 p1 -- set Interface p1 type=dummy
668 ON_EXIT([kill `cat ovs-ofctl.pid`])
670 AT_CAPTURE_FILE([ofctl_monitor.log])
671 AT_DATA([flows.txt], [dnl
672 table=0 actions=resubmit(1,1)
673 table=2 dl_src=10:11:11:11:11:11 actions=controller
675 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
676 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
678 dnl Hit table 0, Miss table 1, Dropped
679 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
682 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)'
684 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
686 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
689 dnl Hit table 1, Dropped
690 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
693 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)'
695 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
697 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
700 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
701 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
702 n_packets=6, n_bytes=360, actions=resubmit(1,1)
703 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
704 OFPST_FLOW reply (OF1.2):
710 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
711 OVS_VSWITCHD_START([dnl
712 add-port br0 p1 -- set Interface p1 type=dummy
714 ON_EXIT([kill `cat ovs-ofctl.pid`])
716 AT_CAPTURE_FILE([ofctl_monitor.log])
717 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
719 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
721 dnl Test that missed packets are droped
723 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)'
725 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
727 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
730 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
731 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
738 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
739 OVS_VSWITCHD_START([dnl
740 add-port br0 p1 -- set Interface p1 type=dummy
742 ON_EXIT([kill `cat ovs-ofctl.pid`])
744 AT_CAPTURE_FILE([ofctl_monitor.log])
745 AT_CHECK([ovs-ofctl del-flows br0])
746 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
747 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
749 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
751 dnl Test that missed packets are droped
753 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)'
755 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
757 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
760 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
761 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
762 n_packets=3, n_bytes=180, actions=goto_table:1
763 OFPST_FLOW reply (OF1.2):
769 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
770 OVS_VSWITCHD_START([dnl
771 add-port br0 p1 -- set Interface p1 type=dummy
773 ON_EXIT([kill `cat ovs-ofctl.pid`])
775 AT_CAPTURE_FILE([ofctl_monitor.log])
776 AT_CHECK([ovs-ofctl del-flows br0])
777 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
778 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
780 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
782 dnl Test that missed packets are droped
784 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)'
786 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
788 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
791 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
792 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
793 n_packets=3, n_bytes=180, actions=resubmit(1,1)
794 OFPST_FLOW reply (OF1.2):
800 AT_SETUP([ofproto-dpif - controller])
801 OVS_VSWITCHD_START([dnl
802 add-port br0 p1 -- set Interface p1 type=dummy
804 ON_EXIT([kill `cat ovs-ofctl.pid`])
806 AT_CAPTURE_FILE([ofctl_monitor.log])
807 AT_DATA([flows.txt], [dnl
808 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
809 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
810 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
812 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
813 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)
814 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)
815 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
816 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)
817 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
818 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
819 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
820 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
821 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
822 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
823 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
824 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
825 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
826 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
827 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
828 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
829 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
830 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
831 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
833 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
836 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
839 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)'
841 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
842 ovs-appctl -t ovs-ofctl exit
844 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
845 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
846 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
848 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
849 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 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
852 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
855 dnl Singleton controller action.
856 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
859 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)'
861 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
862 ovs-appctl -t ovs-ofctl exit
864 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
865 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
866 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
868 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
869 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 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
872 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
875 dnl Modified controller action.
876 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
879 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)'
881 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
882 ovs-appctl -t ovs-ofctl exit
884 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
885 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
886 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
888 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
889 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 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
892 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
895 dnl Modified VLAN controller action.
896 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
899 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)'
901 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
902 ovs-appctl -t ovs-ofctl exit
904 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
905 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
906 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
908 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
909 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
912 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
915 dnl Modified MPLS controller action.
916 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
919 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)'
921 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
922 ovs-appctl -t ovs-ofctl exit
924 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
925 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
926 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
928 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
929 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
932 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
935 dnl Modified MPLS controller action.
936 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
939 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)'
941 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
942 ovs-appctl -t ovs-ofctl exit
944 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
945 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
946 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
948 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
949 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
952 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
955 dnl Modified MPLS controller action.
956 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
958 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)
961 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)'
964 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
965 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
966 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
967 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
969 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
970 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
973 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
976 dnl Modified MPLS controller action.
977 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
980 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))'
982 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
983 ovs-appctl -t ovs-ofctl exit
985 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
986 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
987 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
989 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
990 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
993 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
996 dnl Modified MPLS controller action.
997 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1000 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)'
1002 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1003 ovs-appctl -t ovs-ofctl exit
1005 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1006 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1007 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
1009 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1010 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1013 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
1016 dnl Modified MPLS controller action.
1017 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1020 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)'
1022 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1023 ovs-appctl -t ovs-ofctl exit
1025 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1026 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1027 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
1029 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1030 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1033 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
1036 dnl Modified MPLS controller action.
1037 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1040 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)'
1042 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1043 ovs-appctl -t ovs-ofctl exit
1045 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1046 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1047 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
1049 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1050 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1053 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
1056 dnl Modified MPLS controller action.
1057 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1060 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)'
1062 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1063 ovs-appctl -t ovs-ofctl exit
1065 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1066 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1067 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
1069 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1070 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1073 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
1076 dnl Modified MPLS actions.
1077 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1080 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)'
1082 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1083 ovs-appctl -t ovs-ofctl exit
1085 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1086 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1087 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
1089 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1090 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 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1093 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
1096 dnl Modified MPLS ipv6 controller action.
1097 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1100 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)'
1102 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1103 ovs-appctl -t ovs-ofctl exit
1105 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1106 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1107 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
1109 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1110 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
1112 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1113 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
1117 dnl Modified MPLS pop action.
1118 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1119 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)
1120 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1122 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1125 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'
1128 # 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)'
1130 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1131 ovs-appctl -t ovs-ofctl exit
1133 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1134 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1135 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
1137 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1138 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
1140 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1141 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
1145 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1148 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)'
1150 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1151 ovs-appctl -t ovs-ofctl exit
1153 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1154 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1155 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
1157 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1158 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
1160 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)
1161 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
1163 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)
1164 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
1166 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)
1167 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
1169 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)
1170 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
1172 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)
1173 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
1175 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)
1176 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
1178 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)
1179 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
1183 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1186 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'
1188 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1189 ovs-appctl -t ovs-ofctl exit
1191 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1192 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1193 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
1195 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1196 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
1198 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)
1199 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
1201 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)
1202 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
1204 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)
1205 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
1207 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)
1208 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
1210 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)
1211 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
1213 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)
1214 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 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)
1217 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
1220 dnl Modified ARP controller action.
1221 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1224 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)'
1227 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1228 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1229 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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=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
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.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
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=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
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=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
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.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
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=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
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=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
1244 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1245 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
1246 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1247 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
1250 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1253 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1256 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'
1259 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1260 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1261 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1262 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1263 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
1265 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1266 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
1268 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)
1269 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
1271 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)
1272 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
1274 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)
1275 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
1277 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)
1278 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
1280 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)
1281 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
1283 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)
1284 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 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)
1287 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
1290 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1291 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1292 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1293 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)
1294 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)
1295 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)
1296 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)
1297 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)
1298 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1299 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1300 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
1301 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
1302 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
1303 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
1304 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
1305 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
1306 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
1307 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
1308 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
1309 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
1310 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
1311 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
1312 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1313 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1321 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1322 OVS_VSWITCHD_START([dnl
1323 add-port br0 p1 -- set Interface p1 type=dummy
1325 ON_EXIT([kill `cat ovs-ofctl.pid`])
1327 AT_CAPTURE_FILE([ofctl_monitor.log])
1328 # A table-miss flow has priority 0 and no match
1329 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1331 dnl Singleton controller action.
1332 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1335 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)'
1337 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1338 ovs-appctl -t ovs-ofctl exit
1340 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1341 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1342 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
1344 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1345 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 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1348 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
1351 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1353 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1354 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1362 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1363 OVS_VSWITCHD_START([dnl
1364 add-port br0 p1 -- set Interface p1 type=dummy
1366 ON_EXIT([kill `cat ovs-ofctl.pid`])
1368 AT_CAPTURE_FILE([ofctl_monitor.log])
1369 # A table-miss flow has priority 0 and no match
1370 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1372 dnl Singleton controller action.
1373 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1376 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)'
1378 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1379 ovs-appctl -t ovs-ofctl exit
1381 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1383 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1384 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1385 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
1387 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1388 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 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1391 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
1394 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1396 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1397 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1398 OFPST_FLOW reply (OF1.3):
1404 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1406 ADD_OF_PORTS([br0], [1], [2])
1408 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1409 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'
1411 # Input some packets that should follow the arp modification slow-path.
1413 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)'
1415 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1417 # Check the packets that were output.
1418 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
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.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
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=00:00:00:00:00:00
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.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
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.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
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=00:00:00:00:00:00
1424 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
1425 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
1426 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
1427 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
1433 AT_SETUP([ofproto-dpif - VLAN handling])
1435 [set Bridge br0 fail-mode=standalone -- \
1436 add-port br0 p1 trunks=10,12 -- \
1437 add-port br0 p2 tag=10 -- \
1438 add-port br0 p3 tag=12 \
1439 other-config:priority-tags=true -- \
1440 add-port br0 p4 tag=12 -- \
1441 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1442 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1443 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1444 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1445 other-config:priority-tags=true -- \
1446 set Interface p1 type=dummy -- \
1447 set Interface p2 type=dummy -- \
1448 set Interface p3 type=dummy -- \
1449 set Interface p4 type=dummy -- \
1450 set Interface p5 type=dummy -- \
1451 set Interface p6 type=dummy -- \
1452 set Interface p7 type=dummy -- \
1453 set Interface p8 type=dummy --])
1455 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1456 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1462 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1463 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1466 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1467 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1471 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1472 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1475 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1476 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1477 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1478 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1479 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1486 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1487 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1488 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1495 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1496 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1497 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1504 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1505 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1506 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1507 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1508 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1511 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1512 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1513 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1514 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1515 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1516 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1517 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1520 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1521 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1522 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1523 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1524 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1525 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1526 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1529 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1530 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1531 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1532 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1533 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1534 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1535 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1538 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1539 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1547 if test $vlan = none; then
1548 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1550 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))"
1553 echo "----------------------------------------------------------------------"
1554 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1556 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1557 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1559 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1561 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1567 AT_SETUP([ofproto-dpif - MPLS handling])
1568 OVS_VSWITCHD_START([dnl
1569 add-port br0 p1 -- set Interface p1 type=dummy
1571 ON_EXIT([kill `cat ovs-ofctl.pid`])
1573 AT_CAPTURE_FILE([ofctl_monitor.log])
1574 AT_DATA([flows.txt], [dnl
1575 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1576 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1577 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1579 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1581 dnl In this test, we push an MPLS tag to an ethernet packet.
1582 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1585 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)'
1587 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1588 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1590 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1591 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1592 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
1593 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1594 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1595 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1596 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1598 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1599 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
1600 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1601 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1602 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1603 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1605 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1606 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
1607 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1608 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1609 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1610 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1613 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1614 dnl copied exactly, except for the BOS bit.
1615 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1618 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)'
1620 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1621 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1623 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1624 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1625 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
1626 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1627 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1628 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1629 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1631 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1632 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
1633 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1634 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1635 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1636 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1638 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1639 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
1640 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1641 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1642 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1643 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1646 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1647 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1648 dnl to the MPLS ethertype of the MPLS push action which differs to that
1649 dnl of the input packet.
1650 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1653 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)'
1655 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1656 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1658 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1659 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1660 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
1661 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1662 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1663 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1664 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1666 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1667 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
1668 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1669 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1670 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1671 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1673 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1674 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
1675 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1676 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1677 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1678 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1684 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1685 OVS_VSWITCHD_START([dnl
1686 add-port br0 p1 -- set Interface p1 type=dummy
1688 ON_EXIT([kill `cat ovs-ofctl.pid`])
1690 AT_CAPTURE_FILE([ofctl_monitor.log])
1691 AT_DATA([flows.txt], [dnl
1692 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
1693 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
1694 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
1695 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
1696 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
1697 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
1698 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
1699 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
1700 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
1701 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
1703 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1705 dnl Modified MPLS controller action.
1706 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1707 dnl both of these in the final flow
1708 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1711 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)'
1713 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1714 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1716 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1717 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1718 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
1719 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1720 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1721 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1722 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1723 00000040 00 00 00 00
1725 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1726 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
1727 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1728 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1729 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1730 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1731 00000040 00 00 00 00
1733 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1734 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
1735 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1736 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1737 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1738 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1739 00000040 00 00 00 00
1742 dnl Modified MPLS controller action.
1743 dnl In this test, the input packet in vlan-tagged, which should be stripped
1744 dnl before we push the MPLS and VLAN tags.
1745 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1748 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))'
1750 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1751 ovs-appctl -t ovs-ofctl exit
1753 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1754 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1755 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
1756 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1757 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1758 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1759 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1761 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1762 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
1763 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1764 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1765 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1766 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1768 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1769 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
1770 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1771 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1772 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1773 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1776 dnl Modified MPLS controller action.
1777 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1778 dnl both of these in the final flow
1779 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1782 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)'
1784 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1785 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1787 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1788 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1789 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
1790 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1791 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1792 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1793 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1794 00000040 00 00 00 00
1796 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1797 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
1798 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1799 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1800 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1801 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1802 00000040 00 00 00 00
1804 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1805 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
1806 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1807 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1808 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1809 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1810 00000040 00 00 00 00
1813 dnl Modified MPLS controller action.
1814 dnl In this test, the input packet in vlan-tagged, which should be stripped
1815 dnl before we push the MPLS and VLAN tags.
1816 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1819 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))'
1821 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1822 ovs-appctl -t ovs-ofctl exit
1824 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1825 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1826 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
1827 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1828 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1829 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1830 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1832 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1833 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
1834 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1835 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1836 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1837 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1839 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1840 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
1841 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1842 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1843 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1844 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1847 dnl Modified MPLS controller action.
1848 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1849 dnl actions are reordered, so we see both of these in the final flow.
1850 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1853 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)'
1855 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1856 ovs-appctl -t ovs-ofctl exit
1858 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1859 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1860 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
1861 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1862 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1863 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1864 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1865 00000040 00 00 00 00
1867 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1868 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
1869 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1870 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1871 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1872 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1873 00000040 00 00 00 00
1875 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1876 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
1877 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1878 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1879 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1880 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1881 00000040 00 00 00 00
1884 dnl Modified MPLS controller action.
1885 dnl In this test, the input packet in vlan-tagged, which should be stripped
1886 dnl before we push the MPLS and VLAN tags.
1887 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1890 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))'
1892 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1893 ovs-appctl -t ovs-ofctl exit
1895 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1896 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1897 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
1898 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1899 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1900 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1901 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1903 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1904 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
1905 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1906 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1907 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1908 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1910 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1911 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
1912 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1913 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1914 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1915 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1918 dnl Modified MPLS controller action.
1919 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1920 dnl actions are reordered, so we see both of these in the final flow.
1921 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1924 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)'
1926 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1927 ovs-appctl -t ovs-ofctl exit
1929 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1930 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1931 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
1932 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1933 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1934 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1935 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1936 00000040 00 00 00 00
1938 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1939 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
1940 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1941 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1942 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1943 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1944 00000040 00 00 00 00
1946 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1947 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
1948 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1949 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1950 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1951 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1952 00000040 00 00 00 00
1955 dnl Modified MPLS controller action.
1956 dnl In this test, the input packet in vlan-tagged, which should be stripped
1957 dnl before we push the MPLS and VLAN tags.
1958 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1961 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))'
1963 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1964 ovs-appctl -t ovs-ofctl exit
1966 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1967 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1968 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
1969 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1970 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1971 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1972 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1974 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1975 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
1976 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1977 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1978 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1979 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1981 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1982 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
1983 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1984 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1985 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1986 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1989 dnl Modified MPLS controller action.
1990 dnl In this test, the input packet in vlan-tagged, which should be stripped
1991 dnl before we push the MPLS and VLAN tags.
1992 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1995 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))'
1997 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1998 ovs-appctl -t ovs-ofctl exit
2000 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2001 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2002 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
2003 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2004 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2005 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2006 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2008 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2009 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
2010 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2011 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2012 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2013 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2015 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2016 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
2017 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2018 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2019 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2020 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2023 dnl Modified MPLS controller action.
2024 dnl In this test, the input packet in vlan-tagged, which should be modified
2025 dnl before we push MPLS and VLAN tags.
2026 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2029 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))'
2031 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2032 ovs-appctl -t ovs-ofctl exit
2034 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2035 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2036 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
2037 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2038 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2039 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2040 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2042 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2043 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
2044 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2045 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2046 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2047 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2049 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2050 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
2051 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2052 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2053 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2054 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2057 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2058 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2059 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
2060 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
2061 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
2062 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
2063 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
2064 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
2065 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
2066 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
2067 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
2068 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
2069 OFPST_FLOW reply (OF1.2):
2075 AT_SETUP([ofproto-dpif - fragment handling])
2077 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2078 AT_DATA([flows.txt], [dnl
2079 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2080 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2081 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2082 priority=50 tcp ip_frag=no actions=output:4
2083 priority=50 tcp ip_frag=first actions=output:5
2084 priority=50 tcp ip_frag=later actions=output:6
2086 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2088 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"
2089 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2090 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2091 later_flow="$base_flow,frag=later)"
2093 # mode no first later
2096 'drop 1 drop drop' \
2105 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2106 for type in no first later; do
2107 eval flow=\$${type}_flow exp_output=\$$type
2108 printf "\n%s\n" "----$mode $type-----"
2109 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2111 if test $mode = drop && test $type != no; then
2112 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2114 echo "Datapath actions: $exp_output" >> expout
2115 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2121 AT_SETUP([ofproto-dpif - exit])
2123 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2124 AT_DATA([flows.txt], [dnl
2125 in_port=1 actions=output:10,exit,output:11
2126 in_port=2 actions=output:12,resubmit:1,output:12
2127 in_port=3 actions=output:13,resubmit:2,output:14
2129 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2130 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])
2131 AT_CHECK([tail -1 stdout], [0],
2132 [Datapath actions: 10
2134 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])
2135 AT_CHECK([tail -1 stdout], [0],
2136 [Datapath actions: 12,10
2138 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])
2139 AT_CHECK([tail -1 stdout], [0],
2140 [Datapath actions: 13,12,10
2146 AT_SETUP([ofproto-dpif - mirroring, select_all])
2148 ADD_OF_PORTS([br0], 1, 2, 3)
2150 set Bridge br0 mirrors=@m --\
2151 --id=@p3 get Port p3 --\
2152 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2154 AT_DATA([flows.txt], [dnl
2155 in_port=1 actions=output:2
2156 in_port=2 actions=output:1
2158 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2160 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)"
2161 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2162 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2163 [Datapath actions: 2,3
2166 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)"
2167 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2168 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2169 [Datapath actions: 1,3
2176 AT_SETUP([ofproto-dpif - mirroring, select_src])
2178 ADD_OF_PORTS([br0], 1, 2, 3)
2180 set Bridge br0 mirrors=@m --\
2181 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2182 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2184 AT_DATA([flows.txt], [dnl
2185 in_port=1 actions=output:2
2186 in_port=2 actions=output:1
2188 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2190 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)"
2191 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2192 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2193 [Datapath actions: 2,3
2196 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)"
2197 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2198 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2199 [Datapath actions: 1
2204 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2206 ADD_OF_PORTS([br0], 1, 2)
2208 set Bridge br0 mirrors=@m --\
2209 --id=@p2 get Port p2 --\
2210 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2212 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2214 # "in_port" defaults to OFPP_NONE if it's not specified.
2215 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"
2216 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2217 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2218 [Datapath actions: 1,2
2225 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2227 ADD_OF_PORTS([br0], 1, 2, 3)
2229 set Bridge br0 mirrors=@m --\
2230 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2231 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2233 AT_DATA([flows.txt], [dnl
2234 in_port=1 actions=output:2
2235 in_port=2 actions=output:1
2237 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2239 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)"
2240 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2241 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2242 [Datapath actions: 2,3
2245 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)"
2246 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2247 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2248 [Datapath actions: 1
2255 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2257 ADD_OF_PORTS([br0], 1, 2, 3)
2259 set Bridge br0 mirrors=@m --\
2260 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2261 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2263 AT_DATA([flows.txt], [dnl
2264 in_port=1, actions=output:2
2266 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2268 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)"
2269 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2270 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2271 [Datapath actions: 2
2274 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))"
2275 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2276 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2277 [Datapath actions: 2
2280 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))"
2281 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2282 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2283 [Datapath actions: 2,3
2290 AT_SETUP([ofproto-dpif - mirroring, output_port])
2292 ADD_OF_PORTS([br0], 1, 2, 3)
2294 set Bridge br0 mirrors=@m --\
2295 --id=@p3 get Port p3 --\
2296 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2298 AT_DATA([flows.txt], [dnl
2299 in_port=1 actions=mod_vlan_vid:17,output:2
2300 in_port=2 actions=output:1
2302 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2304 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)"
2305 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2306 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2307 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2310 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)"
2311 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2312 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2313 [Datapath actions: 1,3
2319 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2321 ADD_OF_PORTS([br0], 1, 2)
2323 set Bridge br0 mirrors=@m --\
2324 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2326 AT_DATA([flows.txt], [dnl
2327 in_port=1 actions=output:2
2328 in_port=2 actions=mod_vlan_vid:17,output:1
2330 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2332 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)"
2333 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2334 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2336 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2337 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2339 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2341 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)"
2342 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2343 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2345 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2346 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2348 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2353 # Two testcases below are for the ofproto/trace command
2354 # The first one tests all correct syntax:
2355 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2356 # ofproto/trace br_name br_flow [-generate|packet]
2357 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2358 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2359 ADD_OF_PORTS([br0], 1, 2, 3)
2361 AT_DATA([flows.txt], [dnl
2362 in_port=1 actions=output:2
2363 in_port=2 actions=output:1
2365 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2367 odp_flow="in_port(p1)"
2369 # Test command: ofproto/trace odp_flow with in_port as a name.
2370 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2371 AT_CHECK([tail -1 stdout], [0], [dnl
2375 odp_flow="in_port(1)"
2376 # Test command: ofproto/trace odp_flow
2377 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2378 AT_CHECK([tail -1 stdout], [0], [dnl
2382 # Test command: ofproto/trace dp_name odp_flow
2383 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2384 AT_CHECK([tail -1 stdout], [0], [dnl
2387 # Test commmand: ofproto/trace br_name br_flow
2388 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2389 AT_CHECK([tail -1 stdout], [0], [dnl
2393 # Delete the inserted flows
2394 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2395 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2397 # This section beflow tests the [-generate] option
2398 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2399 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"
2401 # Test command: ofproto/trace odp_flow
2402 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2403 # Check for no MAC learning entry
2404 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2408 # Test command: ofproto/trace br_name br_flow
2409 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2410 # Check for no MAC learning entry
2411 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2415 # Test command: ofproto/trace odp_flow -generate
2416 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2417 # Check for the MAC learning entry
2418 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2420 3 0 50:54:00:00:00:05 ?
2423 # Test command: ofproto/trace dp_name odp_flow -generate
2424 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2425 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2426 -generate], [0], [stdout])
2427 # Check for both MAC learning entries
2428 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2430 3 0 50:54:00:00:00:05 ?
2431 1 0 50:54:00:00:00:06 ?
2434 # Test command: ofproto/trace br_name br_flow -generate
2435 AT_CHECK([ovs-appctl ofproto/trace br0 \
2436 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2437 -generate], [0], [stdout])
2438 # Check for both MAC learning entries.
2439 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2441 3 0 50:54:00:00:00:05 ?
2442 1 0 50:54:00:00:00:06 ?
2443 2 0 50:54:00:00:00:07 ?
2446 # This section beflow tests the [packet] option
2447 # The ovs-tcpundump of packets between port1 and port2
2448 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2449 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2451 # Construct the MAC learning table
2452 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2453 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2454 -generate], [0], [stdout])
2456 # Construct the MAC learning table
2457 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2458 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2459 -generate], [0], [stdout])
2461 # Test command: ofproto/trace odp_flow packet
2462 AT_CHECK([ovs-appctl ofproto/trace \
2463 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2464 AT_CHECK([tail -1 stdout], [0], [dnl
2467 AT_CHECK([head -n 2 stdout], [0], [dnl
2469 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
2472 # Test command: ofproto/trace dp_name odp_flow packet
2473 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2474 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2475 AT_CHECK([tail -1 stdout], [0], [dnl
2478 AT_CHECK([head -n 2 stdout], [0], [dnl
2480 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
2483 # Test command: ofproto/trace br_name br_flow packet
2484 AT_CHECK([ovs-appctl ofproto/trace br0 \
2485 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2486 AT_CHECK([tail -1 stdout], [0], [dnl
2489 AT_CHECK([head -n 2 stdout], [0], [dnl
2491 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
2497 # The second test tests the corner cases
2498 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2500 ADD_OF_PORTS([br0], 1, 2)
2503 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2504 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2506 generate="-generate"
2507 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2509 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2515 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2517 AT_CHECK([tail -2 stderr], [0], [dnl
2518 Cannot find the datapath
2519 ovs-appctl: ovs-vswitchd: server returned an error
2522 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2528 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2530 AT_CHECK([tail -2 stderr], [0], [dnl
2531 Cannot find the datapath
2532 ovs-appctl: ovs-vswitchd: server returned an error
2535 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2541 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2543 AT_CHECK([tail -2 stderr], [0], [dnl
2544 Cannot find the datapath
2545 ovs-appctl: ovs-vswitchd: server returned an error
2548 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2554 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2556 AT_CHECK([tail -2 stderr], [0], [dnl
2557 Cannot find the datapath
2558 ovs-appctl: ovs-vswitchd: server returned an error
2561 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2567 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2569 AT_CHECK([tail -2 stderr], [0], [dnl
2571 ovs-appctl: ovs-vswitchd: server returned an error
2574 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2580 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2582 AT_CHECK([tail -2 stderr], [0], [dnl
2583 Must specify bridge name
2584 ovs-appctl: ovs-vswitchd: server returned an error
2587 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2588 AT_CHECK([ovs-appctl ofproto/trace \
2589 ovs-dummy "$odp_flow" garbage_option],
2590 [2], [stdout],[stderr])
2591 AT_CHECK([tail -2 stderr], [0], [dnl
2592 Trailing garbage in packet data
2593 ovs-appctl: ovs-vswitchd: server returned an error
2596 # Test incorrect command: ofproto/trace with 4 arguments
2597 AT_CHECK([ovs-appctl ofproto/trace \
2598 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2599 AT_CHECK([tail -2 stderr], [0], [dnl
2600 "ofproto/trace" command takes at most 3 arguments
2601 ovs-appctl: ovs-vswitchd: server returned an error
2604 # Test incorrect command: ofproto/trace with 0 argument
2605 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2606 AT_CHECK([tail -2 stderr], [0], [dnl
2607 "ofproto/trace" command requires at least 1 arguments
2608 ovs-appctl: ovs-vswitchd: server returned an error
2614 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2616 ADD_OF_PORTS([br0], 1, 2, 3)
2618 AT_DATA([flows.txt], [dnl
2619 in_port=1 actions=output:2
2620 in_port=2 actions=output:1
2622 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2624 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2625 AT_CHECK([tail -1 stdout], [0], [dnl
2626 Datapath actions: push_vlan(vid=123,pcp=0),2
2633 m4_define([OFPROTO_TRACE],
2635 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2636 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2638 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2641 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2644 AT_SETUP([ofproto-dpif - MAC learning])
2645 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2646 ADD_OF_PORTS([br0], 1, 2, 3)
2648 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)'
2650 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2653 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2657 # Check for the MAC learning entry.
2658 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2660 3 0 50:54:00:00:00:05 ?
2663 # Trace a packet arrival destined for the learned MAC.
2664 # (This will also learn a MAC.)
2667 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2671 # Check for both MAC learning entries.
2672 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2674 3 0 50:54:00:00:00:05 ?
2675 1 0 50:54:00:00:00:06 ?
2678 # Trace a packet arrival that updates the first learned MAC entry.
2681 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2685 # Check that the MAC learning entry was updated.
2686 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2688 1 0 50:54:00:00:00:06 ?
2689 2 0 50:54:00:00:00:05 ?
2692 # Add another bridge.
2696 -- set bridge br1 datapath-type=dummy])
2697 ADD_OF_PORTS([br1], 4, 5)
2699 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2702 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2707 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2711 # Check that the MAC learning entries were added.
2712 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2714 4 0 50:54:00:00:00:06 ?
2715 5 0 50:54:00:00:00:07 ?
2718 # Delete port p1 and see that its MAC learning entry disappeared, and
2719 # that the MAC learning entry for the same MAC was also deleted from br1.
2720 AT_CHECK([ovs-vsctl del-port p1])
2721 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2723 2 0 50:54:00:00:00:05 ?
2725 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2727 5 0 50:54:00:00:00:07 ?
2733 AT_SETUP([ofproto-dpif - MAC table overflow])
2735 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2736 ADD_OF_PORTS([br0], 1, 2, 3)
2738 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)'
2740 AT_CHECK([ovs-appctl time/stop])
2742 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2743 for i in 0 1 2 3 4 5 6 7 8 9; do
2746 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2749 ovs-appctl time/warp 1000
2752 # Check for the MAC learning entries.
2753 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2755 3 0 50:54:00:00:00:00
2756 3 0 50:54:00:00:00:01
2757 3 0 50:54:00:00:00:02
2758 3 0 50:54:00:00:00:03
2759 3 0 50:54:00:00:00:04
2760 3 0 50:54:00:00:00:05
2761 3 0 50:54:00:00:00:06
2762 3 0 50:54:00:00:00:07
2763 3 0 50:54:00:00:00:08
2764 3 0 50:54:00:00:00:09
2768 # Trace another ARP packet on another MAC.
2771 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2775 # Check that the new one chased the oldest one out of the table.
2776 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2778 3 0 50:54:00:00:00:01 ?
2779 3 0 50:54:00:00:00:02 ?
2780 3 0 50:54:00:00:00:03 ?
2781 3 0 50:54:00:00:00:04 ?
2782 3 0 50:54:00:00:00:05 ?
2783 3 0 50:54:00:00:00:06 ?
2784 3 0 50:54:00:00:00:07 ?
2785 3 0 50:54:00:00:00:08 ?
2786 3 0 50:54:00:00:00:09 ?
2787 3 0 50:54:00:00:00:10 ?
2793 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2795 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2797 # IP_VERSION_TYPE is used in AT_SETUP
2798 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2799 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2800 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2802 ON_EXIT([kill `cat test-sflow.pid`])
2803 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2804 AT_CAPTURE_FILE([sflow.log])
2805 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2806 ovs-appctl time/stop
2808 ADD_OF_PORTS([br0], 1, 2)
2810 set Interface br0 options:ifindex=1002 -- \
2811 set Interface p1 options:ifindex=1004 -- \
2812 set Interface p2 options:ifindex=1003 -- \
2813 set Bridge br0 sflow=@sf -- \
2814 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
2815 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
2817 dnl open with ARP packets to seed the bridge-learning. The output
2818 dnl ifIndex numbers should be reported predictably after that.
2819 dnl Since we set sampling=1 we should see all of these packets
2820 dnl reported. Sorting the output by data-source and seqNo makes
2821 dnl it deterministic. Ensuring that we send at least two packets
2822 dnl into each port means we get to check the seq nos are
2823 dnl incrementing correctly.
2824 dnl because packets from different ports can be handled by separate
2825 dnl threads, put some sleeps
2827 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)'
2829 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)'
2831 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)'
2833 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)'
2834 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)'
2836 dnl sleep long enough to get more than one counter sample
2837 dnl from each datasource so we can check sequence numbers
2838 for i in `seq 1 30`; do
2839 ovs-appctl time/warp 100
2842 ovs-appctl -t test-sflow exit
2844 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
2865 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
2885 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
2905 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
2925 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
2945 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
2948 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
2962 in_broadcasts=4294967295
2965 in_unknownprotos=4294967295
2968 out_multicasts=4294967295
2969 out_broadcasts=4294967295
2985 in_broadcasts=4294967295
2988 in_unknownprotos=4294967295
2991 out_multicasts=4294967295
2992 out_broadcasts=4294967295
3008 in_broadcasts=4294967295
3011 in_unknownprotos=4294967295
3014 out_multicasts=4294967295
3015 out_broadcasts=4294967295
3031 in_broadcasts=4294967295
3034 in_unknownprotos=4294967295
3037 out_multicasts=4294967295
3038 out_broadcasts=4294967295
3054 in_broadcasts=4294967295
3057 in_unknownprotos=4294967295
3060 out_multicasts=4294967295
3061 out_broadcasts=4294967295
3077 in_broadcasts=4294967295
3080 in_unknownprotos=4294967295
3083 out_multicasts=4294967295
3084 out_broadcasts=4294967295
3091 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3092 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3094 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3096 # Test that basic NetFlow reports flow statistics correctly:
3097 # The initial packet of a flow are correctly accounted.
3098 # Later packets within a flow are correctly accounted.
3099 # Flow actions changing (in this case, due to MAC learning)
3100 # cause a record to be sent.
3102 # IP_VERSION_TYPE is used in AT_SETUP
3103 m4_define([CHECK_NETFLOW_EXPIRATION],
3104 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3105 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3106 ADD_OF_PORTS([br0], 1, 2)
3108 ovs-appctl time/stop
3109 ON_EXIT([kill `cat test-netflow.pid`])
3110 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3111 AT_CAPTURE_FILE([netflow.log])
3112 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3115 set Bridge br0 netflow=@nf -- \
3116 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3117 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3119 for delay in 1000 30000; do
3120 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)'
3121 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)'
3123 ovs-appctl time/warp $delay
3126 ovs-appctl time/warp 6000
3129 ovs-appctl -t test-netflow exit
3131 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])
3133 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])
3135 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3136 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3137 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3141 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3142 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3144 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3146 # Test that basic NetFlow reports active expirations correctly.
3148 # IP_VERSION_TYPE is used in AT_SETUP
3149 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3150 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3152 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3153 ADD_OF_PORTS([br0], 1, 2)
3155 ON_EXIT([kill `cat test-netflow.pid`])
3156 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3157 AT_CAPTURE_FILE([netflow.log])
3158 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3161 set Bridge br0 netflow=@nf -- \
3162 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3163 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3165 AT_CHECK([ovs-appctl time/stop])
3167 while test $n -le 60; do
3170 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)'
3171 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)'
3173 ovs-appctl time/warp 1000
3176 ovs-appctl time/warp 10000
3180 ovs-appctl -t test-netflow exit
3182 # Count the number of reported packets:
3183 # - From source to destination before MAC learning kicks in (just one).
3184 # - From source to destination after that.
3185 # - From destination to source.
3193 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3200 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3203 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3206 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3213 eval $counter=\`expr \$$counter + \$pkts\`
3214 n_recs=`expr $n_recs + 1`
3217 # There should be exactly 1 MAC learning packet,
3218 # exactly 59 other packets in that direction,
3219 # and exactly 60 packets in the other direction.
3220 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3225 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3226 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3228 AT_SETUP([ofproto-dpif - flow stats])
3230 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3231 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3233 ovs-appctl time/stop
3235 for i in `seq 1 10`; do
3236 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)'
3239 ovs-appctl time/warp 1000
3241 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3242 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3243 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3244 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3249 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3251 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3252 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3254 ovs-appctl time/stop
3256 for i in `seq 1 10`; do
3257 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)'
3260 ovs-appctl time/warp 100
3261 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3262 ovs-appctl time/warp 1000
3264 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3265 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3266 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3267 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3272 AT_SETUP([idle_age and hard_age increase over time])
3275 # get_ages DURATION HARD IDLE
3277 # Fetch the flow duration, hard age, and idle age into the variables
3278 # whose names are given as arguments. Rounds DURATION down to the
3279 # nearest integer. If hard_age doesn't appear in the output, sets
3280 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3283 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3285 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3286 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3287 AS_VAR_COPY([$1], [duration])
3289 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3290 if test X"$hard" = X; then
3293 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3295 AS_VAR_COPY([$2], [hard])
3297 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3298 if test X"$idle" = X; then
3301 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3303 AS_VAR_COPY([$3], [idle])
3306 # Add a flow and get its initial hard and idle age.
3307 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3308 get_ages duration1 hard1 idle1
3310 ovs-appctl time/stop
3311 # Warp time forward by 10 seconds, then modify the flow's actions.
3312 ovs-appctl time/warp 10000
3313 get_ages duration2 hard2 idle2
3314 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3316 # Warp time forward by 10 seconds.
3317 ovs-appctl time/warp 10000
3318 get_ages duration3 hard3 idle3
3320 # Warp time forward 10 more seconds, then pass some packets through the flow,
3321 # then warp forward a few more times because idle times are only updated
3323 ovs-appctl time/warp 10000
3324 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)'
3325 ovs-appctl time/warp 1000
3326 ovs-appctl time/warp 1000
3327 ovs-appctl time/warp 1000
3328 get_ages duration4 hard4 idle4
3330 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3331 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3332 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3334 # Duration should increase steadily over time.
3335 AT_CHECK([test $duration1 -lt $duration2])
3336 AT_CHECK([test $duration2 -lt $duration3])
3337 AT_CHECK([test $duration3 -lt $duration4])
3339 # Hard age should be "none" initially because it's the same as flow_duration,
3340 # then it should increase.
3341 AT_CHECK([test $hard1 = none])
3342 AT_CHECK([test $hard2 = none])
3343 AT_CHECK([test $hard3 != none])
3344 AT_CHECK([test $hard4 != none])
3345 AT_CHECK([test $hard3 -lt $hard4])
3347 # Idle age should increase from 1 to 2 to 3, then decrease.
3348 AT_CHECK([test $idle1 -lt $idle2])
3349 AT_CHECK([test $idle2 -lt $idle3])
3350 AT_CHECK([test $idle3 -gt $idle4])
3352 # Check some invariant relationships.
3353 AT_CHECK([test $duration1 = $idle1])
3354 AT_CHECK([test $duration2 = $idle2])
3355 AT_CHECK([test $duration3 = $idle3])
3356 AT_CHECK([test $idle3 -gt $hard3])
3357 AT_CHECK([test $idle4 -lt $hard4])
3358 AT_CHECK([test $hard4 -lt $duration4])
3363 AT_SETUP([ofproto-dpif - fin_timeout])
3365 AT_DATA([flows.txt], [dnl
3366 in_port=1 actions=output:2
3367 in_port=2 actions=mod_vlan_vid:17,output:1
3369 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3370 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3372 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3375 ovs-appctl time/stop
3376 # Check that a TCP SYN packet does not change the timeout. (Because
3377 # flow stats updates are mainly what implements the fin_timeout
3378 # feature, we warp forward a couple of times to ensure that flow stats
3379 # run before re-checking the flow table.)
3380 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3381 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3384 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3386 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3388 # Check that a TCP FIN packet does change the timeout.
3389 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3390 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3393 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3395 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3400 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3401 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3402 ADD_OF_PORTS([br0], [1], [2])
3403 ADD_OF_PORTS([br1], [3])
3405 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3412 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3413 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3414 ADD_OF_PORTS([br0], [1], [2])
3415 ADD_OF_PORTS([br1], [3])
3417 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3418 dummy@ovs-dummy: hit:0 missed:0
3420 br0 65534/100: (dummy)
3424 br1 65534/101: (dummy)
3430 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3431 OVS_VSWITCHD_START([add-br br1 -- \
3432 set bridge br1 datapath-type=dummy fail-mode=secure])
3433 ADD_OF_PORTS([br0], [1], [2])
3434 ADD_OF_PORTS([br1], [3])
3436 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)'])
3437 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)'])
3438 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)'])
3440 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3441 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))
3442 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))
3445 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3446 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))
3449 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3450 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))
3451 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))
3454 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3455 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))
3461 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3462 OVS_VSWITCHD_START([dnl
3463 add-port br0 p1 -- set Interface p1 type=dummy
3465 ON_EXIT([kill `cat ovs-ofctl.pid`])
3467 AT_CAPTURE_FILE([ofctl_monitor.log])
3468 AT_DATA([flows.txt], [dnl
3469 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3470 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3472 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3474 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3475 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3477 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3478 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)
3479 dnl (label 20, exp 0, [S], ttl 32)
3480 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3481 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3483 for dl_src in 00 01; do
3484 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"])
3486 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3487 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))
3495 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3496 OVS_VSWITCHD_START([dnl
3497 add-port br0 p1 -- set Interface p1 type=dummy
3499 ON_EXIT([kill `cat ovs-ofctl.pid`])
3501 AT_CAPTURE_FILE([ofctl_monitor.log])
3502 AT_DATA([flows.txt], [dnl
3503 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3504 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3506 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3508 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3509 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3510 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3512 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3513 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)
3514 dnl (label 20, exp 0, ttl 32)
3515 dnl (label 20, exp 0, ttl 32)
3516 dnl (label 20, exp 0, [S], ttl 32)
3517 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3518 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3520 for dl_src in 00 01; do
3521 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"])
3523 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3524 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))
3531 AT_SETUP([ofproto-dpif - patch ports])
3532 OVS_VSWITCHD_START([add-br br1 \
3533 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3534 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3535 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3537 ADD_OF_PORTS([br0], [2])
3538 ADD_OF_PORTS([br1], [3])
3540 AT_CHECK([ovs-appctl time/stop])
3542 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3543 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3545 for i in $(seq 1 10); do
3546 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)'
3547 if [[ $i -eq 1 ]]; then
3552 for i in $(seq 1 5); do
3553 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)'
3554 if [[ $i -eq 1 ]]; then
3559 AT_CHECK([ovs-appctl time/warp 500], [0],
3563 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3564 dummy@ovs-dummy: hit:13 missed:2
3566 br0 65534/100: (dummy)
3568 pbr0 1/none: (patch: peer=pbr1)
3570 br1 65534/101: (dummy)
3572 pbr1 1/none: (patch: peer=pbr0)
3575 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3576 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
3578 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3579 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
3582 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3583 OFPST_PORT reply (xid=0x4): 1 ports
3584 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3585 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3588 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3589 OFPST_PORT reply (xid=0x4): 1 ports
3590 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3591 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3597 AT_SETUP([ofproto-dpif - port duration])
3598 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3599 ADD_OF_PORTS([br0], 1, 2)
3601 ovs-appctl time/stop
3602 ovs-appctl time/warp 10000
3604 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3605 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3614 dnl ----------------------------------------------------------------------
3615 AT_BANNER([ofproto-dpif -- megaflows])
3617 AT_SETUP([ofproto-dpif megaflow - port classification])
3619 ADD_OF_PORTS([br0], [1], [2])
3620 AT_DATA([flows.txt], [dnl
3621 table=0 in_port=1 actions=output(2)
3623 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3624 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)'])
3625 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)'])
3627 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3628 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>
3633 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3635 ADD_OF_PORTS([br0], [1], [2])
3636 AT_DATA([flows.txt], [dnl
3637 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3639 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3640 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)'])
3641 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)'])
3643 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3644 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>
3645 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>
3650 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3652 ADD_OF_PORTS([br0], [1], [2])
3653 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], [])
3654 AT_DATA([flows.txt], [dnl
3655 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3657 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3658 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)'])
3659 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)'])
3661 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3662 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>
3663 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>
3668 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3670 ADD_OF_PORTS([br0], [1], [2])
3671 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], [])
3672 AT_DATA([flows.txt], [dnl
3673 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3675 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3676 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)'])
3677 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)'])
3679 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3680 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>
3681 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>
3686 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3688 ADD_OF_PORTS([br0], [1], [2])
3689 AT_DATA([flows.txt], [dnl
3690 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3692 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3693 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)'])
3694 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)'])
3695 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3696 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>
3701 AT_SETUP([ofproto-dpif megaflow - normal])
3703 ADD_OF_PORTS([br0], [1], [2])
3704 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3705 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)'])
3706 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)'])
3708 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3709 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>
3710 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>
3715 AT_SETUP([ofproto-dpif megaflow - mpls])
3717 ADD_OF_PORTS([br0], [1], [2])
3718 AT_DATA([flows.txt], [dnl
3719 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3720 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3722 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3723 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)'])
3724 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)'])
3726 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3727 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>
3728 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>
3733 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3735 # IP_VERSION_TYPE is used in AT_SETUP
3736 m4_define([CHECK_MEGAFLOW_NETFLOW],
3737 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3739 ADD_OF_PORTS([br0], [1], [2])
3741 dnl NetFlow configuration disables wildcarding relevant fields
3742 ON_EXIT([kill `cat test-netflow.pid`])
3743 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3744 AT_CAPTURE_FILE([netflow.log])
3745 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3747 set Bridge br0 netflow=@nf -- \
3748 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3749 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3751 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3752 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)'])
3753 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)'])
3755 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3756 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>
3757 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>
3762 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3763 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3765 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3767 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3768 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3769 set interface p2 type=dummy ofport_request=2 -- \
3770 set interface p3 type=dummy ofport_request=3])
3771 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3774 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3775 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)'])
3776 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)'])
3778 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3779 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>
3780 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>
3785 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3787 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3788 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3789 set interface p2 type=dummy ofport_request=2 -- \
3790 set interface p3 type=dummy ofport_request=3])
3791 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3794 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3795 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)'])
3796 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)'])
3798 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3799 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>
3800 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>
3805 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3806 # Create bond0 on br0 with interfaces p0 and p1
3807 # and bond1 on br1 with interfaces p2 and p3
3808 # with p0 patched to p2 and p1 patched to p3.
3810 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3811 other-config:lacp-time=fast \
3812 other-config:bond-rebalance-interval=0 -- \
3813 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3814 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3816 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3817 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3818 fail-mode=secure -- \
3819 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3820 other-config:lacp-time=fast \
3821 other-config:bond-rebalance-interval=0 -- \
3822 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3823 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3825 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3827 ADD_OF_PORTS([br0], [7])
3828 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3829 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
3830 ovs-appctl time/stop
3831 ovs-appctl time/warp 5000
3832 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)'])
3833 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)'])
3835 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3836 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>
3837 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>
3842 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3844 ADD_OF_PORTS([br0], [1], [2])
3845 AT_DATA([flows.txt], [dnl
3846 table=0 in_port=1,ip actions=resubmit(90)
3847 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3849 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3850 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)'])
3851 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)'])
3853 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3854 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>
3855 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>
3860 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3862 ADD_OF_PORTS([br0], [1], [2])
3863 AT_DATA([flows.txt], [dnl
3864 table=0 in_port=1,ip actions=resubmit(,1)
3865 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3867 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3868 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)'])
3869 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=
3870 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3872 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3873 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>
3874 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>
3879 AT_SETUP([ofproto-dpif megaflow - goto_table action])
3881 ADD_OF_PORTS([br0], [1], [2])
3882 AT_DATA([flows.txt], [dnl
3883 table=0 in_port=1,ip actions=goto_table(1)
3884 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3886 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3887 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)'])
3888 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)'])
3890 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3891 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>
3892 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>
3897 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3899 ADD_OF_PORTS([br0], [1], [2], [3])
3901 set Bridge br0 mirrors=@m --\
3902 --id=@p3 get Port p3 --\
3903 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3905 AT_DATA([flows.txt], [dnl
3906 in_port=1 actions=output:2
3908 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3909 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)'])
3910 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)'])
3912 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3913 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>
3918 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3920 ADD_OF_PORTS([br0], [1], [2], [3])
3922 set Bridge br0 mirrors=@m --\
3923 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3924 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3926 AT_DATA([flows.txt], [dnl
3927 in_port=1 actions=output:2
3929 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3930 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))'])
3931 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)'])
3933 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3934 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>
3935 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>
3940 AT_SETUP([ofproto-dpif megaflow - move action])
3942 ADD_OF_PORTS([br0], [1], [2])
3943 AT_DATA([flows.txt], [dnl
3944 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
3945 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
3946 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
3948 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3949 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)'])
3950 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)'])
3952 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3953 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>
3954 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>
3959 AT_SETUP([ofproto-dpif megaflow - push action])
3961 ADD_OF_PORTS([br0], [1], [2])
3962 AT_DATA([flows.txt], [dnl
3963 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
3965 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3966 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)'])
3967 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)'])
3969 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3970 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>
3971 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>
3976 AT_SETUP([ofproto-dpif megaflow - learning])
3978 ADD_OF_PORTS([br0], [1], [2])
3979 AT_DATA([flows.txt], [dnl
3980 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
3982 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3983 ovs-appctl time/stop
3984 # We send each packet twice because the first packet in each flow causes the
3985 # flow table to change and thus revalidations, which (depending on timing)
3986 # can keep a megaflow from being installed. The revalidations are done by
3987 # the second iteration, allowing the flows to be installed.
3989 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)'])
3990 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)'])
3991 ovs-appctl time/warp 100
3994 dnl The original flow is missing due to a revalidation.
3995 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3996 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>
3997 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>
4002 AT_SETUP([ofproto-dpif megaflow - tunnels])
4004 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4005 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4006 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4007 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4009 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4010 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4011 ofport_request=4 options:key=flow])
4012 AT_DATA([flows.txt], [dnl
4013 in_port=1,actions=output(2)
4014 in_port=3,actions=output(4)
4016 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4017 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4018 dnl will cause the packet to be dropped.
4019 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)'])
4020 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)'])
4021 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)'])
4022 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)'])
4024 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4025 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>
4026 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>
4027 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>
4032 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4034 ADD_OF_PORTS([br0], [1], [2])
4035 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], [])
4036 AT_DATA([flows.txt], [dnl
4037 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4039 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4040 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)'])
4041 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)'])
4043 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4044 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>
4045 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>
4050 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4052 ADD_OF_PORTS([br0], [1], [2])
4053 AT_DATA([flows.txt], [dnl
4054 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4056 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4057 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)'])
4058 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)'])
4060 dnl The megaflows do not match the same fields, since the first packet
4061 dnl is essentially a no-op. (The new destination MAC is the same as the
4062 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4063 dnl so that a packet that doesn't need its MAC address changed doesn't
4064 dnl hide one that does. Since the first entry doesn't need to change,
4065 dnl only the destination MAC address is matched (as decided by
4066 dnl ofproto-dpif). The second entry actually updates the destination
4067 dnl MAC, so both the source and destination MAC addresses are
4068 dnl un-wildcarded, since the ODP commit functions update both the source
4069 dnl and destination MAC addresses.
4070 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4071 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
4072 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
4077 AT_SETUP([ofproto-dpif megaflow - disabled])
4079 ADD_OF_PORTS([br0], [1], [2])
4080 AT_DATA([flows.txt], [dnl
4081 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4082 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4084 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4086 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4087 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4088 for i in 1 2 3 4; do
4089 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)'])
4090 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)'])
4093 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4094 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
4095 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
4100 AT_SETUP([ofproto-dpif - datapath port number change])
4101 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4102 ADD_OF_PORTS([br0], 1)
4104 # Trace a flow that should output to p1.
4105 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4107 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4110 # Change p1's port number to 5.
4111 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4113 # Trace a flow that should output to p1 in its new location.
4114 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4116 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4121 # Tests the bundling with various bfd and cfm configurations.
4122 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4123 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4124 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4125 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4126 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4127 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4128 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4129 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4130 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4131 set Interface p0 cfm_mpid=1 -- \
4132 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4134 ovs-appctl time/stop
4135 # advance the clock to stablize everything.
4136 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4137 # cfm/show should show 'recv' fault.
4138 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4141 # bfd/show should show 'up'.
4142 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4143 Local Session State: up
4144 Remote Session State: up
4145 Local Session State: up
4146 Remote Session State: up
4148 # bond/show should show 'may-enable: true' for all slaves.
4149 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4156 # now disable the bfd on p1.
4157 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4158 # advance the clock to stablize everything.
4159 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4160 # cfm/show should show 'recv' fault.
4161 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4164 # bfd/show should show 'down'.
4165 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4166 Local Session State: down
4167 Remote Session State: down
4169 # bond/show should show 'may-enable: false' for p0.
4170 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4175 # now enable the bfd on p1 and disable bfd on p0.
4176 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4177 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4178 # advance the clock to stablize everything.
4179 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4180 # cfm/show should show 'recv' fault.
4181 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4184 # bfd/show should show 'down'.
4185 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4186 Local Session State: down
4187 Remote Session State: down
4189 # bond/show should show 'may-enable: false' for p0 and p1.
4190 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4200 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4201 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4204 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4206 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4207 monitor thread created
4209 # disable bfd on p0.
4210 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4212 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4213 monitor thread terminated
4215 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4218 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4220 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4221 monitor thread created
4223 # disable cfm on p0.
4224 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4226 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4227 monitor thread terminated
4229 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4231 # enable both bfd and cfm on p0.
4232 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4234 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4235 monitor thread created
4237 # disable bfd on p0.
4238 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4239 # check log, there should not be the log of thread terminated.
4240 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4242 # reenable bfd on p0.
4243 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4244 # check log, should still be on log of thread created.
4245 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4246 monitor thread created
4248 # disable bfd and cfm together.
4249 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4251 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4252 monitor thread terminated
4258 # this test helps avoid the deadlock between the main thread and monitor thread.
4259 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4262 for i in `seq 1 199`
4264 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])
4270 AT_BANNER([ofproto-dpif - flow translation resource limits])
4272 AT_SETUP([ofproto-dpif - infinite resubmit])
4274 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4275 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4277 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4279 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4282 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4285 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4287 ADD_OF_PORTS([br0], 1)
4288 (for i in `seq 1 64`; do
4290 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4292 echo "in_port=65, actions=local") > flows
4293 AT_CHECK([ovs-ofctl add-flows br0 flows])
4294 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4295 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4297 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4300 AT_SETUP([ofproto-dpif - too many output actions])
4302 ADD_OF_PORTS([br0], 1)
4303 (for i in `seq 1 12`; do
4305 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4307 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4308 AT_CHECK([ovs-ofctl add-flows br0 flows])
4309 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4310 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4313 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4315 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4318 AT_SETUP([ofproto-dpif - stack too deep])
4320 ADD_OF_PORTS([br0], 1)
4321 (for i in `seq 1 12`; do
4323 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4325 push="push:NXM_NX_REG0[[]]"
4326 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4327 AT_CHECK([ovs-ofctl add-flows br0 flows])
4328 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4329 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4331 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])