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 - Default Table Miss - OF1.0 (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 - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
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 del-flows br0])
486 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
488 dnl Test that missed packets are droped
490 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
492 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
494 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
497 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
498 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
499 OFPST_FLOW reply (OF1.3):
505 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
506 OVS_VSWITCHD_START([dnl
507 add-port br0 p1 -- set Interface p1 type=dummy
509 ON_EXIT([kill `cat ovs-ofctl.pid`])
511 AT_CAPTURE_FILE([ofctl_monitor.log])
512 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
514 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
517 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)'
519 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
520 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
521 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
522 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
523 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
525 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
526 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
528 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
529 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
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=goto_table:1
535 OFPST_FLOW reply (OF1.2):
541 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
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 -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
550 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
553 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)'
556 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
557 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
560 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
561 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
562 n_packets=3, n_bytes=180, actions=resubmit(1,1)
563 OFPST_FLOW reply (OF1.2):
569 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
570 OVS_VSWITCHD_START([dnl
571 add-port br0 p1 -- set Interface p1 type=dummy
573 ON_EXIT([kill `cat ovs-ofctl.pid`])
575 AT_CAPTURE_FILE([ofctl_monitor.log])
576 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
577 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
579 dnl Miss table 0, Hit table 1
580 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
583 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)'
585 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
586 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
588 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
589 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
590 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
592 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
593 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
595 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
596 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
599 dnl Hit table 0, Miss all other tables, sent to controller
600 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
603 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)'
605 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
606 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
608 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
609 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
610 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
612 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
613 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
615 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
616 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
619 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
620 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
621 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
622 OFPST_FLOW reply (OF1.2):
628 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
629 OVS_VSWITCHD_START([dnl
630 add-port br0 p1 -- set Interface p1 type=dummy
632 ON_EXIT([kill `cat ovs-ofctl.pid`])
634 AT_CAPTURE_FILE([ofctl_monitor.log])
635 AT_DATA([flows.txt], [dnl
636 table=0 actions=goto_table(1)
637 table=2 dl_src=10:11:11:11:11:11 actions=controller
639 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
640 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
642 dnl Hit table 0, Miss table 1, Hit table 2
643 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
646 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)'
648 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
649 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
651 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
652 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
653 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
655 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
656 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
658 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
659 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
662 dnl Hit table 1, Miss all other tables, sent to controller
663 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
666 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)'
668 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
669 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
671 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
672 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
673 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
675 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
676 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
678 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
679 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
682 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
683 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
684 n_packets=6, n_bytes=360, actions=goto_table:1
685 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
686 OFPST_FLOW reply (OF1.2):
692 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
693 OVS_VSWITCHD_START([dnl
694 add-port br0 p1 -- set Interface p1 type=dummy
696 ON_EXIT([kill `cat ovs-ofctl.pid`])
698 AT_CAPTURE_FILE([ofctl_monitor.log])
699 AT_DATA([flows.txt], [dnl
700 table=0 actions=resubmit(1,1)
701 table=2 dl_src=10:11:11:11:11:11 actions=controller
703 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
704 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
706 dnl Hit table 0, Miss table 1, Dropped
707 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
710 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)'
712 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
714 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
717 dnl Hit table 1, Dropped
718 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
721 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)'
723 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
725 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
728 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
729 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
730 n_packets=6, n_bytes=360, actions=resubmit(1,1)
731 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
732 OFPST_FLOW reply (OF1.2):
738 AT_SETUP([ofproto-dpif - Table Miss - 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 -OOpenFlow11 mod-table br0 all drop])
747 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
749 dnl Test that missed packets are droped
751 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)'
753 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
755 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
758 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
759 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
766 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
767 OVS_VSWITCHD_START([dnl
768 add-port br0 p1 -- set Interface p1 type=dummy
770 ON_EXIT([kill `cat ovs-ofctl.pid`])
772 AT_CAPTURE_FILE([ofctl_monitor.log])
773 AT_CHECK([ovs-ofctl del-flows br0])
774 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
775 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
777 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
779 dnl Test that missed packets are droped
781 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)'
783 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
785 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
788 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
789 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
790 n_packets=3, n_bytes=180, actions=goto_table:1
791 OFPST_FLOW reply (OF1.2):
797 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
798 OVS_VSWITCHD_START([dnl
799 add-port br0 p1 -- set Interface p1 type=dummy
801 ON_EXIT([kill `cat ovs-ofctl.pid`])
803 AT_CAPTURE_FILE([ofctl_monitor.log])
804 AT_CHECK([ovs-ofctl del-flows br0])
805 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
806 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
808 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
810 dnl Test that missed packets are droped
812 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)'
814 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
816 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
819 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
820 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
821 n_packets=3, n_bytes=180, actions=resubmit(1,1)
822 OFPST_FLOW reply (OF1.2):
828 AT_SETUP([ofproto-dpif - controller])
829 OVS_VSWITCHD_START([dnl
830 add-port br0 p1 -- set Interface p1 type=dummy
832 ON_EXIT([kill `cat ovs-ofctl.pid`])
834 AT_CAPTURE_FILE([ofctl_monitor.log])
835 AT_DATA([flows.txt], [dnl
836 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
837 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
838 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
840 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
841 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)
842 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)
843 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
844 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)
845 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
846 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
847 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
848 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
849 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
850 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
851 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
852 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
853 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
854 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
855 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
856 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
857 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
858 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
859 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
861 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
864 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
867 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)'
869 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
870 ovs-appctl -t ovs-ofctl exit
872 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
873 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
874 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
876 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
877 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
879 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
880 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
883 dnl Singleton controller action.
884 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
887 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)'
889 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
890 ovs-appctl -t ovs-ofctl exit
892 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
893 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
894 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
896 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
897 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
899 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
900 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
903 dnl Modified controller action.
904 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
907 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)'
909 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
910 ovs-appctl -t ovs-ofctl exit
912 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
913 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
914 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
916 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
917 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
919 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
920 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
923 dnl Modified VLAN controller action.
924 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
927 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)'
929 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
930 ovs-appctl -t ovs-ofctl exit
932 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
933 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
934 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
936 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
937 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
939 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
940 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
943 dnl Modified MPLS controller action.
944 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
947 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)'
949 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
950 ovs-appctl -t ovs-ofctl exit
952 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
953 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
954 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
956 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
957 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
959 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
960 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
963 dnl Modified MPLS controller action.
964 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
967 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)'
969 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
970 ovs-appctl -t ovs-ofctl exit
972 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
973 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
974 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
976 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
977 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
979 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
980 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
983 dnl Modified MPLS controller action.
984 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
986 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)
989 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)'
992 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
993 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
994 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
995 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
997 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
998 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
1000 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1001 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
1004 dnl Modified MPLS controller action.
1005 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1008 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))'
1010 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1011 ovs-appctl -t ovs-ofctl exit
1013 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1014 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1015 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
1017 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1018 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
1020 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1021 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
1024 dnl Modified MPLS controller action.
1025 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1028 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)'
1030 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1031 ovs-appctl -t ovs-ofctl exit
1033 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1034 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1035 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
1037 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1038 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
1040 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1041 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
1044 dnl Modified MPLS controller action.
1045 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1048 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)'
1050 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1051 ovs-appctl -t ovs-ofctl exit
1053 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1054 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1055 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
1057 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1058 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
1060 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1061 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
1064 dnl Modified MPLS controller action.
1065 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1068 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)'
1070 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1071 ovs-appctl -t ovs-ofctl exit
1073 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1074 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1075 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
1077 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1078 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
1080 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1081 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
1084 dnl Modified MPLS controller action.
1085 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1088 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)'
1090 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1091 ovs-appctl -t ovs-ofctl exit
1093 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1094 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1095 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
1097 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1098 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
1100 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1101 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
1104 dnl Modified MPLS actions.
1105 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1108 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)'
1110 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1111 ovs-appctl -t ovs-ofctl exit
1113 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1114 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1115 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
1117 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1118 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
1120 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1121 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
1124 dnl Modified MPLS ipv6 controller action.
1125 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1128 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)'
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=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1135 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
1137 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1138 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
1140 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1141 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
1145 dnl Modified MPLS pop action.
1146 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1147 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)
1148 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1150 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1153 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'
1156 # 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)'
1158 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1159 ovs-appctl -t ovs-ofctl exit
1161 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1162 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1163 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
1165 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1166 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
1168 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1169 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
1173 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1176 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)'
1178 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1179 ovs-appctl -t ovs-ofctl exit
1181 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1182 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1183 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
1185 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1186 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
1188 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)
1189 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
1191 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)
1192 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
1194 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)
1195 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
1197 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)
1198 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
1200 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)
1201 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
1203 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)
1204 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
1206 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)
1207 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
1211 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1214 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'
1216 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1217 ovs-appctl -t ovs-ofctl exit
1219 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1220 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1221 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
1223 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1224 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
1226 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)
1227 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
1229 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)
1230 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
1232 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)
1233 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
1235 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)
1236 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
1238 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)
1239 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
1241 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)
1242 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
1244 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)
1245 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
1248 dnl Modified ARP controller action.
1249 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1252 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)'
1255 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1256 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1257 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1258 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1259 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
1260 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1261 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
1262 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1263 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
1264 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1265 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
1266 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1267 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
1268 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1269 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
1270 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1271 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
1272 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1273 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
1274 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1275 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
1278 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1281 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1284 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'
1287 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1288 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1289 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1290 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1291 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
1293 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1294 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
1296 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)
1297 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
1299 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)
1300 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
1302 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)
1303 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
1305 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)
1306 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
1308 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)
1309 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
1311 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)
1312 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
1314 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)
1315 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
1318 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1319 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1320 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1321 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)
1322 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)
1323 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)
1324 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)
1325 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)
1326 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1327 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1328 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
1329 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
1330 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
1331 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
1332 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
1333 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
1334 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
1335 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
1336 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
1337 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
1338 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
1339 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
1340 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1341 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1349 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1350 OVS_VSWITCHD_START([dnl
1351 add-port br0 p1 -- set Interface p1 type=dummy
1353 ON_EXIT([kill `cat ovs-ofctl.pid`])
1355 AT_CAPTURE_FILE([ofctl_monitor.log])
1356 # A table-miss flow has priority 0 and no match
1357 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1359 dnl Singleton controller action.
1360 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1363 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)'
1365 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1366 ovs-appctl -t ovs-ofctl exit
1368 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1369 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1370 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
1372 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1373 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
1375 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1376 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
1379 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1381 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1382 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1390 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1391 OVS_VSWITCHD_START([dnl
1392 add-port br0 p1 -- set Interface p1 type=dummy
1394 ON_EXIT([kill `cat ovs-ofctl.pid`])
1396 AT_CAPTURE_FILE([ofctl_monitor.log])
1397 # A table-miss flow has priority 0 and no match
1398 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1400 dnl Singleton controller action.
1401 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1404 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)'
1406 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1407 ovs-appctl -t ovs-ofctl exit
1409 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1411 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1412 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1413 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
1415 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1416 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
1418 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1419 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
1422 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1424 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1425 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1426 OFPST_FLOW reply (OF1.3):
1432 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1434 ADD_OF_PORTS([br0], [1], [2])
1436 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1437 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'
1439 # Input some packets that should follow the arp modification slow-path.
1441 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)'
1443 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1445 # Check the packets that were output.
1446 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1447 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
1448 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
1449 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
1450 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
1451 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
1452 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
1453 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
1454 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
1455 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
1461 AT_SETUP([ofproto-dpif - VLAN handling])
1463 [set Bridge br0 fail-mode=standalone -- \
1464 add-port br0 p1 trunks=10,12 -- \
1465 add-port br0 p2 tag=10 -- \
1466 add-port br0 p3 tag=12 \
1467 other-config:priority-tags=true -- \
1468 add-port br0 p4 tag=12 -- \
1469 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1470 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1471 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1472 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1473 other-config:priority-tags=true -- \
1474 set Interface p1 type=dummy -- \
1475 set Interface p2 type=dummy -- \
1476 set Interface p3 type=dummy -- \
1477 set Interface p4 type=dummy -- \
1478 set Interface p5 type=dummy -- \
1479 set Interface p6 type=dummy -- \
1480 set Interface p7 type=dummy -- \
1481 set Interface p8 type=dummy --])
1483 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1484 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1490 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1491 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1494 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1495 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1499 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1500 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1503 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1504 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1505 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1506 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1507 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1514 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1515 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1516 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1523 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1524 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1525 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1532 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1533 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1534 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1535 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1536 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1539 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1540 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1541 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1542 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1543 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1544 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1545 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1548 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1549 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1550 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1551 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1552 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1553 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1554 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1557 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1558 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1559 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1560 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1561 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1562 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1563 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1566 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1567 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1575 if test $vlan = none; then
1576 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1578 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))"
1581 echo "----------------------------------------------------------------------"
1582 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1584 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1585 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1587 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1589 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1595 AT_SETUP([ofproto-dpif - MPLS handling])
1596 OVS_VSWITCHD_START([dnl
1597 add-port br0 p1 -- set Interface p1 type=dummy
1599 ON_EXIT([kill `cat ovs-ofctl.pid`])
1601 AT_CAPTURE_FILE([ofctl_monitor.log])
1602 AT_DATA([flows.txt], [dnl
1603 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1604 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1605 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1607 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1609 dnl In this test, we push an MPLS tag to an ethernet packet.
1610 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1613 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)'
1615 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1616 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1618 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1619 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1620 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
1621 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1622 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1623 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1624 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1626 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1627 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
1628 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1629 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1630 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1631 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1633 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1634 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
1635 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1636 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1637 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1638 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1641 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1642 dnl copied exactly, except for the BOS bit.
1643 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1646 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)'
1648 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1649 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1651 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1652 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1653 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
1654 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1655 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1656 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1657 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1659 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1660 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
1661 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 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 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
1668 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 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
1674 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1675 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1676 dnl to the MPLS ethertype of the MPLS push action which differs to that
1677 dnl of the input packet.
1678 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1681 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)'
1683 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1684 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1686 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1687 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1688 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
1689 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1690 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1691 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1692 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1694 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1695 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
1696 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1697 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1698 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1699 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1701 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1702 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
1703 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1704 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1705 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1706 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1712 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1713 OVS_VSWITCHD_START([dnl
1714 add-port br0 p1 -- set Interface p1 type=dummy
1716 ON_EXIT([kill `cat ovs-ofctl.pid`])
1718 AT_CAPTURE_FILE([ofctl_monitor.log])
1719 AT_DATA([flows.txt], [dnl
1720 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
1721 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
1722 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
1723 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
1724 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
1725 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
1726 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
1727 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
1728 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
1729 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
1731 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1733 dnl Modified MPLS controller action.
1734 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1735 dnl both of these in the final flow
1736 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1739 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)'
1741 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1742 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1744 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1745 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1746 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
1747 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1748 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1749 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1750 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1751 00000040 00 00 00 00
1753 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1754 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
1755 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1756 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1757 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1758 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1759 00000040 00 00 00 00
1761 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1762 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
1763 00000000 50 54 00 00 00 07 40 44-44 44 54 50 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
1767 00000040 00 00 00 00
1770 dnl Modified MPLS controller action.
1771 dnl In this test, the input packet in vlan-tagged, which should be stripped
1772 dnl before we push the MPLS and VLAN tags.
1773 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1776 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))'
1778 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1779 ovs-appctl -t ovs-ofctl exit
1781 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1782 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1783 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
1784 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1785 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1786 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1787 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1789 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1790 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
1791 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1792 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1793 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1794 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1796 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1797 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
1798 00000000 50 54 00 00 00 07 40 44-44 44 54 51 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
1804 dnl Modified MPLS controller action.
1805 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1806 dnl both of these in the final flow
1807 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1810 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)'
1812 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1813 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1815 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1816 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1817 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
1818 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1819 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1820 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1821 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1822 00000040 00 00 00 00
1824 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1825 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
1826 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1827 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1828 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1829 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1830 00000040 00 00 00 00
1832 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1833 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
1834 00000000 52 54 00 00 00 07 40 44-44 44 54 52 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
1838 00000040 00 00 00 00
1841 dnl Modified MPLS controller action.
1842 dnl In this test, the input packet in vlan-tagged, which should be stripped
1843 dnl before we push the MPLS and VLAN tags.
1844 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1847 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))'
1849 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1850 ovs-appctl -t ovs-ofctl exit
1852 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1853 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1854 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
1855 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1856 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1857 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1858 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1860 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1861 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
1862 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1863 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1864 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1865 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1867 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1868 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
1869 00000000 50 54 00 00 00 07 40 44-44 44 54 53 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
1875 dnl Modified MPLS controller action.
1876 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1877 dnl actions are reordered, so we see both of these in the final flow.
1878 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1881 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)'
1883 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1884 ovs-appctl -t ovs-ofctl exit
1886 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1887 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1888 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
1889 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1890 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1891 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1892 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1893 00000040 00 00 00 00
1895 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1896 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
1897 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1898 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1899 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1900 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1901 00000040 00 00 00 00
1903 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1904 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
1905 00000000 50 54 00 00 00 07 40 44-44 44 54 54 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
1909 00000040 00 00 00 00
1912 dnl Modified MPLS controller action.
1913 dnl In this test, the input packet in vlan-tagged, which should be stripped
1914 dnl before we push the MPLS and VLAN tags.
1915 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1918 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))'
1920 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1921 ovs-appctl -t ovs-ofctl exit
1923 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1924 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1925 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
1926 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1927 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1928 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1929 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1931 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1932 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
1933 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1934 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1935 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1936 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1938 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1939 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
1940 00000000 50 54 00 00 00 07 40 44-44 44 54 55 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
1946 dnl Modified MPLS controller action.
1947 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1948 dnl actions are reordered, so we see both of these in the final flow.
1949 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1952 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)'
1954 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1955 ovs-appctl -t ovs-ofctl exit
1957 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1958 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1959 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
1960 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1961 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1962 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1963 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1964 00000040 00 00 00 00
1966 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1967 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
1968 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1969 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1970 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1971 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1972 00000040 00 00 00 00
1974 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1975 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
1976 00000000 50 54 00 00 00 07 40 44-44 44 54 56 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
1980 00000040 00 00 00 00
1983 dnl Modified MPLS controller action.
1984 dnl In this test, the input packet in vlan-tagged, which should be stripped
1985 dnl before we push the MPLS and VLAN tags.
1986 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1989 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))'
1991 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1992 ovs-appctl -t ovs-ofctl exit
1994 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1995 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1996 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
1997 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1998 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1999 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2000 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2002 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2003 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
2004 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2005 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2006 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2007 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2009 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2010 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
2011 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2012 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2013 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2014 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2017 dnl Modified MPLS controller action.
2018 dnl In this test, the input packet in vlan-tagged, which should be stripped
2019 dnl before we push the MPLS and VLAN tags.
2020 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2023 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))'
2025 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2026 ovs-appctl -t ovs-ofctl exit
2028 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2029 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2030 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
2031 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2032 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2033 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2034 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2036 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2037 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
2038 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2039 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2040 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2041 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2043 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2044 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
2045 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2046 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2047 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2048 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2051 dnl Modified MPLS controller action.
2052 dnl In this test, the input packet in vlan-tagged, which should be modified
2053 dnl before we push MPLS and VLAN tags.
2054 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2057 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))'
2059 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2060 ovs-appctl -t ovs-ofctl exit
2062 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2063 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2064 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
2065 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2066 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2067 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2068 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2070 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2071 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
2072 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2073 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2074 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2075 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2077 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2078 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
2079 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2080 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2081 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2082 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2085 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2086 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2087 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
2088 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
2089 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
2090 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
2091 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
2092 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
2093 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
2094 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
2095 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
2096 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
2097 OFPST_FLOW reply (OF1.2):
2103 AT_SETUP([ofproto-dpif - fragment handling])
2105 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2106 AT_DATA([flows.txt], [dnl
2107 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2108 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2109 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2110 priority=50 tcp ip_frag=no actions=output:4
2111 priority=50 tcp ip_frag=first actions=output:5
2112 priority=50 tcp ip_frag=later actions=output:6
2114 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2116 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"
2117 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2118 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2119 later_flow="$base_flow,frag=later)"
2121 # mode no first later
2124 'drop 1 drop drop' \
2133 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2134 for type in no first later; do
2135 eval flow=\$${type}_flow exp_output=\$$type
2136 printf "\n%s\n" "----$mode $type-----"
2137 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2139 if test $mode = drop && test $type != no; then
2140 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2142 echo "Datapath actions: $exp_output" >> expout
2143 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2149 AT_SETUP([ofproto-dpif - exit])
2151 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2152 AT_DATA([flows.txt], [dnl
2153 in_port=1 actions=output:10,exit,output:11
2154 in_port=2 actions=output:12,resubmit:1,output:12
2155 in_port=3 actions=output:13,resubmit:2,output:14
2157 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2158 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])
2159 AT_CHECK([tail -1 stdout], [0],
2160 [Datapath actions: 10
2162 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])
2163 AT_CHECK([tail -1 stdout], [0],
2164 [Datapath actions: 12,10
2166 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])
2167 AT_CHECK([tail -1 stdout], [0],
2168 [Datapath actions: 13,12,10
2174 AT_SETUP([ofproto-dpif - mirroring, select_all])
2176 ADD_OF_PORTS([br0], 1, 2, 3)
2178 set Bridge br0 mirrors=@m --\
2179 --id=@p3 get Port p3 --\
2180 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2182 AT_DATA([flows.txt], [dnl
2183 in_port=1 actions=output:2
2184 in_port=2 actions=output:1
2186 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2188 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)"
2189 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2190 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2191 [Datapath actions: 2,3
2194 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)"
2195 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2196 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2197 [Datapath actions: 1,3
2204 AT_SETUP([ofproto-dpif - mirroring, select_src])
2206 ADD_OF_PORTS([br0], 1, 2, 3)
2208 set Bridge br0 mirrors=@m --\
2209 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2210 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2212 AT_DATA([flows.txt], [dnl
2213 in_port=1 actions=output:2
2214 in_port=2 actions=output:1
2216 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2218 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)"
2219 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2220 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2221 [Datapath actions: 2,3
2224 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)"
2225 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2226 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2227 [Datapath actions: 1
2232 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2234 ADD_OF_PORTS([br0], 1, 2)
2236 set Bridge br0 mirrors=@m --\
2237 --id=@p2 get Port p2 --\
2238 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2240 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2242 # "in_port" defaults to OFPP_NONE if it's not specified.
2243 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"
2244 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2245 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2246 [Datapath actions: 1,2
2253 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2255 ADD_OF_PORTS([br0], 1, 2, 3)
2257 set Bridge br0 mirrors=@m --\
2258 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2259 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2261 AT_DATA([flows.txt], [dnl
2262 in_port=1 actions=output:2
2263 in_port=2 actions=output:1
2265 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2267 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)"
2268 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2269 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2270 [Datapath actions: 2,3
2273 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)"
2274 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2275 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2276 [Datapath actions: 1
2283 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2285 ADD_OF_PORTS([br0], 1, 2, 3)
2287 set Bridge br0 mirrors=@m --\
2288 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2289 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2291 AT_DATA([flows.txt], [dnl
2292 in_port=1, actions=output:2
2294 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2296 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)"
2297 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2298 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2299 [Datapath actions: 2
2302 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))"
2303 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2304 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2305 [Datapath actions: 2
2308 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))"
2309 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2310 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2311 [Datapath actions: 2,3
2318 AT_SETUP([ofproto-dpif - mirroring, output_port])
2320 ADD_OF_PORTS([br0], 1, 2, 3)
2322 set Bridge br0 mirrors=@m --\
2323 --id=@p3 get Port p3 --\
2324 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2326 AT_DATA([flows.txt], [dnl
2327 in_port=1 actions=mod_vlan_vid:17,output:2
2328 in_port=2 actions=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 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2335 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2338 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)"
2339 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2340 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2341 [Datapath actions: 1,3
2347 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2349 ADD_OF_PORTS([br0], 1, 2)
2351 set Bridge br0 mirrors=@m --\
2352 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2354 AT_DATA([flows.txt], [dnl
2355 in_port=1 actions=output:2
2356 in_port=2 actions=mod_vlan_vid:17,output:1
2358 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2360 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)"
2361 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2362 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2364 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2365 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2367 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2369 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)"
2370 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2371 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2373 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2374 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2376 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2381 # Two testcases below are for the ofproto/trace command
2382 # The first one tests all correct syntax:
2383 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2384 # ofproto/trace br_name br_flow [-generate|packet]
2385 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2386 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2387 ADD_OF_PORTS([br0], 1, 2, 3)
2389 AT_DATA([flows.txt], [dnl
2390 in_port=1 actions=output:2
2391 in_port=2 actions=output:1
2393 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2395 odp_flow="in_port(p1)"
2397 # Test command: ofproto/trace odp_flow with in_port as a name.
2398 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2399 AT_CHECK([tail -1 stdout], [0], [dnl
2403 odp_flow="in_port(1)"
2404 # Test command: ofproto/trace odp_flow
2405 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2406 AT_CHECK([tail -1 stdout], [0], [dnl
2410 # Test command: ofproto/trace dp_name odp_flow
2411 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2412 AT_CHECK([tail -1 stdout], [0], [dnl
2415 # Test commmand: ofproto/trace br_name br_flow
2416 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2417 AT_CHECK([tail -1 stdout], [0], [dnl
2421 # Delete the inserted flows
2422 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2423 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2425 # This section beflow tests the [-generate] option
2426 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2427 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"
2429 # Test command: ofproto/trace odp_flow
2430 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2431 # Check for no MAC learning entry
2432 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2436 # Test command: ofproto/trace br_name br_flow
2437 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2438 # Check for no MAC learning entry
2439 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2443 # Test command: ofproto/trace odp_flow -generate
2444 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2445 # Check for the MAC learning entry
2446 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2448 3 0 50:54:00:00:00:05 ?
2451 # Test command: ofproto/trace dp_name odp_flow -generate
2452 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2453 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2454 -generate], [0], [stdout])
2455 # Check for both MAC learning entries
2456 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2458 3 0 50:54:00:00:00:05 ?
2459 1 0 50:54:00:00:00:06 ?
2462 # Test command: ofproto/trace br_name br_flow -generate
2463 AT_CHECK([ovs-appctl ofproto/trace br0 \
2464 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2465 -generate], [0], [stdout])
2466 # Check for both MAC learning entries.
2467 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2469 3 0 50:54:00:00:00:05 ?
2470 1 0 50:54:00:00:00:06 ?
2471 2 0 50:54:00:00:00:07 ?
2474 # This section beflow tests the [packet] option
2475 # The ovs-tcpundump of packets between port1 and port2
2476 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2477 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2479 # Construct the MAC learning table
2480 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2481 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2482 -generate], [0], [stdout])
2484 # Construct the MAC learning table
2485 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2486 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2487 -generate], [0], [stdout])
2489 # Test command: ofproto/trace odp_flow packet
2490 AT_CHECK([ovs-appctl ofproto/trace \
2491 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2492 AT_CHECK([tail -1 stdout], [0], [dnl
2495 AT_CHECK([head -n 2 stdout], [0], [dnl
2497 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
2500 # Test command: ofproto/trace dp_name odp_flow packet
2501 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2502 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2503 AT_CHECK([tail -1 stdout], [0], [dnl
2506 AT_CHECK([head -n 2 stdout], [0], [dnl
2508 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
2511 # Test command: ofproto/trace br_name br_flow packet
2512 AT_CHECK([ovs-appctl ofproto/trace br0 \
2513 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2514 AT_CHECK([tail -1 stdout], [0], [dnl
2517 AT_CHECK([head -n 2 stdout], [0], [dnl
2519 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
2525 # The second test tests the corner cases
2526 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2528 ADD_OF_PORTS([br0], 1, 2)
2531 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2532 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2534 generate="-generate"
2535 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2537 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2543 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2545 AT_CHECK([tail -2 stderr], [0], [dnl
2546 Cannot find the datapath
2547 ovs-appctl: ovs-vswitchd: server returned an error
2550 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2556 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2558 AT_CHECK([tail -2 stderr], [0], [dnl
2559 Cannot find the datapath
2560 ovs-appctl: ovs-vswitchd: server returned an error
2563 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2569 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2571 AT_CHECK([tail -2 stderr], [0], [dnl
2572 Cannot find the datapath
2573 ovs-appctl: ovs-vswitchd: server returned an error
2576 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2582 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2584 AT_CHECK([tail -2 stderr], [0], [dnl
2585 Cannot find the datapath
2586 ovs-appctl: ovs-vswitchd: server returned an error
2589 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2595 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2597 AT_CHECK([tail -2 stderr], [0], [dnl
2599 ovs-appctl: ovs-vswitchd: server returned an error
2602 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2608 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2610 AT_CHECK([tail -2 stderr], [0], [dnl
2611 Must specify bridge name
2612 ovs-appctl: ovs-vswitchd: server returned an error
2615 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2616 AT_CHECK([ovs-appctl ofproto/trace \
2617 ovs-dummy "$odp_flow" garbage_option],
2618 [2], [stdout],[stderr])
2619 AT_CHECK([tail -2 stderr], [0], [dnl
2620 Trailing garbage in packet data
2621 ovs-appctl: ovs-vswitchd: server returned an error
2624 # Test incorrect command: ofproto/trace with 4 arguments
2625 AT_CHECK([ovs-appctl ofproto/trace \
2626 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2627 AT_CHECK([tail -2 stderr], [0], [dnl
2628 "ofproto/trace" command takes at most 3 arguments
2629 ovs-appctl: ovs-vswitchd: server returned an error
2632 # Test incorrect command: ofproto/trace with 0 argument
2633 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2634 AT_CHECK([tail -2 stderr], [0], [dnl
2635 "ofproto/trace" command requires at least 1 arguments
2636 ovs-appctl: ovs-vswitchd: server returned an error
2642 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2644 ADD_OF_PORTS([br0], 1, 2, 3)
2646 AT_DATA([flows.txt], [dnl
2647 in_port=1 actions=output:2
2648 in_port=2 actions=output:1
2650 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2652 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2653 AT_CHECK([tail -1 stdout], [0], [dnl
2654 Datapath actions: push_vlan(vid=123,pcp=0),2
2661 m4_define([OFPROTO_TRACE],
2663 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2664 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2666 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2669 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2672 AT_SETUP([ofproto-dpif - MAC learning])
2673 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2674 ADD_OF_PORTS([br0], 1, 2, 3)
2676 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)'
2678 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2681 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2685 # Check for the MAC learning entry.
2686 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2688 3 0 50:54:00:00:00:05 ?
2691 # Trace a packet arrival destined for the learned MAC.
2692 # (This will also learn a MAC.)
2695 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2699 # Check for both MAC learning entries.
2700 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2702 3 0 50:54:00:00:00:05 ?
2703 1 0 50:54:00:00:00:06 ?
2706 # Trace a packet arrival that updates the first learned MAC entry.
2709 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2713 # Check that the MAC learning entry was updated.
2714 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2716 1 0 50:54:00:00:00:06 ?
2717 2 0 50:54:00:00:00:05 ?
2720 # Add another bridge.
2724 -- set bridge br1 datapath-type=dummy])
2725 ADD_OF_PORTS([br1], 4, 5)
2727 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2730 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2735 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2739 # Check that the MAC learning entries were added.
2740 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2742 4 0 50:54:00:00:00:06 ?
2743 5 0 50:54:00:00:00:07 ?
2746 # Delete port p1 and see that its MAC learning entry disappeared, and
2747 # that the MAC learning entry for the same MAC was also deleted from br1.
2748 AT_CHECK([ovs-vsctl del-port p1])
2749 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2751 2 0 50:54:00:00:00:05 ?
2753 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2755 5 0 50:54:00:00:00:07 ?
2761 AT_SETUP([ofproto-dpif - MAC table overflow])
2763 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2764 ADD_OF_PORTS([br0], 1, 2, 3)
2766 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)'
2768 AT_CHECK([ovs-appctl time/stop])
2770 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2771 for i in 0 1 2 3 4 5 6 7 8 9; do
2774 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2777 ovs-appctl time/warp 1000
2780 # Check for the MAC learning entries.
2781 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2783 3 0 50:54:00:00:00:00
2784 3 0 50:54:00:00:00:01
2785 3 0 50:54:00:00:00:02
2786 3 0 50:54:00:00:00:03
2787 3 0 50:54:00:00:00:04
2788 3 0 50:54:00:00:00:05
2789 3 0 50:54:00:00:00:06
2790 3 0 50:54:00:00:00:07
2791 3 0 50:54:00:00:00:08
2792 3 0 50:54:00:00:00:09
2796 # Trace another ARP packet on another MAC.
2799 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2803 # Check that the new one chased the oldest one out of the table.
2804 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2806 3 0 50:54:00:00:00:01 ?
2807 3 0 50:54:00:00:00:02 ?
2808 3 0 50:54:00:00:00:03 ?
2809 3 0 50:54:00:00:00:04 ?
2810 3 0 50:54:00:00:00:05 ?
2811 3 0 50:54:00:00:00:06 ?
2812 3 0 50:54:00:00:00:07 ?
2813 3 0 50:54:00:00:00:08 ?
2814 3 0 50:54:00:00:00:09 ?
2815 3 0 50:54:00:00:00:10 ?
2821 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2823 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2825 # IP_VERSION_TYPE is used in AT_SETUP
2826 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2827 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2828 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2830 ON_EXIT([kill `cat test-sflow.pid`])
2831 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2832 AT_CAPTURE_FILE([sflow.log])
2833 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2834 ovs-appctl time/stop
2836 ADD_OF_PORTS([br0], 1, 2)
2838 set Interface br0 options:ifindex=1002 -- \
2839 set Interface p1 options:ifindex=1004 -- \
2840 set Interface p2 options:ifindex=1003 -- \
2841 set Bridge br0 sflow=@sf -- \
2842 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
2843 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
2845 dnl open with ARP packets to seed the bridge-learning. The output
2846 dnl ifIndex numbers should be reported predictably after that.
2847 dnl Since we set sampling=1 we should see all of these packets
2848 dnl reported. Sorting the output by data-source and seqNo makes
2849 dnl it deterministic. Ensuring that we send at least two packets
2850 dnl into each port means we get to check the seq nos are
2851 dnl incrementing correctly.
2852 dnl because packets from different ports can be handled by separate
2853 dnl threads, put some sleeps
2855 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)'
2857 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)'
2859 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)'
2861 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)'
2862 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)'
2864 dnl sleep long enough to get more than one counter sample
2865 dnl from each datasource so we can check sequence numbers
2866 for i in `seq 1 30`; do
2867 ovs-appctl time/warp 100
2870 ovs-appctl -t test-sflow exit
2872 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
2893 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
2913 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
2933 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
2953 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
2973 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
2976 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
2990 in_broadcasts=4294967295
2993 in_unknownprotos=4294967295
2996 out_multicasts=4294967295
2997 out_broadcasts=4294967295
3013 in_broadcasts=4294967295
3016 in_unknownprotos=4294967295
3019 out_multicasts=4294967295
3020 out_broadcasts=4294967295
3036 in_broadcasts=4294967295
3039 in_unknownprotos=4294967295
3042 out_multicasts=4294967295
3043 out_broadcasts=4294967295
3059 in_broadcasts=4294967295
3062 in_unknownprotos=4294967295
3065 out_multicasts=4294967295
3066 out_broadcasts=4294967295
3082 in_broadcasts=4294967295
3085 in_unknownprotos=4294967295
3088 out_multicasts=4294967295
3089 out_broadcasts=4294967295
3105 in_broadcasts=4294967295
3108 in_unknownprotos=4294967295
3111 out_multicasts=4294967295
3112 out_broadcasts=4294967295
3119 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3120 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3122 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3124 # Test that basic NetFlow reports flow statistics correctly:
3125 # The initial packet of a flow are correctly accounted.
3126 # Later packets within a flow are correctly accounted.
3127 # Flow actions changing (in this case, due to MAC learning)
3128 # cause a record to be sent.
3130 # IP_VERSION_TYPE is used in AT_SETUP
3131 m4_define([CHECK_NETFLOW_EXPIRATION],
3132 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3133 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3134 ADD_OF_PORTS([br0], 1, 2)
3136 ovs-appctl time/stop
3137 ON_EXIT([kill `cat test-netflow.pid`])
3138 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3139 AT_CAPTURE_FILE([netflow.log])
3140 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3143 set Bridge br0 netflow=@nf -- \
3144 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3145 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3147 for delay in 1000 30000; do
3148 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)'
3149 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)'
3151 ovs-appctl time/warp $delay
3154 ovs-appctl time/warp 6000
3157 ovs-appctl -t test-netflow exit
3159 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])
3161 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])
3163 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3164 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3165 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3169 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3170 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3172 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3174 # Test that basic NetFlow reports active expirations correctly.
3176 # IP_VERSION_TYPE is used in AT_SETUP
3177 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3178 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3180 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3181 ADD_OF_PORTS([br0], 1, 2)
3183 ON_EXIT([kill `cat test-netflow.pid`])
3184 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3185 AT_CAPTURE_FILE([netflow.log])
3186 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3189 set Bridge br0 netflow=@nf -- \
3190 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3191 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3193 AT_CHECK([ovs-appctl time/stop])
3195 while test $n -le 60; do
3198 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)'
3199 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)'
3201 ovs-appctl time/warp 1000
3204 ovs-appctl time/warp 10000
3208 ovs-appctl -t test-netflow exit
3210 # Count the number of reported packets:
3211 # - From source to destination before MAC learning kicks in (just one).
3212 # - From source to destination after that.
3213 # - From destination to source.
3221 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3228 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3231 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3234 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3241 eval $counter=\`expr \$$counter + \$pkts\`
3242 n_recs=`expr $n_recs + 1`
3245 # There should be exactly 1 MAC learning packet,
3246 # exactly 59 other packets in that direction,
3247 # and exactly 60 packets in the other direction.
3248 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3253 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3254 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3256 AT_SETUP([ofproto-dpif - flow stats])
3258 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3259 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3261 ovs-appctl time/stop
3263 for i in `seq 1 10`; do
3264 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)'
3267 ovs-appctl time/warp 1000
3269 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3270 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3271 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3272 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3277 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3279 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3280 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3282 ovs-appctl time/stop
3284 for i in `seq 1 10`; do
3285 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)'
3288 ovs-appctl time/warp 100
3289 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3290 ovs-appctl time/warp 1000
3292 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3293 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3294 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3295 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3300 AT_SETUP([idle_age and hard_age increase over time])
3303 # get_ages DURATION HARD IDLE
3305 # Fetch the flow duration, hard age, and idle age into the variables
3306 # whose names are given as arguments. Rounds DURATION down to the
3307 # nearest integer. If hard_age doesn't appear in the output, sets
3308 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3311 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3313 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3314 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3315 AS_VAR_COPY([$1], [duration])
3317 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3318 if test X"$hard" = X; then
3321 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3323 AS_VAR_COPY([$2], [hard])
3325 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3326 if test X"$idle" = X; then
3329 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3331 AS_VAR_COPY([$3], [idle])
3334 # Add a flow and get its initial hard and idle age.
3335 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3336 get_ages duration1 hard1 idle1
3338 ovs-appctl time/stop
3339 # Warp time forward by 10 seconds, then modify the flow's actions.
3340 ovs-appctl time/warp 10000
3341 get_ages duration2 hard2 idle2
3342 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3344 # Warp time forward by 10 seconds.
3345 ovs-appctl time/warp 10000
3346 get_ages duration3 hard3 idle3
3348 # Warp time forward 10 more seconds, then pass some packets through the flow,
3349 # then warp forward a few more times because idle times are only updated
3351 ovs-appctl time/warp 10000
3352 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)'
3353 ovs-appctl time/warp 1000
3354 ovs-appctl time/warp 1000
3355 ovs-appctl time/warp 1000
3356 get_ages duration4 hard4 idle4
3358 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3359 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3360 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3362 # Duration should increase steadily over time.
3363 AT_CHECK([test $duration1 -lt $duration2])
3364 AT_CHECK([test $duration2 -lt $duration3])
3365 AT_CHECK([test $duration3 -lt $duration4])
3367 # Hard age should be "none" initially because it's the same as flow_duration,
3368 # then it should increase.
3369 AT_CHECK([test $hard1 = none])
3370 AT_CHECK([test $hard2 = none])
3371 AT_CHECK([test $hard3 != none])
3372 AT_CHECK([test $hard4 != none])
3373 AT_CHECK([test $hard3 -lt $hard4])
3375 # Idle age should increase from 1 to 2 to 3, then decrease.
3376 AT_CHECK([test $idle1 -lt $idle2])
3377 AT_CHECK([test $idle2 -lt $idle3])
3378 AT_CHECK([test $idle3 -gt $idle4])
3380 # Check some invariant relationships.
3381 AT_CHECK([test $duration1 = $idle1])
3382 AT_CHECK([test $duration2 = $idle2])
3383 AT_CHECK([test $duration3 = $idle3])
3384 AT_CHECK([test $idle3 -gt $hard3])
3385 AT_CHECK([test $idle4 -lt $hard4])
3386 AT_CHECK([test $hard4 -lt $duration4])
3391 AT_SETUP([ofproto-dpif - fin_timeout])
3393 AT_DATA([flows.txt], [dnl
3394 in_port=1 actions=output:2
3395 in_port=2 actions=mod_vlan_vid:17,output:1
3397 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3398 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3400 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3403 ovs-appctl time/stop
3404 # Check that a TCP SYN packet does not change the timeout. (Because
3405 # flow stats updates are mainly what implements the fin_timeout
3406 # feature, we warp forward a couple of times to ensure that flow stats
3407 # run before re-checking the flow table.)
3408 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3409 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3412 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3414 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3416 # Check that a TCP FIN packet does change the timeout.
3417 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3418 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3421 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3423 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3428 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3429 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3430 ADD_OF_PORTS([br0], [1], [2])
3431 ADD_OF_PORTS([br1], [3])
3433 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3440 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3441 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3442 ADD_OF_PORTS([br0], [1], [2])
3443 ADD_OF_PORTS([br1], [3])
3445 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3446 dummy@ovs-dummy: hit:0 missed:0
3448 br0 65534/100: (dummy)
3452 br1 65534/101: (dummy)
3458 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3459 OVS_VSWITCHD_START([add-br br1 -- \
3460 set bridge br1 datapath-type=dummy fail-mode=secure])
3461 ADD_OF_PORTS([br0], [1], [2])
3462 ADD_OF_PORTS([br1], [3])
3464 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)'])
3465 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)'])
3466 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)'])
3468 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3469 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:drop
3470 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:drop
3473 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3474 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:drop
3477 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3478 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:drop
3479 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:drop
3482 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3483 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:drop
3489 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3490 OVS_VSWITCHD_START([dnl
3491 add-port br0 p1 -- set Interface p1 type=dummy
3493 ON_EXIT([kill `cat ovs-ofctl.pid`])
3495 AT_CAPTURE_FILE([ofctl_monitor.log])
3496 AT_DATA([flows.txt], [dnl
3497 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3498 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3500 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3502 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3503 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3505 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3506 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)
3507 dnl (label 20, exp 0, [S], ttl 32)
3508 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3509 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3511 for dl_src in 00 01; do
3512 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"])
3514 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3515 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))
3523 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3524 OVS_VSWITCHD_START([dnl
3525 add-port br0 p1 -- set Interface p1 type=dummy
3527 ON_EXIT([kill `cat ovs-ofctl.pid`])
3529 AT_CAPTURE_FILE([ofctl_monitor.log])
3530 AT_DATA([flows.txt], [dnl
3531 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3532 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3534 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3536 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3537 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3538 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3540 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3541 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)
3542 dnl (label 20, exp 0, ttl 32)
3543 dnl (label 20, exp 0, ttl 32)
3544 dnl (label 20, exp 0, [S], ttl 32)
3545 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3546 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3548 for dl_src in 00 01; do
3549 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"])
3551 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3552 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))
3559 AT_SETUP([ofproto-dpif - patch ports])
3560 OVS_VSWITCHD_START([add-br br1 \
3561 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3562 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3563 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3565 ADD_OF_PORTS([br0], [2])
3566 ADD_OF_PORTS([br1], [3])
3568 AT_CHECK([ovs-appctl time/stop])
3570 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3571 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3573 for i in $(seq 1 10); do
3574 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)'
3575 if [[ $i -eq 1 ]]; then
3580 for i in $(seq 1 5); do
3581 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)'
3582 if [[ $i -eq 1 ]]; then
3587 AT_CHECK([ovs-appctl time/warp 500], [0],
3591 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3592 dummy@ovs-dummy: hit:13 missed:2
3594 br0 65534/100: (dummy)
3596 pbr0 1/none: (patch: peer=pbr1)
3598 br1 65534/101: (dummy)
3600 pbr1 1/none: (patch: peer=pbr0)
3603 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3604 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
3606 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3607 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
3610 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3611 OFPST_PORT reply (xid=0x4): 1 ports
3612 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3613 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3616 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3617 OFPST_PORT reply (xid=0x4): 1 ports
3618 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3619 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3625 AT_SETUP([ofproto-dpif - port duration])
3626 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3627 ADD_OF_PORTS([br0], 1, 2)
3629 ovs-appctl time/stop
3630 ovs-appctl time/warp 10000
3632 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3633 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3642 dnl ----------------------------------------------------------------------
3643 AT_BANNER([ofproto-dpif -- megaflows])
3645 AT_SETUP([ofproto-dpif megaflow - port classification])
3647 ADD_OF_PORTS([br0], [1], [2])
3648 AT_DATA([flows.txt], [dnl
3649 table=0 in_port=1 actions=output(2)
3651 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3652 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)'])
3653 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)'])
3655 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3656 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>
3661 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3663 ADD_OF_PORTS([br0], [1], [2])
3664 AT_DATA([flows.txt], [dnl
3665 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3667 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3668 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)'])
3669 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)'])
3671 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3672 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>
3673 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>
3678 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3680 ADD_OF_PORTS([br0], [1], [2])
3681 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], [])
3682 AT_DATA([flows.txt], [dnl
3683 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3685 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3686 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)'])
3687 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)'])
3689 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3690 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>
3691 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>
3696 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3698 ADD_OF_PORTS([br0], [1], [2])
3699 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], [])
3700 AT_DATA([flows.txt], [dnl
3701 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3703 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3704 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)'])
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(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)'])
3707 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3708 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>
3709 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>
3714 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3716 ADD_OF_PORTS([br0], [1], [2])
3717 AT_DATA([flows.txt], [dnl
3718 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3720 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3721 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)'])
3722 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)'])
3723 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3724 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>
3729 AT_SETUP([ofproto-dpif megaflow - normal])
3731 ADD_OF_PORTS([br0], [1], [2])
3732 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3733 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)'])
3734 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)'])
3736 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3737 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>
3738 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>
3743 AT_SETUP([ofproto-dpif megaflow - mpls])
3745 ADD_OF_PORTS([br0], [1], [2])
3746 AT_DATA([flows.txt], [dnl
3747 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3748 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3750 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3751 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)'])
3752 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)'])
3754 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3755 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>
3756 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>
3761 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3763 # IP_VERSION_TYPE is used in AT_SETUP
3764 m4_define([CHECK_MEGAFLOW_NETFLOW],
3765 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3767 ADD_OF_PORTS([br0], [1], [2])
3769 dnl NetFlow configuration disables wildcarding relevant fields
3770 ON_EXIT([kill `cat test-netflow.pid`])
3771 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3772 AT_CAPTURE_FILE([netflow.log])
3773 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3775 set Bridge br0 netflow=@nf -- \
3776 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3777 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3779 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3780 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)'])
3781 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)'])
3783 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3784 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>
3785 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>
3790 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3791 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3793 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3795 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3796 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3797 set interface p2 type=dummy ofport_request=2 -- \
3798 set interface p3 type=dummy ofport_request=3])
3799 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3802 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3803 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)'])
3804 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)'])
3806 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3807 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>
3808 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>
3813 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3815 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3816 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3817 set interface p2 type=dummy ofport_request=2 -- \
3818 set interface p3 type=dummy ofport_request=3])
3819 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3822 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3823 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)'])
3824 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)'])
3826 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3827 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>
3828 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>
3833 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3834 # Create bond0 on br0 with interfaces p0 and p1
3835 # and bond1 on br1 with interfaces p2 and p3
3836 # with p0 patched to p2 and p1 patched to p3.
3838 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3839 other-config:lacp-time=fast \
3840 other-config:bond-rebalance-interval=0 -- \
3841 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3842 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3844 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3845 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3846 fail-mode=secure -- \
3847 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3848 other-config:lacp-time=fast \
3849 other-config:bond-rebalance-interval=0 -- \
3850 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3851 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3853 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3855 ADD_OF_PORTS([br0], [7])
3856 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3857 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
3858 ovs-appctl time/stop
3859 ovs-appctl time/warp 5000
3860 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)'])
3861 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)'])
3863 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3864 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>
3865 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>
3870 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3872 ADD_OF_PORTS([br0], [1], [2])
3873 AT_DATA([flows.txt], [dnl
3874 table=0 in_port=1,ip actions=resubmit(90)
3875 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3877 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3878 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)'])
3879 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)'])
3881 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3882 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>
3883 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>
3888 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3890 ADD_OF_PORTS([br0], [1], [2])
3891 AT_DATA([flows.txt], [dnl
3892 table=0 in_port=1,ip actions=resubmit(,1)
3893 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3895 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3896 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)'])
3897 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=
3898 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3900 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3901 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>
3902 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>
3907 AT_SETUP([ofproto-dpif megaflow - goto_table action])
3909 ADD_OF_PORTS([br0], [1], [2])
3910 AT_DATA([flows.txt], [dnl
3911 table=0 in_port=1,ip actions=goto_table(1)
3912 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3914 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3915 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)'])
3916 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)'])
3918 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3919 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>
3920 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>
3925 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3927 ADD_OF_PORTS([br0], [1], [2], [3])
3929 set Bridge br0 mirrors=@m --\
3930 --id=@p3 get Port p3 --\
3931 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3933 AT_DATA([flows.txt], [dnl
3934 in_port=1 actions=output:2
3936 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3937 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)'])
3938 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)'])
3940 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3941 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>
3946 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3948 ADD_OF_PORTS([br0], [1], [2], [3])
3950 set Bridge br0 mirrors=@m --\
3951 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3952 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3954 AT_DATA([flows.txt], [dnl
3955 in_port=1 actions=output:2
3957 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3958 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))'])
3959 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)'])
3961 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3962 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>
3963 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>
3968 AT_SETUP([ofproto-dpif megaflow - move action])
3970 ADD_OF_PORTS([br0], [1], [2])
3971 AT_DATA([flows.txt], [dnl
3972 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
3973 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
3974 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
3976 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3977 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)'])
3978 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)'])
3980 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3981 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>
3982 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>
3987 AT_SETUP([ofproto-dpif megaflow - push action])
3989 ADD_OF_PORTS([br0], [1], [2])
3990 AT_DATA([flows.txt], [dnl
3991 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
3993 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3994 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)'])
3995 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)'])
3997 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3998 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>
3999 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>
4004 AT_SETUP([ofproto-dpif megaflow - learning])
4006 ADD_OF_PORTS([br0], [1], [2])
4007 AT_DATA([flows.txt], [dnl
4008 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
4010 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4011 ovs-appctl time/stop
4012 # We send each packet twice because the first packet in each flow causes the
4013 # flow table to change and thus revalidations, which (depending on timing)
4014 # can keep a megaflow from being installed. The revalidations are done by
4015 # the second iteration, allowing the flows to be installed.
4017 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)'])
4018 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)'])
4019 ovs-appctl time/warp 100
4022 dnl The original flow is missing due to a revalidation.
4023 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4024 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>
4025 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>
4030 AT_SETUP([ofproto-dpif megaflow - tunnels])
4032 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4033 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4034 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4035 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4037 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4038 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4039 ofport_request=4 options:key=flow])
4040 AT_DATA([flows.txt], [dnl
4041 in_port=1,actions=output(2)
4042 in_port=3,actions=output(4)
4044 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4045 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4046 dnl will cause the packet to be dropped.
4047 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)'])
4048 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)'])
4049 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)'])
4050 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)'])
4052 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4053 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>
4054 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>
4055 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>
4060 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4062 ADD_OF_PORTS([br0], [1], [2])
4063 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], [])
4064 AT_DATA([flows.txt], [dnl
4065 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4067 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4068 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)'])
4069 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)'])
4071 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4072 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>
4073 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>
4078 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4080 ADD_OF_PORTS([br0], [1], [2])
4081 AT_DATA([flows.txt], [dnl
4082 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4084 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4085 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)'])
4086 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4088 dnl The megaflows do not match the same fields, since the first packet
4089 dnl is essentially a no-op. (The new destination MAC is the same as the
4090 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4091 dnl so that a packet that doesn't need its MAC address changed doesn't
4092 dnl hide one that does. Since the first entry doesn't need to change,
4093 dnl only the destination MAC address is matched (as decided by
4094 dnl ofproto-dpif). The second entry actually updates the destination
4095 dnl MAC, so both the source and destination MAC addresses are
4096 dnl un-wildcarded, since the ODP commit functions update both the source
4097 dnl and destination MAC addresses.
4098 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4099 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
4100 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
4105 AT_SETUP([ofproto-dpif megaflow - disabled])
4107 ADD_OF_PORTS([br0], [1], [2])
4108 AT_DATA([flows.txt], [dnl
4109 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4110 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4112 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4114 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4115 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4116 for i in 1 2 3 4; do
4117 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)'])
4118 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)'])
4121 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4122 skb_priority(0),skb_mark(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,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
4123 skb_priority(0),skb_mark(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,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
4128 AT_SETUP([ofproto-dpif - datapath port number change])
4129 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4130 ADD_OF_PORTS([br0], 1)
4132 # Trace a flow that should output to p1.
4133 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4135 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4138 # Change p1's port number to 5.
4139 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4141 # Trace a flow that should output to p1 in its new location.
4142 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4144 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4149 # Tests the bundling with various bfd and cfm configurations.
4150 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4151 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4152 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4153 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4154 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4155 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4156 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4157 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4158 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4159 set Interface p0 cfm_mpid=1 -- \
4160 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4162 ovs-appctl time/stop
4163 # advance the clock to stablize everything.
4164 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4165 # cfm/show should show 'recv' fault.
4166 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4169 # bfd/show should show 'up'.
4170 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4171 Local Session State: up
4172 Remote Session State: up
4173 Local Session State: up
4174 Remote Session State: up
4176 # bond/show should show 'may-enable: true' for all slaves.
4177 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4184 # now disable the bfd on p1.
4185 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4186 # advance the clock to stablize everything.
4187 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4188 # cfm/show should show 'recv' fault.
4189 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4192 # bfd/show should show 'down'.
4193 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4194 Local Session State: down
4195 Remote Session State: down
4197 # bond/show should show 'may-enable: false' for p0.
4198 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4203 # now enable the bfd on p1 and disable bfd on p0.
4204 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4205 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4206 # advance the clock to stablize everything.
4207 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4208 # cfm/show should show 'recv' fault.
4209 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4212 # bfd/show should show 'down'.
4213 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4214 Local Session State: down
4215 Remote Session State: down
4217 # bond/show should show 'may-enable: false' for p0 and p1.
4218 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4228 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4229 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4232 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
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])
4240 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4241 monitor thread terminated
4243 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4246 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4248 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4249 monitor thread created
4251 # disable cfm on p0.
4252 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4254 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4255 monitor thread terminated
4257 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4259 # enable both bfd and cfm on p0.
4260 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4262 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4263 monitor thread created
4265 # disable bfd on p0.
4266 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4267 # check log, there should not be the log of thread terminated.
4268 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4270 # reenable bfd on p0.
4271 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4272 # check log, should still be on log of thread created.
4273 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4274 monitor thread created
4276 # disable bfd and cfm together.
4277 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4279 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4280 monitor thread terminated
4286 # this test helps avoid the deadlock between the main thread and monitor thread.
4287 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4290 for i in `seq 1 199`
4292 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])
4298 AT_BANNER([ofproto-dpif - flow translation resource limits])
4300 AT_SETUP([ofproto-dpif - infinite resubmit])
4302 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4303 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4305 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4307 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4310 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4313 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4315 ADD_OF_PORTS([br0], 1)
4316 (for i in `seq 1 64`; do
4318 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4320 echo "in_port=65, actions=local") > flows
4321 AT_CHECK([ovs-ofctl add-flows br0 flows])
4322 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4323 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4325 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4328 AT_SETUP([ofproto-dpif - too many output actions])
4330 ADD_OF_PORTS([br0], 1)
4331 (for i in `seq 1 12`; do
4333 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4335 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4336 AT_CHECK([ovs-ofctl add-flows br0 flows])
4337 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4338 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4341 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4343 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4346 AT_SETUP([ofproto-dpif - stack too deep])
4348 ADD_OF_PORTS([br0], 1)
4349 (for i in `seq 1 12`; do
4351 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4353 push="push:NXM_NX_REG0[[]]"
4354 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4355 AT_CHECK([ovs-ofctl add-flows br0 flows])
4356 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4357 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4359 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])