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
339 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
340 dnl buffer to be resized just before pushing the id of the dec_ttl action.
341 dnl Thus the implementation must account for this by using the
342 dnl reallocated buffer rather than the original buffer.
344 dnl A number of similar rules are added to try and exercise
345 dnl xrealloc sufficiently that it returns a different base pointer
346 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
348 ADD_OF_PORTS([br0], [1])
349 (for i in `seq 0 255`; do
350 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
352 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
356 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
357 dnl buffer to be resized just before pushing the id of the dec_ttl action.
358 dnl Thus the implementation must account for this by using the
359 dnl reallocated buffer rather than the original buffer.
361 dnl A number of similar rules are added to try and exercise
362 dnl xrealloc sufficiently that it returns a different base pointer
363 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
365 ADD_OF_PORTS([br0], [1])
366 (for i in `seq 0 255`; do
367 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
369 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
373 dnl A note action at offset 24 in ofpacts will cause the ofpacts
374 dnl buffer to be resized just before pushing the id of the dec_ttl action.
375 dnl Thus the implementation must account for this by using the
376 dnl reallocated buffer rather than the original buffer.
378 dnl A number of similar rules are added to try and exercise
379 dnl xrealloc sufficiently that it returns a different base pointer
380 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
382 ADD_OF_PORTS([br0], [1])
383 (for i in `seq 0 255`; do
384 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
386 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
390 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
392 ADD_OF_PORTS([br0], [1], [2])
394 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
396 # "in_port" defaults to OFPP_NONE if it's not specified.
397 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"
398 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
399 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
408 AT_SETUP([ofproto-dpif - DSCP])
409 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
410 ADD_OF_PORTS([br0], [9])
411 AT_DATA([flows.txt], [dnl
412 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
414 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
415 AT_CHECK([ovs-vsctl -- \
416 set Port p1 qos=@newqos --\
417 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
418 --id=@q1 create Queue dscp=1 --\
419 --id=@q2 create Queue dscp=2], [0], [ignore])
420 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])
421 AT_CHECK([tail -1 stdout], [0],
422 [Datapath actions: dnl
424 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
425 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
427 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
428 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
429 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
435 AT_SETUP([ofproto-dpif - output/flood flags])
437 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
439 AT_DATA([flows.txt], [dnl
440 in_port=local actions=local,flood
441 in_port=1 actions=flood
442 in_port=2 actions=all
443 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
444 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
446 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
447 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
448 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
450 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])
451 AT_CHECK([tail -1 stdout \
452 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
460 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])
461 AT_CHECK([tail -1 stdout \
462 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
470 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])
471 AT_CHECK([tail -1 stdout \
472 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
481 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])
482 AT_CHECK([tail -1 stdout], [0],
483 [Datapath actions: 100,1,2,4,6,7
486 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])
487 AT_CHECK([tail -1 stdout], [0],
488 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
493 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
494 OVS_VSWITCHD_START([dnl
495 add-port br0 p1 -- set Interface p1 type=dummy
497 ON_EXIT([kill `cat ovs-ofctl.pid`])
499 AT_CAPTURE_FILE([ofctl_monitor.log])
501 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
504 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)'
506 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
507 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
508 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
509 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
510 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
512 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
513 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
515 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
516 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
519 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
520 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
527 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
528 OVS_VSWITCHD_START([dnl
529 add-port br0 p1 -- set Interface p1 type=dummy
531 ON_EXIT([kill `cat ovs-ofctl.pid`])
533 AT_CAPTURE_FILE([ofctl_monitor.log])
534 AT_CHECK([ovs-ofctl del-flows br0])
536 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
538 dnl Test that missed packets are droped
540 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)'
542 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
544 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
547 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
548 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
549 OFPST_FLOW reply (OF1.3):
555 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
556 OVS_VSWITCHD_START([dnl
557 add-port br0 p1 -- set Interface p1 type=dummy
559 ON_EXIT([kill `cat ovs-ofctl.pid`])
561 AT_CAPTURE_FILE([ofctl_monitor.log])
562 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
564 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
567 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)'
569 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
570 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
571 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
572 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
573 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
575 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
576 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
578 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
579 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
582 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
583 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
584 n_packets=3, n_bytes=180, actions=goto_table:1
585 OFPST_FLOW reply (OF1.2):
591 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
592 OVS_VSWITCHD_START([dnl
593 add-port br0 p1 -- set Interface p1 type=dummy
595 ON_EXIT([kill `cat ovs-ofctl.pid`])
597 AT_CAPTURE_FILE([ofctl_monitor.log])
598 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
600 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --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)'
606 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
607 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
610 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
611 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
612 n_packets=3, n_bytes=180, actions=resubmit(1,1)
613 OFPST_FLOW reply (OF1.2):
619 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
620 OVS_VSWITCHD_START([dnl
621 add-port br0 p1 -- set Interface p1 type=dummy
623 ON_EXIT([kill `cat ovs-ofctl.pid`])
625 AT_CAPTURE_FILE([ofctl_monitor.log])
626 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
627 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
629 dnl Miss table 0, Hit table 1
630 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
633 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)'
635 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
636 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
638 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
639 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
640 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
642 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
643 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
645 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
646 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
649 dnl Hit table 0, Miss all other tables, sent to controller
650 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
653 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)'
655 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
656 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
658 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
659 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
660 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
662 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
663 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
665 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
666 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
669 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
670 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
671 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
672 OFPST_FLOW reply (OF1.2):
678 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
679 OVS_VSWITCHD_START([dnl
680 add-port br0 p1 -- set Interface p1 type=dummy
682 ON_EXIT([kill `cat ovs-ofctl.pid`])
684 AT_CAPTURE_FILE([ofctl_monitor.log])
685 AT_DATA([flows.txt], [dnl
686 table=0 actions=goto_table(1)
687 table=2 dl_src=10:11:11:11:11:11 actions=controller
689 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
690 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
692 dnl Hit table 0, Miss table 1, Hit table 2
693 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
696 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)'
698 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
699 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
701 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
702 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
703 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
705 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
706 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
708 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
709 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
712 dnl Hit table 1, Miss all other tables, sent to controller
713 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
716 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)'
718 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
719 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
721 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
722 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
723 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
725 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
726 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
728 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
729 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
732 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
733 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
734 n_packets=6, n_bytes=360, actions=goto_table:1
735 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
736 OFPST_FLOW reply (OF1.2):
742 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
743 OVS_VSWITCHD_START([dnl
744 add-port br0 p1 -- set Interface p1 type=dummy
746 ON_EXIT([kill `cat ovs-ofctl.pid`])
748 AT_CAPTURE_FILE([ofctl_monitor.log])
749 AT_DATA([flows.txt], [dnl
750 table=0 actions=resubmit(1,1)
751 table=2 dl_src=10:11:11:11:11:11 actions=controller
753 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
754 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
756 dnl Hit table 0, Miss table 1, Dropped
757 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
760 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)'
762 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
764 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
767 dnl Hit table 1, Dropped
768 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
771 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)'
773 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
775 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
778 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
779 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
780 n_packets=6, n_bytes=360, actions=resubmit(1,1)
781 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
782 OFPST_FLOW reply (OF1.2):
788 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
789 OVS_VSWITCHD_START([dnl
790 add-port br0 p1 -- set Interface p1 type=dummy
792 ON_EXIT([kill `cat ovs-ofctl.pid`])
794 AT_CAPTURE_FILE([ofctl_monitor.log])
795 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
797 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
799 dnl Test that missed packets are droped
801 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)'
803 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
805 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
808 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
809 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
816 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
817 OVS_VSWITCHD_START([dnl
818 add-port br0 p1 -- set Interface p1 type=dummy
820 ON_EXIT([kill `cat ovs-ofctl.pid`])
822 AT_CAPTURE_FILE([ofctl_monitor.log])
823 AT_CHECK([ovs-ofctl del-flows br0])
824 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
825 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
827 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
829 dnl Test that missed packets are droped
831 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)'
833 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
835 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
838 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
839 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
840 n_packets=3, n_bytes=180, actions=goto_table:1
841 OFPST_FLOW reply (OF1.2):
847 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
848 OVS_VSWITCHD_START([dnl
849 add-port br0 p1 -- set Interface p1 type=dummy
851 ON_EXIT([kill `cat ovs-ofctl.pid`])
853 AT_CAPTURE_FILE([ofctl_monitor.log])
854 AT_CHECK([ovs-ofctl del-flows br0])
855 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
856 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
858 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
860 dnl Test that missed packets are droped
862 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)'
864 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
866 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
869 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
870 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
871 n_packets=3, n_bytes=180, actions=resubmit(1,1)
872 OFPST_FLOW reply (OF1.2):
878 AT_SETUP([ofproto-dpif - controller])
879 OVS_VSWITCHD_START([dnl
880 add-port br0 p1 -- set Interface p1 type=dummy
882 ON_EXIT([kill `cat ovs-ofctl.pid`])
884 AT_CAPTURE_FILE([ofctl_monitor.log])
885 AT_DATA([flows.txt], [dnl
886 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
887 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
888 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
890 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
891 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)
892 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)
893 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
894 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)
895 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
896 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
897 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
898 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
899 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
900 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
901 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
902 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
903 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
904 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
905 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
906 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
907 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
908 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
909 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
911 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
914 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
917 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)'
919 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
920 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
922 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
923 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
924 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
926 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
927 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
929 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
930 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
933 dnl Singleton controller action.
934 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
937 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)'
939 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
940 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
942 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
943 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
944 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
946 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
947 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
949 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
950 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
953 dnl Modified controller action.
954 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
957 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)'
959 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
960 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
962 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
963 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
964 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
966 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
967 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
969 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
970 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
973 dnl Modified VLAN controller action.
974 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
977 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)'
979 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
980 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
982 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
983 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
984 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
986 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
987 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
989 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
990 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
993 dnl Modified MPLS controller action.
994 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
997 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)'
999 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1000 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1002 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1003 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1004 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
1006 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1007 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1009 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1010 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1013 dnl Modified MPLS controller action.
1014 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1017 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)'
1019 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1020 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1022 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1023 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1024 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
1026 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1027 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
1029 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1030 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
1033 dnl Modified MPLS controller action.
1034 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1036 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)
1039 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)'
1042 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1043 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1044 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1045 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
1047 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1048 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
1050 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1051 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
1054 dnl Modified MPLS controller action.
1055 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1058 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))'
1060 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1061 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1063 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1064 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1065 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
1067 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1068 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
1070 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1071 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
1074 dnl Modified MPLS controller action.
1075 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1078 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)'
1080 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1081 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1083 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1084 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1085 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
1087 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1088 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
1090 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1091 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
1094 dnl Modified MPLS controller action.
1095 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1098 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)'
1100 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1101 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1103 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1104 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1105 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
1107 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1108 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
1110 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1111 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
1114 dnl Modified MPLS controller action.
1115 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1118 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)'
1120 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1121 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1123 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1124 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1125 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
1127 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1128 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
1130 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1131 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
1134 dnl Modified MPLS controller action.
1135 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1138 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)'
1140 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1141 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1143 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1144 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1145 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
1147 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1148 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
1150 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1151 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
1154 dnl Modified MPLS actions.
1155 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1158 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)'
1160 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1161 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1163 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1164 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1165 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
1167 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1168 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
1170 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1171 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
1174 dnl Modified MPLS ipv6 controller action.
1175 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1178 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)'
1180 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1181 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1183 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1184 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1185 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
1187 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1188 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
1190 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1191 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
1195 dnl Modified MPLS pop action.
1196 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1197 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)
1198 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1200 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1203 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'
1206 # 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)'
1208 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1209 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1211 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1212 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1213 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
1215 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1216 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
1218 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1219 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
1223 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1226 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)'
1228 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1229 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1231 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1232 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1233 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
1235 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1236 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
1238 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)
1239 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
1241 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)
1242 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
1244 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)
1245 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
1247 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)
1248 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
1250 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)
1251 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
1253 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)
1254 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
1256 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)
1257 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
1261 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1264 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'
1266 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1267 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1269 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1270 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1271 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
1273 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1274 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
1276 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)
1277 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
1279 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)
1280 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
1282 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)
1283 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
1285 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)
1286 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
1288 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)
1289 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
1291 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)
1292 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
1294 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)
1295 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
1298 dnl Modified ARP controller action.
1299 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1302 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)'
1305 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1306 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1307 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1308 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1309 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
1310 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1311 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
1312 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1313 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
1314 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1315 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
1316 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1317 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
1318 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1319 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
1320 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1321 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
1322 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1323 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
1324 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1325 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
1328 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1331 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1334 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'
1337 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1338 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1339 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1340 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1341 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
1343 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1344 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
1346 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)
1347 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
1349 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)
1350 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
1352 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)
1353 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
1355 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)
1356 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
1358 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)
1359 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
1361 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)
1362 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
1364 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)
1365 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
1368 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1369 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1370 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1371 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)
1372 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)
1373 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)
1374 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)
1375 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)
1376 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1377 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1378 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
1379 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
1380 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
1381 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
1382 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
1383 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
1384 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
1385 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
1386 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
1387 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
1388 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
1389 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
1390 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1391 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1399 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1400 OVS_VSWITCHD_START([dnl
1401 add-port br0 p1 -- set Interface p1 type=dummy
1403 ON_EXIT([kill `cat ovs-ofctl.pid`])
1405 AT_CAPTURE_FILE([ofctl_monitor.log])
1406 # A table-miss flow has priority 0 and no match
1407 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1409 dnl Singleton controller action.
1410 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1413 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)'
1415 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1416 ovs-appctl -t ovs-ofctl exit
1418 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1419 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1420 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 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1423 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
1425 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1426 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
1429 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1431 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1432 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1440 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1441 OVS_VSWITCHD_START([dnl
1442 add-port br0 p1 -- set Interface p1 type=dummy
1444 ON_EXIT([kill `cat ovs-ofctl.pid`])
1446 AT_CAPTURE_FILE([ofctl_monitor.log])
1447 # A table-miss flow has priority 0 and no match
1448 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1450 dnl Singleton controller action.
1451 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1454 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)'
1456 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1457 ovs-appctl -t ovs-ofctl exit
1459 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1461 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1462 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1463 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
1465 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1466 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
1468 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1469 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
1472 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1474 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1475 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1476 OFPST_FLOW reply (OF1.3):
1482 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1484 ADD_OF_PORTS([br0], [1], [2])
1486 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1487 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'
1489 # Input some packets that should follow the arp modification slow-path.
1491 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)'
1493 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1495 # Check the packets that were output.
1496 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1497 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
1498 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
1499 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
1500 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
1501 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
1502 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
1503 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
1504 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
1505 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
1511 AT_SETUP([ofproto-dpif - VLAN handling])
1513 [set Bridge br0 fail-mode=standalone -- \
1514 add-port br0 p1 trunks=10,12 -- \
1515 add-port br0 p2 tag=10 -- \
1516 add-port br0 p3 tag=12 \
1517 other-config:priority-tags=true -- \
1518 add-port br0 p4 tag=12 -- \
1519 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1520 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1521 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1522 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1523 other-config:priority-tags=true -- \
1524 set Interface p1 type=dummy -- \
1525 set Interface p2 type=dummy -- \
1526 set Interface p3 type=dummy -- \
1527 set Interface p4 type=dummy -- \
1528 set Interface p5 type=dummy -- \
1529 set Interface p6 type=dummy -- \
1530 set Interface p7 type=dummy -- \
1531 set Interface p8 type=dummy --])
1533 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1534 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1540 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1541 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1544 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1545 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1549 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1550 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1553 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1554 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1555 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1556 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1557 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1564 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1565 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1566 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1573 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1574 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1575 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1582 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1583 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1584 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1585 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1586 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1589 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1590 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1591 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1592 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1593 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1594 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1595 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1598 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1599 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1600 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1601 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1602 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1603 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1604 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1607 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1608 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1609 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1610 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1611 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1612 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1613 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1616 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1617 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1625 if test $vlan = none; then
1626 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1628 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))"
1631 echo "----------------------------------------------------------------------"
1632 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1634 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1635 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1637 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1639 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1645 AT_SETUP([ofproto-dpif - MPLS handling])
1646 OVS_VSWITCHD_START([dnl
1647 add-port br0 p1 -- set Interface p1 type=dummy
1649 ON_EXIT([kill `cat ovs-ofctl.pid`])
1651 AT_CAPTURE_FILE([ofctl_monitor.log])
1652 AT_DATA([flows.txt], [dnl
1653 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1654 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1655 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1657 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1659 dnl In this test, we push an MPLS tag to an ethernet packet.
1660 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1663 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)'
1665 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1666 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1668 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1669 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1670 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
1671 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1672 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1673 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1674 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1676 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1677 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
1678 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1679 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1680 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1681 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1683 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1684 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
1685 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1686 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1687 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1688 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1691 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1692 dnl copied exactly, except for the BOS bit.
1693 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1696 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)'
1698 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1699 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1701 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1702 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1703 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
1704 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1705 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1706 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1707 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1709 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1710 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
1711 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1712 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1713 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1714 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1716 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1717 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
1718 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1719 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1720 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1721 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1724 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1725 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1726 dnl to the MPLS ethertype of the MPLS push action which differs to that
1727 dnl of the input packet.
1728 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1731 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)'
1733 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1734 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1736 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1737 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1738 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
1739 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1740 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1741 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1742 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1744 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1745 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
1746 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1747 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1748 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1749 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1751 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1752 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
1753 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1754 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1755 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1756 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1762 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1763 OVS_VSWITCHD_START([dnl
1764 add-port br0 p1 -- set Interface p1 type=dummy
1766 ON_EXIT([kill `cat ovs-ofctl.pid`])
1768 AT_CAPTURE_FILE([ofctl_monitor.log])
1769 AT_DATA([flows.txt], [dnl
1770 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
1771 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
1772 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
1773 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
1774 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
1775 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
1776 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
1777 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
1778 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
1779 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
1781 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1783 dnl Modified MPLS controller action.
1784 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1785 dnl both of these in the final flow
1786 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1789 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)'
1791 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1792 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1794 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1795 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1796 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
1797 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1798 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1799 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1800 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1801 00000040 00 00 00 00
1803 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1804 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
1805 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1806 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1807 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1808 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1809 00000040 00 00 00 00
1811 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1812 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
1813 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1814 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1815 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1816 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1817 00000040 00 00 00 00
1820 dnl Modified MPLS controller action.
1821 dnl In this test, the input packet in vlan-tagged, which should be stripped
1822 dnl before we push the MPLS and VLAN tags.
1823 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1826 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))'
1828 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1829 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1831 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1832 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1833 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1834 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1835 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1836 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1837 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1839 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1840 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1841 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1842 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1843 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1844 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1846 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1847 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
1848 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1849 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1850 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1851 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1854 dnl Modified MPLS controller action.
1855 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1856 dnl both of these in the final flow
1857 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1860 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)'
1862 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1863 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1865 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1866 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1867 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
1868 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1869 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1870 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1871 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1872 00000040 00 00 00 00
1874 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1875 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
1876 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1877 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1878 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1879 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1880 00000040 00 00 00 00
1882 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1883 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
1884 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1885 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1886 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1887 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1888 00000040 00 00 00 00
1891 dnl Modified MPLS controller action.
1892 dnl In this test, the input packet in vlan-tagged, which should be stripped
1893 dnl before we push the MPLS and VLAN tags.
1894 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1897 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))'
1899 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1900 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1902 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1903 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1904 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,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 53 81 00 20 63
1906 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1907 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1908 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1910 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1911 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1912 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1913 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1914 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1915 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1917 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1918 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
1919 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1920 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1921 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1922 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1925 dnl Modified MPLS controller action.
1926 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1927 dnl actions are reordered, so we see both of these in the final flow.
1928 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1931 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)'
1933 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1934 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1936 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1937 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1938 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
1939 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1940 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1941 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1942 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1943 00000040 00 00 00 00
1945 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1946 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
1947 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1948 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1949 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1950 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1951 00000040 00 00 00 00
1953 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1954 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
1955 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1956 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1957 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1958 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1959 00000040 00 00 00 00
1962 dnl Modified MPLS controller action.
1963 dnl In this test, the input packet in vlan-tagged, which should be stripped
1964 dnl before we push the MPLS and VLAN tags.
1965 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1968 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))'
1970 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1971 ovs-appctl -t ovs-ofctl exit
1973 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1974 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1975 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,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 55 81 00 20 63
1977 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1978 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1979 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1981 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1982 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1983 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1984 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1985 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1986 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1988 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1989 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
1990 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1991 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1992 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1993 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1996 dnl Modified MPLS controller action.
1997 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1998 dnl actions are reordered, so we see both of these in the final flow.
1999 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2002 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)'
2004 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2005 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2007 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2008 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2009 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
2010 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2011 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2012 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2013 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2014 00000040 00 00 00 00
2016 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2017 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
2018 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2019 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2020 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2021 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2022 00000040 00 00 00 00
2024 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2025 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
2026 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2027 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2028 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2029 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2030 00000040 00 00 00 00
2033 dnl Modified MPLS controller action.
2034 dnl In this test, the input packet in vlan-tagged, which should be stripped
2035 dnl before we push the MPLS and VLAN tags.
2036 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2039 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))'
2041 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2042 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2044 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2045 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2046 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
2047 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2048 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2049 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2050 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2052 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2053 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
2054 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2055 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2056 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2057 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2059 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2060 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
2061 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2062 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2063 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2064 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2067 dnl Modified MPLS controller action.
2068 dnl In this test, the input packet in vlan-tagged, which should be stripped
2069 dnl before we push the MPLS and VLAN tags.
2070 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2073 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))'
2075 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2076 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2078 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2079 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2080 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
2081 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2082 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2083 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2084 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2086 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2087 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
2088 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2089 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2090 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2091 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2093 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2094 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
2095 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2096 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2097 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2098 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2101 dnl Modified MPLS controller action.
2102 dnl In this test, the input packet in vlan-tagged, which should be modified
2103 dnl before we push MPLS and VLAN tags.
2104 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2107 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))'
2109 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2110 ovs-appctl -t ovs-ofctl exit
2112 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2113 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2114 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
2115 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2116 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2117 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2118 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2120 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2121 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
2122 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2123 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2124 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2125 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2127 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2128 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
2129 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2130 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2131 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2132 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2135 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2136 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2137 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
2138 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
2139 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
2140 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
2141 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
2142 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
2143 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
2144 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
2145 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
2146 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
2147 OFPST_FLOW reply (OF1.2):
2153 AT_SETUP([ofproto-dpif - fragment handling])
2155 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2156 AT_DATA([flows.txt], [dnl
2157 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2158 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2159 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2160 priority=50 tcp ip_frag=no actions=output:4
2161 priority=50 tcp ip_frag=first actions=output:5
2162 priority=50 tcp ip_frag=later actions=output:6
2164 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2166 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"
2167 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2168 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2169 later_flow="$base_flow,frag=later)"
2171 # mode no first later
2174 'drop 1 drop drop' \
2183 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2184 for type in no first later; do
2185 eval flow=\$${type}_flow exp_output=\$$type
2186 printf "\n%s\n" "----$mode $type-----"
2187 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2189 if test $mode = drop && test $type != no; then
2190 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2192 echo "Datapath actions: $exp_output" >> expout
2193 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2199 AT_SETUP([ofproto-dpif - exit])
2201 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2202 AT_DATA([flows.txt], [dnl
2203 in_port=1 actions=output:10,exit,output:11
2204 in_port=2 actions=output:12,resubmit:1,output:12
2205 in_port=3 actions=output:13,resubmit:2,output:14
2207 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2208 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])
2209 AT_CHECK([tail -1 stdout], [0],
2210 [Datapath actions: 10
2212 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])
2213 AT_CHECK([tail -1 stdout], [0],
2214 [Datapath actions: 12,10
2216 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])
2217 AT_CHECK([tail -1 stdout], [0],
2218 [Datapath actions: 13,12,10
2224 AT_SETUP([ofproto-dpif - mirroring, select_all])
2226 ADD_OF_PORTS([br0], 1, 2, 3)
2228 set Bridge br0 mirrors=@m --\
2229 --id=@p3 get Port p3 --\
2230 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2232 AT_DATA([flows.txt], [dnl
2233 in_port=1 actions=output:2
2234 in_port=2 actions=output:1
2236 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2238 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)"
2239 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2240 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2241 [Datapath actions: 2,3
2244 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)"
2245 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2246 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2247 [Datapath actions: 1,3
2254 AT_SETUP([ofproto-dpif - mirroring, select_src])
2256 ADD_OF_PORTS([br0], 1, 2, 3)
2258 set Bridge br0 mirrors=@m --\
2259 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2260 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2262 AT_DATA([flows.txt], [dnl
2263 in_port=1 actions=output:2
2264 in_port=2 actions=output:1
2266 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2268 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
2269 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2270 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2271 [Datapath actions: 2,3
2274 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)"
2275 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2276 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2277 [Datapath actions: 1
2282 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2284 ADD_OF_PORTS([br0], 1, 2)
2286 set Bridge br0 mirrors=@m --\
2287 --id=@p2 get Port p2 --\
2288 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2290 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2292 # "in_port" defaults to OFPP_NONE if it's not specified.
2293 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"
2294 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2295 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2296 [Datapath actions: 1,2
2303 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2305 ADD_OF_PORTS([br0], 1, 2, 3)
2307 set Bridge br0 mirrors=@m --\
2308 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2309 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2311 AT_DATA([flows.txt], [dnl
2312 in_port=1 actions=output:2
2313 in_port=2 actions=output:1
2315 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2317 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)"
2318 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2319 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2320 [Datapath actions: 2,3
2323 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)"
2324 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2325 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2326 [Datapath actions: 1
2333 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2335 ADD_OF_PORTS([br0], 1, 2, 3)
2337 set Bridge br0 mirrors=@m --\
2338 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2339 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2341 AT_DATA([flows.txt], [dnl
2342 in_port=1, actions=output:2
2344 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2346 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)"
2347 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2348 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2349 [Datapath actions: 2
2352 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))"
2353 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2354 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2355 [Datapath actions: 2
2358 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))"
2359 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2360 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2361 [Datapath actions: 2,3
2368 AT_SETUP([ofproto-dpif - mirroring, output_port])
2370 ADD_OF_PORTS([br0], 1, 2, 3)
2372 set Bridge br0 mirrors=@m --\
2373 --id=@p3 get Port p3 --\
2374 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2376 AT_DATA([flows.txt], [dnl
2377 in_port=1 actions=mod_vlan_vid:17,output:2
2378 in_port=2 actions=output:1
2380 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2382 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)"
2383 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2384 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2385 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2388 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)"
2389 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2390 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2391 [Datapath actions: 1,3
2397 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2399 ADD_OF_PORTS([br0], 1, 2)
2401 set Bridge br0 mirrors=@m --\
2402 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2404 AT_DATA([flows.txt], [dnl
2405 in_port=1 actions=output:2
2406 in_port=2 actions=mod_vlan_vid:17,output:1
2408 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2410 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)"
2411 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2412 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2414 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2415 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2417 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2419 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)"
2420 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2421 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2423 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2424 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2426 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2431 # Two testcases below are for the ofproto/trace command
2432 # The first one tests all correct syntax:
2433 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2434 # ofproto/trace br_name br_flow [-generate|packet]
2435 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2436 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2437 ADD_OF_PORTS([br0], 1, 2, 3)
2439 AT_DATA([flows.txt], [dnl
2440 in_port=1 actions=output:2
2441 in_port=2 actions=output:1
2443 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2445 odp_flow="in_port(p1)"
2447 # Test command: ofproto/trace odp_flow with in_port as a name.
2448 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2449 AT_CHECK([tail -1 stdout], [0], [dnl
2453 odp_flow="in_port(1)"
2454 # Test command: ofproto/trace odp_flow
2455 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2456 AT_CHECK([tail -1 stdout], [0], [dnl
2460 # Test command: ofproto/trace dp_name odp_flow
2461 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2462 AT_CHECK([tail -1 stdout], [0], [dnl
2465 # Test commmand: ofproto/trace br_name br_flow
2466 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2467 AT_CHECK([tail -1 stdout], [0], [dnl
2471 # Delete the inserted flows
2472 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2473 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2475 # This section beflow tests the [-generate] option
2476 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2477 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"
2479 # Test command: ofproto/trace odp_flow
2480 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2481 # Check for no MAC learning entry
2482 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2486 # Test command: ofproto/trace br_name br_flow
2487 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2488 # Check for no MAC learning entry
2489 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2493 # Test command: ofproto/trace odp_flow -generate
2494 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2495 # Check for the MAC learning entry
2496 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2498 3 0 50:54:00:00:00:05 ?
2501 # Test command: ofproto/trace dp_name odp_flow -generate
2502 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2503 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2504 -generate], [0], [stdout])
2505 # Check for both MAC learning entries
2506 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2508 3 0 50:54:00:00:00:05 ?
2509 1 0 50:54:00:00:00:06 ?
2512 # Test command: ofproto/trace br_name br_flow -generate
2513 AT_CHECK([ovs-appctl ofproto/trace br0 \
2514 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2515 -generate], [0], [stdout])
2516 # Check for both MAC learning entries.
2517 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2519 3 0 50:54:00:00:00:05 ?
2520 1 0 50:54:00:00:00:06 ?
2521 2 0 50:54:00:00:00:07 ?
2524 # This section beflow tests the [packet] option
2525 # The ovs-tcpundump of packets between port1 and port2
2526 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2527 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2529 # Construct the MAC learning table
2530 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2531 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2532 -generate], [0], [stdout])
2534 # Construct the MAC learning table
2535 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2536 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2537 -generate], [0], [stdout])
2539 # Test command: ofproto/trace odp_flow packet
2540 AT_CHECK([ovs-appctl ofproto/trace \
2541 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2542 AT_CHECK([tail -1 stdout], [0], [dnl
2545 AT_CHECK([head -n 2 stdout], [0], [dnl
2547 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
2550 # Test command: ofproto/trace dp_name odp_flow packet
2551 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2552 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2553 AT_CHECK([tail -1 stdout], [0], [dnl
2556 AT_CHECK([head -n 2 stdout], [0], [dnl
2558 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
2561 # Test command: ofproto/trace br_name br_flow packet
2562 AT_CHECK([ovs-appctl ofproto/trace br0 \
2563 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2564 AT_CHECK([tail -1 stdout], [0], [dnl
2567 AT_CHECK([head -n 2 stdout], [0], [dnl
2569 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
2575 # The second test tests the corner cases
2576 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2578 ADD_OF_PORTS([br0], 1, 2)
2581 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2582 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2584 generate="-generate"
2585 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2587 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2593 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2595 AT_CHECK([tail -2 stderr], [0], [dnl
2596 Cannot find the datapath
2597 ovs-appctl: ovs-vswitchd: server returned an error
2600 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2606 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2608 AT_CHECK([tail -2 stderr], [0], [dnl
2609 Cannot find the datapath
2610 ovs-appctl: ovs-vswitchd: server returned an error
2613 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2619 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2621 AT_CHECK([tail -2 stderr], [0], [dnl
2622 Cannot find the datapath
2623 ovs-appctl: ovs-vswitchd: server returned an error
2626 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2632 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2634 AT_CHECK([tail -2 stderr], [0], [dnl
2635 Cannot find the datapath
2636 ovs-appctl: ovs-vswitchd: server returned an error
2639 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2645 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2647 AT_CHECK([tail -2 stderr], [0], [dnl
2649 ovs-appctl: ovs-vswitchd: server returned an error
2652 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2658 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2660 AT_CHECK([tail -2 stderr], [0], [dnl
2661 Must specify bridge name
2662 ovs-appctl: ovs-vswitchd: server returned an error
2665 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2666 AT_CHECK([ovs-appctl ofproto/trace \
2667 ovs-dummy "$odp_flow" garbage_option],
2668 [2], [stdout],[stderr])
2669 AT_CHECK([tail -2 stderr], [0], [dnl
2670 Trailing garbage in packet data
2671 ovs-appctl: ovs-vswitchd: server returned an error
2674 # Test incorrect command: ofproto/trace with 4 arguments
2675 AT_CHECK([ovs-appctl ofproto/trace \
2676 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2677 AT_CHECK([tail -2 stderr], [0], [dnl
2678 "ofproto/trace" command takes at most 3 arguments
2679 ovs-appctl: ovs-vswitchd: server returned an error
2682 # Test incorrect command: ofproto/trace with 0 argument
2683 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2684 AT_CHECK([tail -2 stderr], [0], [dnl
2685 "ofproto/trace" command requires at least 1 arguments
2686 ovs-appctl: ovs-vswitchd: server returned an error
2692 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2694 ADD_OF_PORTS([br0], 1, 2, 3)
2696 AT_DATA([flows.txt], [dnl
2697 in_port=1 actions=output:2
2698 in_port=2 actions=output:1
2700 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2702 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2703 AT_CHECK([tail -1 stdout], [0], [dnl
2704 Datapath actions: push_vlan(vid=123,pcp=0),2
2711 m4_define([OFPROTO_TRACE],
2713 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2714 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2716 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2719 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2722 AT_SETUP([ofproto-dpif - MAC learning])
2723 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2724 ADD_OF_PORTS([br0], 1, 2, 3)
2726 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)'
2728 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2731 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2735 # Check for the MAC learning entry.
2736 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2738 3 0 50:54:00:00:00:05 ?
2741 # Trace a packet arrival destined for the learned MAC.
2742 # (This will also learn a MAC.)
2745 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2749 # Check for both MAC learning entries.
2750 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2752 3 0 50:54:00:00:00:05 ?
2753 1 0 50:54:00:00:00:06 ?
2756 # Trace a packet arrival that updates the first learned MAC entry.
2759 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2763 # Check that the MAC learning entry was updated.
2764 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2766 1 0 50:54:00:00:00:06 ?
2767 2 0 50:54:00:00:00:05 ?
2770 # Add another bridge.
2774 -- set bridge br1 datapath-type=dummy])
2775 ADD_OF_PORTS([br1], 4, 5)
2777 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2780 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2785 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2789 # Check that the MAC learning entries were added.
2790 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2792 4 0 50:54:00:00:00:06 ?
2793 5 0 50:54:00:00:00:07 ?
2796 # Delete port p1 and see that its MAC learning entry disappeared, and
2797 # that the MAC learning entry for the same MAC was also deleted from br1.
2798 AT_CHECK([ovs-vsctl del-port p1])
2799 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2801 2 0 50:54:00:00:00:05 ?
2803 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2805 5 0 50:54:00:00:00:07 ?
2811 AT_SETUP([ofproto-dpif - MAC table overflow])
2813 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2814 ADD_OF_PORTS([br0], 1, 2, 3)
2816 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)'
2818 AT_CHECK([ovs-appctl time/stop])
2820 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2821 for i in 0 1 2 3 4 5 6 7 8 9; do
2824 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2827 ovs-appctl time/warp 1000
2830 # Check for the MAC learning entries.
2831 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2833 3 0 50:54:00:00:00:00
2834 3 0 50:54:00:00:00:01
2835 3 0 50:54:00:00:00:02
2836 3 0 50:54:00:00:00:03
2837 3 0 50:54:00:00:00:04
2838 3 0 50:54:00:00:00:05
2839 3 0 50:54:00:00:00:06
2840 3 0 50:54:00:00:00:07
2841 3 0 50:54:00:00:00:08
2842 3 0 50:54:00:00:00:09
2846 # Trace another ARP packet on another MAC.
2849 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2853 # Check that the new one chased the oldest one out of the table.
2854 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2856 3 0 50:54:00:00:00:01 ?
2857 3 0 50:54:00:00:00:02 ?
2858 3 0 50:54:00:00:00:03 ?
2859 3 0 50:54:00:00:00:04 ?
2860 3 0 50:54:00:00:00:05 ?
2861 3 0 50:54:00:00:00:06 ?
2862 3 0 50:54:00:00:00:07 ?
2863 3 0 50:54:00:00:00:08 ?
2864 3 0 50:54:00:00:00:09 ?
2865 3 0 50:54:00:00:00:10 ?
2871 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2873 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2875 # IP_VERSION_TYPE is used in AT_SETUP
2876 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2877 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2878 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2880 ON_EXIT([kill `cat test-sflow.pid`])
2881 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2882 AT_CAPTURE_FILE([sflow.log])
2883 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2884 ovs-appctl time/stop
2886 ADD_OF_PORTS([br0], 1, 2)
2888 set Interface br0 options:ifindex=1002 -- \
2889 set Interface p1 options:ifindex=1004 -- \
2890 set Interface p2 options:ifindex=1003 -- \
2891 set Bridge br0 sflow=@sf -- \
2892 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
2893 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
2895 dnl open with ARP packets to seed the bridge-learning. The output
2896 dnl ifIndex numbers should be reported predictably after that.
2897 dnl Since we set sampling=1 we should see all of these packets
2898 dnl reported. Sorting the output by data-source and seqNo makes
2899 dnl it deterministic. Ensuring that we send at least two packets
2900 dnl into each port means we get to check the seq nos are
2901 dnl incrementing correctly.
2902 dnl because packets from different ports can be handled by separate
2903 dnl threads, put some sleeps
2905 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)'
2907 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)'
2909 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)'
2911 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)'
2912 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)'
2914 dnl sleep long enough to get more than one counter sample
2915 dnl from each datasource so we can check sequence numbers
2916 for i in `seq 1 30`; do
2917 ovs-appctl time/warp 100
2920 ovs-appctl -t test-sflow exit
2922 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
2943 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
2963 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
2983 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
3003 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
3023 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
3026 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3040 in_broadcasts=4294967295
3043 in_unknownprotos=4294967295
3046 out_multicasts=4294967295
3047 out_broadcasts=4294967295
3063 in_broadcasts=4294967295
3066 in_unknownprotos=4294967295
3069 out_multicasts=4294967295
3070 out_broadcasts=4294967295
3086 in_broadcasts=4294967295
3089 in_unknownprotos=4294967295
3092 out_multicasts=4294967295
3093 out_broadcasts=4294967295
3109 in_broadcasts=4294967295
3112 in_unknownprotos=4294967295
3115 out_multicasts=4294967295
3116 out_broadcasts=4294967295
3132 in_broadcasts=4294967295
3135 in_unknownprotos=4294967295
3138 out_multicasts=4294967295
3139 out_broadcasts=4294967295
3155 in_broadcasts=4294967295
3158 in_unknownprotos=4294967295
3161 out_multicasts=4294967295
3162 out_broadcasts=4294967295
3169 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3170 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3172 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3174 # Test that basic NetFlow reports flow statistics correctly:
3175 # The initial packet of a flow are correctly accounted.
3176 # Later packets within a flow are correctly accounted.
3177 # Flow actions changing (in this case, due to MAC learning)
3178 # cause a record to be sent.
3180 # IP_VERSION_TYPE is used in AT_SETUP
3181 m4_define([CHECK_NETFLOW_EXPIRATION],
3182 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3183 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3184 ADD_OF_PORTS([br0], 1, 2)
3186 ovs-appctl time/stop
3187 ON_EXIT([kill `cat test-netflow.pid`])
3188 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3189 AT_CAPTURE_FILE([netflow.log])
3190 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3193 set Bridge br0 netflow=@nf -- \
3194 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3195 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3197 for delay in 1000 30000; 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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
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=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
3201 ovs-appctl time/warp $delay
3204 ovs-appctl time/warp 6000
3207 ovs-appctl -t test-netflow exit
3209 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])
3211 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])
3213 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3214 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3215 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3219 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3220 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3222 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3224 # Test that basic NetFlow reports active expirations correctly.
3226 # IP_VERSION_TYPE is used in AT_SETUP
3227 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3228 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3230 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3231 ADD_OF_PORTS([br0], 1, 2)
3233 ON_EXIT([kill `cat test-netflow.pid`])
3234 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3235 AT_CAPTURE_FILE([netflow.log])
3236 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3239 set Bridge br0 netflow=@nf -- \
3240 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3241 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3243 AT_CHECK([ovs-appctl time/stop])
3245 while test $n -le 60; do
3248 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)'
3249 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)'
3251 ovs-appctl time/warp 1000
3254 ovs-appctl time/warp 10000
3258 ovs-appctl -t test-netflow exit
3260 # Count the number of reported packets:
3261 # - From source to destination before MAC learning kicks in (just one).
3262 # - From source to destination after that.
3263 # - From destination to source.
3271 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3278 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3281 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3284 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3291 eval $counter=\`expr \$$counter + \$pkts\`
3292 n_recs=`expr $n_recs + 1`
3295 # There should be exactly 1 MAC learning packet,
3296 # exactly 59 other packets in that direction,
3297 # and exactly 60 packets in the other direction.
3298 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3303 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3304 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3306 AT_SETUP([ofproto-dpif - flow stats])
3308 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3309 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3311 ovs-appctl time/stop
3313 for i in `seq 1 10`; do
3314 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)'
3317 ovs-appctl time/warp 1000
3319 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3320 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3321 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3322 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3327 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3329 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3330 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3332 ovs-appctl time/stop
3334 for i in `seq 1 10`; do
3335 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)'
3338 ovs-appctl time/warp 100
3339 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3340 ovs-appctl time/warp 1000
3342 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3343 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3344 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3345 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3350 AT_SETUP([idle_age and hard_age increase over time])
3353 # get_ages DURATION HARD IDLE
3355 # Fetch the flow duration, hard age, and idle age into the variables
3356 # whose names are given as arguments. Rounds DURATION down to the
3357 # nearest integer. If hard_age doesn't appear in the output, sets
3358 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3361 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3363 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3364 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3365 AS_VAR_COPY([$1], [duration])
3367 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3368 if test X"$hard" = X; then
3371 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3373 AS_VAR_COPY([$2], [hard])
3375 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3376 if test X"$idle" = X; then
3379 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3381 AS_VAR_COPY([$3], [idle])
3384 # Add a flow and get its initial hard and idle age.
3385 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3386 get_ages duration1 hard1 idle1
3388 ovs-appctl time/stop
3389 # Warp time forward by 10 seconds, then modify the flow's actions.
3390 ovs-appctl time/warp 10000
3391 get_ages duration2 hard2 idle2
3392 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3394 # Warp time forward by 10 seconds.
3395 ovs-appctl time/warp 10000
3396 get_ages duration3 hard3 idle3
3398 # Warp time forward 10 more seconds, then pass some packets through the flow,
3399 # then warp forward a few more times because idle times are only updated
3401 ovs-appctl time/warp 10000
3402 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)'
3403 ovs-appctl time/warp 1000
3404 ovs-appctl time/warp 1000
3405 ovs-appctl time/warp 1000
3406 get_ages duration4 hard4 idle4
3408 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3409 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3410 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3412 # Duration should increase steadily over time.
3413 AT_CHECK([test $duration1 -lt $duration2])
3414 AT_CHECK([test $duration2 -lt $duration3])
3415 AT_CHECK([test $duration3 -lt $duration4])
3417 # Hard age should be "none" initially because it's the same as flow_duration,
3418 # then it should increase.
3419 AT_CHECK([test $hard1 = none])
3420 AT_CHECK([test $hard2 = none])
3421 AT_CHECK([test $hard3 != none])
3422 AT_CHECK([test $hard4 != none])
3423 AT_CHECK([test $hard3 -lt $hard4])
3425 # Idle age should increase from 1 to 2 to 3, then decrease.
3426 AT_CHECK([test $idle1 -lt $idle2])
3427 AT_CHECK([test $idle2 -lt $idle3])
3428 AT_CHECK([test $idle3 -gt $idle4])
3430 # Check some invariant relationships.
3431 AT_CHECK([test $duration1 = $idle1])
3432 AT_CHECK([test $duration2 = $idle2])
3433 AT_CHECK([test $duration3 = $idle3])
3434 AT_CHECK([test $idle3 -gt $hard3])
3435 AT_CHECK([test $idle4 -lt $hard4])
3436 AT_CHECK([test $hard4 -lt $duration4])
3441 AT_SETUP([ofproto-dpif - fin_timeout])
3443 AT_DATA([flows.txt], [dnl
3444 in_port=1 actions=output:2
3445 in_port=2 actions=mod_vlan_vid:17,output:1
3447 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3448 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3450 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3453 ovs-appctl time/stop
3454 # Check that a TCP SYN packet does not change the timeout. (Because
3455 # flow stats updates are mainly what implements the fin_timeout
3456 # feature, we warp forward a couple of times to ensure that flow stats
3457 # run before re-checking the flow table.)
3458 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3459 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3462 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3464 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3466 # Check that a TCP FIN packet does change the timeout.
3467 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3468 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3471 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3473 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3478 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3479 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3480 ADD_OF_PORTS([br0], [1], [2])
3481 ADD_OF_PORTS([br1], [3])
3483 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3490 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3491 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3492 ADD_OF_PORTS([br0], [1], [2])
3493 ADD_OF_PORTS([br1], [3])
3495 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3496 dummy@ovs-dummy: hit:0 missed:0
3498 br0 65534/100: (dummy)
3502 br1 65534/101: (dummy)
3508 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3509 OVS_VSWITCHD_START([add-br br1 -- \
3510 set bridge br1 datapath-type=dummy fail-mode=secure])
3511 ADD_OF_PORTS([br0], [1], [2])
3512 ADD_OF_PORTS([br1], [3])
3514 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)'])
3515 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)'])
3516 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)'])
3518 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3519 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
3520 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
3523 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3524 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
3527 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3528 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
3529 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
3532 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3533 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
3539 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3540 OVS_VSWITCHD_START([dnl
3541 add-port br0 p1 -- set Interface p1 type=dummy
3543 ON_EXIT([kill `cat ovs-ofctl.pid`])
3545 AT_CAPTURE_FILE([ofctl_monitor.log])
3546 AT_DATA([flows.txt], [dnl
3547 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3548 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3550 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3552 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3553 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3555 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3556 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)
3557 dnl (label 20, exp 0, [S], ttl 32)
3558 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3559 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3561 for dl_src in 00 01; do
3562 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"])
3564 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3565 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))
3573 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3574 OVS_VSWITCHD_START([dnl
3575 add-port br0 p1 -- set Interface p1 type=dummy
3577 ON_EXIT([kill `cat ovs-ofctl.pid`])
3579 AT_CAPTURE_FILE([ofctl_monitor.log])
3580 AT_DATA([flows.txt], [dnl
3581 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3582 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3584 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3586 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3587 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3588 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3590 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3591 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)
3592 dnl (label 20, exp 0, ttl 32)
3593 dnl (label 20, exp 0, ttl 32)
3594 dnl (label 20, exp 0, [S], ttl 32)
3595 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3596 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3598 for dl_src in 00 01; do
3599 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"])
3601 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3602 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))
3609 AT_SETUP([ofproto-dpif - patch ports])
3610 OVS_VSWITCHD_START([add-br br1 \
3611 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3612 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3613 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3615 ADD_OF_PORTS([br0], [2])
3616 ADD_OF_PORTS([br1], [3])
3618 AT_CHECK([ovs-appctl time/stop])
3620 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3621 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3623 for i in $(seq 1 10); do
3624 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)'
3625 if [[ $i -eq 1 ]]; then
3630 for i in $(seq 1 5); do
3631 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)'
3632 if [[ $i -eq 1 ]]; then
3637 AT_CHECK([ovs-appctl time/warp 500], [0],
3641 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3642 dummy@ovs-dummy: hit:13 missed:2
3644 br0 65534/100: (dummy)
3646 pbr0 1/none: (patch: peer=pbr1)
3648 br1 65534/101: (dummy)
3650 pbr1 1/none: (patch: peer=pbr0)
3653 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3654 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
3656 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3657 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
3660 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3661 OFPST_PORT reply (xid=0x4): 1 ports
3662 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3663 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3666 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3667 OFPST_PORT reply (xid=0x4): 1 ports
3668 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3669 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3675 AT_SETUP([ofproto-dpif - port duration])
3676 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3677 ADD_OF_PORTS([br0], 1, 2)
3679 ovs-appctl time/stop
3680 ovs-appctl time/warp 10000
3682 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3683 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3692 dnl ----------------------------------------------------------------------
3693 AT_BANNER([ofproto-dpif -- megaflows])
3695 AT_SETUP([ofproto-dpif megaflow - port classification])
3697 ADD_OF_PORTS([br0], [1], [2])
3698 AT_DATA([flows.txt], [dnl
3699 table=0 in_port=1 actions=output(2)
3701 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3702 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)'])
3703 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)'])
3705 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3706 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>
3711 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3713 ADD_OF_PORTS([br0], [1], [2])
3714 AT_DATA([flows.txt], [dnl
3715 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3717 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3718 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(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)'])
3719 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00: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)'])
3721 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3722 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(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>
3723 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00: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>
3728 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3730 ADD_OF_PORTS([br0], [1], [2])
3731 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], [])
3732 AT_DATA([flows.txt], [dnl
3733 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3735 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3736 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)'])
3737 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)'])
3739 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3740 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>
3741 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>
3746 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3748 ADD_OF_PORTS([br0], [1], [2])
3749 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], [])
3750 AT_DATA([flows.txt], [dnl
3751 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3753 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3754 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)'])
3755 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)'])
3757 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3758 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>
3759 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>
3764 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3766 ADD_OF_PORTS([br0], [1], [2])
3767 AT_DATA([flows.txt], [dnl
3768 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3770 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3771 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)'])
3772 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3773 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3774 skb_priority(0),in_port(1),eth_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>
3779 AT_SETUP([ofproto-dpif megaflow - normal])
3781 ADD_OF_PORTS([br0], [1], [2])
3782 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3783 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)'])
3784 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)'])
3786 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3787 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>
3788 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>
3793 AT_SETUP([ofproto-dpif megaflow - mpls])
3795 ADD_OF_PORTS([br0], [1], [2])
3796 AT_DATA([flows.txt], [dnl
3797 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3798 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3800 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3801 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)'])
3802 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)'])
3804 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3805 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>
3806 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>
3811 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3813 # IP_VERSION_TYPE is used in AT_SETUP
3814 m4_define([CHECK_MEGAFLOW_NETFLOW],
3815 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3817 ADD_OF_PORTS([br0], [1], [2])
3819 dnl NetFlow configuration disables wildcarding relevant fields
3820 ON_EXIT([kill `cat test-netflow.pid`])
3821 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3822 AT_CAPTURE_FILE([netflow.log])
3823 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3825 set Bridge br0 netflow=@nf -- \
3826 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3827 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3829 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3830 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)'])
3831 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)'])
3833 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3834 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>
3835 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>
3840 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3841 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3843 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3845 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3846 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3847 set interface p2 type=dummy ofport_request=2 -- \
3848 set interface p3 type=dummy ofport_request=3])
3849 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3852 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3853 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)'])
3854 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)'])
3856 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3857 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>
3858 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>
3863 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3865 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3866 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3867 set interface p2 type=dummy ofport_request=2 -- \
3868 set interface p3 type=dummy ofport_request=3])
3869 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3872 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3873 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)'])
3874 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)'])
3876 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3877 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>
3878 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>
3883 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3884 # Create bond0 on br0 with interfaces p0 and p1
3885 # and bond1 on br1 with interfaces p2 and p3
3886 # with p0 patched to p2 and p1 patched to p3.
3888 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3889 other-config:lacp-time=fast \
3890 other-config:bond-rebalance-interval=0 -- \
3891 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3892 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3894 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3895 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3896 fail-mode=secure -- \
3897 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3898 other-config:lacp-time=fast \
3899 other-config:bond-rebalance-interval=0 -- \
3900 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3901 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3903 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3905 ADD_OF_PORTS([br0], [7])
3906 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3907 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
3908 ovs-appctl time/stop
3909 ovs-appctl time/warp 5000
3910 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)'])
3911 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)'])
3913 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3914 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>
3915 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>
3920 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3922 ADD_OF_PORTS([br0], [1], [2])
3923 AT_DATA([flows.txt], [dnl
3924 table=0 in_port=1,ip actions=resubmit(90)
3925 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3927 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3928 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)'])
3929 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)'])
3931 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3932 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>
3933 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>
3938 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3940 ADD_OF_PORTS([br0], [1], [2])
3941 AT_DATA([flows.txt], [dnl
3942 table=0 in_port=1,ip actions=resubmit(,1)
3943 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3945 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3946 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)'])
3947 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=
3948 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3950 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3951 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>
3952 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>
3957 AT_SETUP([ofproto-dpif megaflow - goto_table action])
3959 ADD_OF_PORTS([br0], [1], [2])
3960 AT_DATA([flows.txt], [dnl
3961 table=0 in_port=1,ip actions=goto_table(1)
3962 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3964 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3965 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)'])
3966 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)'])
3968 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3969 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>
3970 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>
3975 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3977 ADD_OF_PORTS([br0], [1], [2], [3])
3979 set Bridge br0 mirrors=@m --\
3980 --id=@p3 get Port p3 --\
3981 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3983 AT_DATA([flows.txt], [dnl
3984 in_port=1 actions=output:2
3986 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3987 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)'])
3988 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)'])
3990 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3991 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>
3996 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3998 ADD_OF_PORTS([br0], [1], [2], [3])
4000 set Bridge br0 mirrors=@m --\
4001 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4002 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4004 AT_DATA([flows.txt], [dnl
4005 in_port=1 actions=output:2
4007 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4008 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))'])
4009 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)'])
4011 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4012 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>
4013 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>
4018 AT_SETUP([ofproto-dpif megaflow - move action])
4020 ADD_OF_PORTS([br0], [1], [2])
4021 AT_DATA([flows.txt], [dnl
4022 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4023 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4024 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4026 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4027 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)'])
4028 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)'])
4030 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4031 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>
4032 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>
4037 AT_SETUP([ofproto-dpif megaflow - push action])
4039 ADD_OF_PORTS([br0], [1], [2])
4040 AT_DATA([flows.txt], [dnl
4041 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4043 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4044 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)'])
4045 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)'])
4047 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4048 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>
4049 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>
4054 AT_SETUP([ofproto-dpif megaflow - learning])
4056 ADD_OF_PORTS([br0], [1], [2])
4057 AT_DATA([flows.txt], [dnl
4058 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
4060 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4061 ovs-appctl time/stop
4062 # We send each packet twice because the first packet in each flow causes the
4063 # flow table to change and thus revalidations, which (depending on timing)
4064 # can keep a megaflow from being installed. The revalidations are done by
4065 # the second iteration, allowing the flows to be installed.
4067 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)'])
4068 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)'])
4069 ovs-appctl time/warp 100
4072 dnl The original flow is missing due to a revalidation.
4073 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4074 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>
4075 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>
4080 AT_SETUP([ofproto-dpif megaflow - tunnels])
4082 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4083 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4084 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4085 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4087 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4088 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4089 ofport_request=4 options:key=flow])
4090 AT_DATA([flows.txt], [dnl
4091 in_port=1,actions=output(2)
4092 in_port=3,actions=output(4)
4094 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4095 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4096 dnl will cause the packet to be dropped.
4097 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)'])
4098 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)'])
4099 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)'])
4100 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)'])
4102 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4103 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>
4104 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>
4105 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>
4110 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4112 ADD_OF_PORTS([br0], [1], [2])
4113 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], [])
4114 AT_DATA([flows.txt], [dnl
4115 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4117 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4118 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)'])
4119 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_XOUT], [0], [dnl
4122 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>
4123 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>
4128 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4130 ADD_OF_PORTS([br0], [1], [2])
4131 AT_DATA([flows.txt], [dnl
4132 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4134 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4135 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)'])
4136 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)'])
4138 dnl The megaflows do not match the same fields, since the first packet
4139 dnl is essentially a no-op. (The new destination MAC is the same as the
4140 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4141 dnl so that a packet that doesn't need its MAC address changed doesn't
4142 dnl hide one that does. Since the first entry doesn't need to change,
4143 dnl only the destination MAC address is matched (as decided by
4144 dnl ofproto-dpif). The second entry actually updates the destination
4145 dnl MAC, so both the source and destination MAC addresses are
4146 dnl un-wildcarded, since the ODP commit functions update both the source
4147 dnl and destination MAC addresses.
4148 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4149 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
4150 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
4155 AT_SETUP([ofproto-dpif megaflow - disabled])
4157 ADD_OF_PORTS([br0], [1], [2])
4158 AT_DATA([flows.txt], [dnl
4159 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4160 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4162 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4164 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4165 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4166 for i in 1 2 3 4; do
4167 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)'])
4168 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)'])
4171 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4172 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
4173 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
4178 AT_SETUP([ofproto-dpif - datapath port number change])
4179 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4180 ADD_OF_PORTS([br0], 1)
4182 # Trace a flow that should output to p1.
4183 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4185 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4188 # Change p1's port number to 5.
4189 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4191 # Trace a flow that should output to p1 in its new location.
4192 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4194 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4199 # Tests the bundling with various bfd and cfm configurations.
4200 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4201 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4202 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4203 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4204 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4205 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4206 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4207 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4208 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4209 set Interface p0 cfm_mpid=1 -- \
4210 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4212 ovs-appctl time/stop
4213 # advance the clock to stablize everything.
4214 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4215 # cfm/show should show 'recv' fault.
4216 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4219 # bfd/show should show 'up'.
4220 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4221 Local Session State: up
4222 Remote Session State: up
4223 Local Session State: up
4224 Remote Session State: up
4226 # bond/show should show 'may-enable: true' for all slaves.
4227 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4234 # now disable the bfd on p1.
4235 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4236 # advance the clock to stablize everything.
4237 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4238 # cfm/show should show 'recv' fault.
4239 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4242 # bfd/show should show 'down'.
4243 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4244 Local Session State: down
4245 Remote Session State: down
4247 # bond/show should show 'may-enable: false' for p0.
4248 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4253 # now enable the bfd on p1 and disable bfd on p0.
4254 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4255 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4256 # advance the clock to stablize everything.
4257 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4258 # cfm/show should show 'recv' fault.
4259 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4262 # bfd/show should show 'down'.
4263 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4264 Local Session State: down
4265 Remote Session State: down
4267 # bond/show should show 'may-enable: false' for p0 and p1.
4268 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4278 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4279 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4282 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4284 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4285 monitor thread created
4287 # disable bfd on p0.
4288 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4290 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4291 monitor thread terminated
4293 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4296 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4298 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4299 monitor thread created
4301 # disable cfm on p0.
4302 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4304 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4305 monitor thread terminated
4307 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4309 # enable both bfd and cfm on p0.
4310 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4312 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4313 monitor thread created
4315 # disable bfd on p0.
4316 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4317 # check log, there should not be the log of thread terminated.
4318 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4320 # reenable bfd on p0.
4321 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4322 # check log, should still be on log of thread created.
4323 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4324 monitor thread created
4326 # disable bfd and cfm together.
4327 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4329 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4330 monitor thread terminated
4336 # this test helps avoid the deadlock between the main thread and monitor thread.
4337 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4340 for i in `seq 1 199`
4342 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])
4348 AT_BANNER([ofproto-dpif - flow translation resource limits])
4350 AT_SETUP([ofproto-dpif - infinite resubmit])
4352 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4353 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4355 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4357 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4360 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4363 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4365 ADD_OF_PORTS([br0], 1)
4366 (for i in `seq 1 64`; do
4368 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4370 echo "in_port=65, actions=local") > flows
4371 AT_CHECK([ovs-ofctl add-flows br0 flows])
4372 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4373 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4375 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4378 AT_SETUP([ofproto-dpif - too many output actions])
4380 ADD_OF_PORTS([br0], 1)
4381 (for i in `seq 1 12`; do
4383 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4385 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4386 AT_CHECK([ovs-ofctl add-flows br0 flows])
4387 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4388 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4391 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4393 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4396 AT_SETUP([ofproto-dpif - stack too deep])
4398 ADD_OF_PORTS([br0], 1)
4399 (for i in `seq 1 12`; do
4401 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4403 push="push:NXM_NX_REG0[[]]"
4404 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4405 AT_CHECK([ovs-ofctl add-flows br0 flows])
4406 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4407 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4409 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])