1 AT_BANNER([ofproto-dpif])
3 # Strips out uninteresting parts of flow output, as well as parts
4 # that vary from one run to another (e.g., timing and bond actions).
5 m4_define([STRIP_USED], [[sed '
6 s/used:[0-9]*\.[0-9]*/used:0.0/
8 m4_define([STRIP_XOUT], [[sed '
9 s/used:[0-9]*\.[0-9]*/used:0.0/
10 s/actions:.*/actions: <del>/
11 s/packets:[0-9]*/packets:0/
12 s/bytes:[0-9]*/bytes:0/
15 AT_SETUP([ofproto-dpif - dummy interface])
16 # Create br0 with interfaces p1 and p7
17 # and br1 with interfaces p2 and p8
18 # with p1 and p2 connected via unix domain socket
20 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
21 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
23 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
24 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
26 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
27 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
29 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
30 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
32 ovs-appctl time/warp 5000
33 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
34 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
35 ovs-appctl time/warp 100
36 sleep 1 # wait for forwarders process packets
38 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
39 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
40 skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
43 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
44 skb_priority(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
45 skb_priority(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
50 AT_SETUP([ofproto-dpif - resubmit])
52 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
53 [16], [17], [18], [19], [20], [21])
54 AT_DATA([flows.txt], [dnl
55 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
56 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
57 table=0 in_port=3 priority=2000 icmp actions=output(20)
58 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
59 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
60 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
62 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
63 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
64 AT_CHECK([tail -1 stdout], [0],
65 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
70 AT_SETUP([ofproto-dpif - goto table])
72 ADD_OF_PORTS([br0], [1], [10], [11])
73 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
74 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
75 echo "table=64 actions=output(11)" >> flows.txt
76 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
77 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
78 AT_CHECK([tail -1 stdout], [0],
79 [Datapath actions: 10,11
84 AT_SETUP([ofproto-dpif - write actions])
86 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
87 AT_DATA([flows.txt], [dnl
88 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
89 table=1 ip actions=write_actions(output(13)),goto_table(2)
90 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
92 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
93 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
94 AT_CHECK([tail -1 stdout], [0],
95 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
100 AT_SETUP([ofproto-dpif - clear actions])
102 ADD_OF_PORTS([br0], [1], [10], [11], [12])
103 AT_DATA([flows.txt], [dnl
104 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
105 table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
107 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
108 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
109 AT_CHECK([tail -1 stdout], [0],
110 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
115 AT_SETUP([ofproto-dpif - group chaining not supported])
117 ADD_OF_PORTS([br0], [1], [10], [11])
118 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,group:123,bucket=output:11'],
120 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
121 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
126 AT_SETUP([ofproto-dpif - all group in action list])
128 ADD_OF_PORTS([br0], [1], [10], [11])
129 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
130 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
131 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
132 AT_CHECK([tail -1 stdout], [0],
133 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
138 AT_SETUP([ofproto-dpif - indirect group in action list])
140 ADD_OF_PORTS([br0], [1], [10])
141 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
142 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
143 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
144 AT_CHECK([tail -1 stdout], [0],
145 [Datapath actions: 10
150 AT_SETUP([ofproto-dpif - all group in action set])
152 ADD_OF_PORTS([br0], [1], [10], [11])
153 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
154 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
155 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
156 AT_CHECK([tail -1 stdout], [0],
157 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
162 AT_SETUP([ofproto-dpif - indirect group in action set])
164 ADD_OF_PORTS([br0], [1], [10])
165 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
166 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
167 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
168 AT_CHECK([tail -1 stdout], [0],
169 [Datapath actions: 10
174 AT_SETUP([ofproto-dpif - select group])
176 ADD_OF_PORTS([br0], [1], [10], [11])
177 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
178 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
180 # Try a bunch of different flows and make sure that they get distributed
182 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
183 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
184 tail -1 stdout >> results
186 sort results | uniq -c
187 AT_CHECK([sort results | uniq], [0],
188 [Datapath actions: 10
194 AT_SETUP([ofproto-dpif - select group with watch port])
196 ADD_OF_PORTS([br0], [1], [10], [11])
197 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
198 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
199 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
200 AT_CHECK([tail -1 stdout], [0],
201 [Datapath actions: 11
206 AT_SETUP([ofproto-dpif - select group with weight])
208 ADD_OF_PORTS([br0], [1], [10], [11], [12])
209 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
210 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
211 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
212 AT_CHECK([tail -1 stdout], [0],
213 [Datapath actions: 11
218 AT_SETUP([ofproto-dpif - fast failover group])
220 ADD_OF_PORTS([br0], [1], [10], [11])
221 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
222 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
223 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
224 AT_CHECK([tail -1 stdout], [0],
225 [Datapath actions: drop
230 AT_SETUP([ofproto-dpif - registers])
232 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
233 AT_DATA([flows.txt], [dnl
234 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
235 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
236 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
237 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
239 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
240 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
241 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
242 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
243 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
244 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
245 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
246 in_port=9,reg0=0xdeadbeef actions=output:20
247 in_port=10,reg1=0xdeadbeef actions=output:21
248 in_port=11,reg2=0xeef22dea actions=output:22
250 dnl Sanilty check all registers
251 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
252 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
253 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
254 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
257 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
258 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
259 AT_CHECK([tail -1 stdout], [0],
260 [Datapath actions: 20,21,22,33
265 AT_SETUP([ofproto-dpif - push-pop])
267 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
268 AT_DATA([flows.txt], [dnl
269 in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
270 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
271 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
272 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
273 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
276 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
277 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
278 AT_CHECK([tail -1 stdout], [0],
279 [Datapath actions: 33,22,21,20
284 AT_SETUP([ofproto-dpif - output])
286 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
287 AT_DATA([flows.txt], [dnl
288 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
289 in_port=2 actions=output:9
290 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
291 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
292 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
293 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
294 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
295 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
298 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
299 AT_CHECK([tail -1 stdout], [0],
300 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
305 AT_SETUP([ofproto-dpif - dec_ttl])
307 ADD_OF_PORTS([br0], [1], [2], [3], [4])
308 AT_DATA([flows.txt], [dnl
309 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
310 table=1 in_port=1 action=dec_ttl,output:3
312 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
313 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
314 AT_CHECK([tail -3 stdout], [0],
315 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
316 This flow is handled by the userspace slow path because it:
317 - Sends "packet-in" messages to the OpenFlow controller.
319 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
320 AT_CHECK([tail -1 stdout], [0],
321 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
323 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
324 AT_CHECK([tail -1 stdout], [0],
325 [Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
328 AT_CAPTURE_FILE([ofctl_monitor.log])
329 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
330 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
331 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
332 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
333 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
334 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
340 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
342 ADD_OF_PORTS([br0], [1], [2])
344 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
346 # "in_port" defaults to OFPP_NONE if it's not specified.
347 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,icmp_type=8,icmp_code=0"
348 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
349 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
358 AT_SETUP([ofproto-dpif - DSCP])
359 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
360 ADD_OF_PORTS([br0], [9])
361 AT_DATA([flows.txt], [dnl
362 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
364 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
365 AT_CHECK([ovs-vsctl -- \
366 set Port p1 qos=@newqos --\
367 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
368 --id=@q1 create Queue dscp=1 --\
369 --id=@q2 create Queue dscp=2], [0], [ignore])
370 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
371 AT_CHECK([tail -1 stdout], [0],
372 [Datapath actions: dnl
374 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
375 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
377 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
378 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
379 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
385 AT_SETUP([ofproto-dpif - output/flood flags])
387 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
389 AT_DATA([flows.txt], [dnl
390 in_port=local actions=local,flood
391 in_port=1 actions=flood
392 in_port=2 actions=all
393 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
394 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
396 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
397 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
398 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
400 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
401 AT_CHECK([tail -1 stdout \
402 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
410 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
411 AT_CHECK([tail -1 stdout \
412 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
420 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
421 AT_CHECK([tail -1 stdout \
422 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
431 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
432 AT_CHECK([tail -1 stdout], [0],
433 [Datapath actions: 100,1,2,4,6,7
436 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
437 AT_CHECK([tail -1 stdout], [0],
438 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
443 AT_SETUP([ofproto-dpif - controller])
444 OVS_VSWITCHD_START([dnl
445 add-port br0 p1 -- set Interface p1 type=dummy
447 ON_EXIT([kill `cat ovs-ofctl.pid`])
449 AT_CAPTURE_FILE([ofctl_monitor.log])
450 AT_DATA([flows.txt], [dnl
451 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
452 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
453 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
455 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
456 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)
457 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)
458 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
459 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)
460 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
461 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
462 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
463 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
464 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
465 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
466 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
467 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
468 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
469 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
470 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
471 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
472 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
473 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
474 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
476 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
479 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
482 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)'
484 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
485 ovs-appctl -t ovs-ofctl exit
487 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
488 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
489 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
491 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
492 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
494 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
495 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
498 dnl Singleton controller action.
499 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
502 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)'
504 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
505 ovs-appctl -t ovs-ofctl exit
507 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
508 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
509 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
511 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
512 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
514 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
515 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
518 dnl Modified controller action.
519 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
522 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)'
524 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
525 ovs-appctl -t ovs-ofctl exit
527 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
528 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
529 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
531 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
532 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
534 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
535 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
538 dnl Modified VLAN controller action.
539 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
542 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)'
544 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
545 ovs-appctl -t ovs-ofctl exit
547 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
548 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
549 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
551 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
552 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
554 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
555 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
558 dnl Modified MPLS controller action.
559 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
562 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)'
564 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
565 ovs-appctl -t ovs-ofctl exit
567 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
568 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
569 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
571 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
572 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
574 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
575 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
578 dnl Modified MPLS controller action.
579 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
582 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)'
584 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
585 ovs-appctl -t ovs-ofctl exit
587 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
588 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
589 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
591 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
592 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
594 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
595 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
598 dnl Modified MPLS controller action.
599 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
601 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)
604 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)'
607 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
608 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
609 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
610 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
612 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
613 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
615 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
616 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
619 dnl Modified MPLS controller action.
620 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
623 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))'
625 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
626 ovs-appctl -t ovs-ofctl exit
628 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
629 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
630 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
632 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
633 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
635 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
636 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
639 dnl Modified MPLS controller action.
640 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
643 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)'
645 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
646 ovs-appctl -t ovs-ofctl exit
648 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
649 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
650 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
652 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
653 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
655 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
656 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
659 dnl Modified MPLS controller action.
660 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
663 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)'
665 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
666 ovs-appctl -t ovs-ofctl exit
668 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
669 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
670 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
672 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
673 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
675 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
676 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
679 dnl Modified MPLS controller action.
680 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
683 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)'
685 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
686 ovs-appctl -t ovs-ofctl exit
688 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
689 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
690 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
692 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
693 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
695 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
696 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
699 dnl Modified MPLS controller action.
700 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
703 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)'
705 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
706 ovs-appctl -t ovs-ofctl exit
708 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
709 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
710 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
712 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
713 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
715 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
716 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
719 dnl Modified MPLS actions.
720 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
723 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)'
725 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
726 ovs-appctl -t ovs-ofctl exit
728 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
729 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
730 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
732 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
733 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
735 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
736 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
739 dnl Modified MPLS ipv6 controller action.
740 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
743 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)'
745 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
746 ovs-appctl -t ovs-ofctl exit
748 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
749 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
750 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
752 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
753 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
755 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
756 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
760 dnl Modified MPLS pop action.
761 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
762 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)
763 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
765 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
768 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'
771 # 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)'
773 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
774 ovs-appctl -t ovs-ofctl exit
776 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
777 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
778 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
780 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
781 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
783 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
784 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
788 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
791 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)'
793 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
794 ovs-appctl -t ovs-ofctl exit
796 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
797 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
798 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
800 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
801 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
803 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)
804 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
806 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)
807 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
809 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)
810 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
812 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)
813 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
815 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)
816 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
818 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)
819 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
821 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)
822 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
826 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
829 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'
831 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
832 ovs-appctl -t ovs-ofctl exit
834 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
835 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
836 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
838 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
839 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
841 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)
842 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
844 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)
845 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
847 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)
848 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
850 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)
851 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
853 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)
854 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
856 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)
857 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
859 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)
860 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
863 dnl Modified ARP controller action.
864 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
867 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)'
870 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
871 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
872 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
873 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
874 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
875 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
876 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
877 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
878 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
879 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
880 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
881 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
882 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
883 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
884 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
885 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
886 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
887 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
888 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
889 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
890 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
893 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
896 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
899 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'
902 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
903 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
904 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
905 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
906 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
908 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
909 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
911 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)
912 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
914 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)
915 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
917 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)
918 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
920 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)
921 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
923 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)
924 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
926 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)
927 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
929 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)
930 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
933 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
934 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
935 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
936 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)
937 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)
938 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)
939 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)
940 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)
941 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
942 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
943 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
944 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
945 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
946 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
947 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
948 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
949 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
950 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
951 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
952 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
953 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
954 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
955 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
956 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
963 AT_SETUP([ofproto-dpif - ARP modification slow-path])
965 ADD_OF_PORTS([br0], [1], [2])
967 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
968 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'
970 # Input some packets that should follow the arp modification slow-path.
972 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)'
974 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
976 # Check the packets that were output.
977 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
978 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
979 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
980 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=40:44:44:44:44:41
981 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
982 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
983 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=40:44:44:44:44:41
984 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
985 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
986 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=40:44:44:44:44:41
992 AT_SETUP([ofproto-dpif - VLAN handling])
994 [set Bridge br0 fail-mode=standalone -- \
995 add-port br0 p1 trunks=10,12 -- \
996 add-port br0 p2 tag=10 -- \
997 add-port br0 p3 tag=12 \
998 other-config:priority-tags=true -- \
999 add-port br0 p4 tag=12 -- \
1000 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1001 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1002 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1003 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1004 other-config:priority-tags=true -- \
1005 set Interface p1 type=dummy -- \
1006 set Interface p2 type=dummy -- \
1007 set Interface p3 type=dummy -- \
1008 set Interface p4 type=dummy -- \
1009 set Interface p5 type=dummy -- \
1010 set Interface p6 type=dummy -- \
1011 set Interface p7 type=dummy -- \
1012 set Interface p8 type=dummy --])
1014 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1015 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1021 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1022 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1025 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1026 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1030 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1031 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1034 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1035 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1036 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1037 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1038 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1045 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1046 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1047 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1054 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1055 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1056 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1063 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1064 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1065 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1066 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1067 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1070 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1071 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1072 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1073 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1074 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1075 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1076 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1079 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1080 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1081 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1082 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1083 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1084 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1085 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1088 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1089 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1090 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1091 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1092 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1093 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1094 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1097 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1098 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1106 if test $vlan = none; then
1107 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1109 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))"
1112 echo "----------------------------------------------------------------------"
1113 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1115 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1116 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1118 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1120 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1126 AT_SETUP([ofproto-dpif - MPLS handling])
1127 OVS_VSWITCHD_START([dnl
1128 add-port br0 p1 -- set Interface p1 type=dummy
1130 ON_EXIT([kill `cat ovs-ofctl.pid`])
1132 AT_CAPTURE_FILE([ofctl_monitor.log])
1133 AT_DATA([flows.txt], [dnl
1134 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1135 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1136 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1138 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1140 dnl In this test, we push an MPLS tag to an ethernet packet.
1141 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1144 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)'
1146 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1148 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1149 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1150 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
1151 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1152 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1153 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1154 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1156 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1157 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
1158 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1159 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1160 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1161 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1163 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1164 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
1165 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1166 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1167 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1168 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1171 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1172 dnl copied exactly, except for the BOS bit.
1173 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1176 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)'
1178 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1180 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1181 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1182 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
1183 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1184 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1185 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1186 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1188 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1189 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
1190 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1191 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1192 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1193 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1195 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1196 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
1197 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1198 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1199 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1200 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1203 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1204 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1205 dnl to the MPLS ethertype of the MPLS push action which differs to that
1206 dnl of the input packet.
1207 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1210 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)'
1212 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1214 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1215 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1216 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
1217 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1218 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1219 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1220 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1222 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1223 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
1224 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1225 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1226 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1227 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1229 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1230 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
1231 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1232 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1233 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1234 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1240 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1241 OVS_VSWITCHD_START([dnl
1242 add-port br0 p1 -- set Interface p1 type=dummy
1244 ON_EXIT([kill `cat ovs-ofctl.pid`])
1246 AT_CAPTURE_FILE([ofctl_monitor.log])
1247 AT_DATA([flows.txt], [dnl
1248 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
1249 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
1250 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
1251 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
1252 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
1253 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
1254 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
1255 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
1256 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
1257 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
1259 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1261 dnl Modified MPLS controller action.
1262 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1263 dnl both of these in the final flow
1264 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1267 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)'
1269 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1271 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1272 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1273 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
1274 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1275 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1276 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1277 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1278 00000040 00 00 00 00
1280 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1281 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
1282 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1283 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1284 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1285 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1286 00000040 00 00 00 00
1288 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1289 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
1290 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1291 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1292 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1293 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1294 00000040 00 00 00 00
1297 dnl Modified MPLS controller action.
1298 dnl In this test, the input packet in vlan-tagged, which should be stripped
1299 dnl before we push the MPLS and VLAN tags.
1300 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1303 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))'
1305 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1306 ovs-appctl -t ovs-ofctl exit
1308 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1309 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1310 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
1311 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1312 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1313 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1314 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1316 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1317 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
1318 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1319 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1320 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1321 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1323 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1324 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
1325 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1326 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1327 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1328 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1331 dnl Modified MPLS controller action.
1332 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1333 dnl both of these in the final flow
1334 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1337 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)'
1339 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1341 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1342 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1343 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
1344 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1345 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1346 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1347 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1348 00000040 00 00 00 00
1350 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1351 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
1352 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1353 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1354 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1355 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1356 00000040 00 00 00 00
1358 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1359 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
1360 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1361 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1362 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1363 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1364 00000040 00 00 00 00
1367 dnl Modified MPLS controller action.
1368 dnl In this test, the input packet in vlan-tagged, which should be stripped
1369 dnl before we push the MPLS and VLAN tags.
1370 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1373 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))'
1375 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1376 ovs-appctl -t ovs-ofctl exit
1378 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1379 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1380 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
1381 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1382 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1383 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1384 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1386 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1387 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
1388 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1389 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1390 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1391 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1393 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1394 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
1395 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1396 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1397 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1398 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1401 dnl Modified MPLS controller action.
1402 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1403 dnl actions are reordered, so we see both of these in the final flow.
1404 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1407 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)'
1409 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1410 ovs-appctl -t ovs-ofctl exit
1412 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1413 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1414 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
1415 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1416 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1417 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1418 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1419 00000040 00 00 00 00
1421 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1422 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
1423 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1424 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1425 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1426 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1427 00000040 00 00 00 00
1429 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1430 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
1431 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1432 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1433 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1434 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1435 00000040 00 00 00 00
1438 dnl Modified MPLS controller action.
1439 dnl In this test, the input packet in vlan-tagged, which should be stripped
1440 dnl before we push the MPLS and VLAN tags.
1441 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1444 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))'
1446 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1447 ovs-appctl -t ovs-ofctl exit
1449 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1450 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1451 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
1452 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1453 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1454 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1455 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1457 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1458 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
1459 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1460 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1461 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1462 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1464 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1465 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
1466 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1467 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1468 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1469 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1472 dnl Modified MPLS controller action.
1473 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1474 dnl actions are reordered, so we see both of these in the final flow.
1475 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1478 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)'
1480 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1481 ovs-appctl -t ovs-ofctl exit
1483 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1484 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1485 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
1486 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1487 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1488 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1489 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1490 00000040 00 00 00 00
1492 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1493 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
1494 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1495 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1496 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1497 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1498 00000040 00 00 00 00
1500 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1501 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
1502 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1503 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1504 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1505 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1506 00000040 00 00 00 00
1509 dnl Modified MPLS controller action.
1510 dnl In this test, the input packet in vlan-tagged, which should be stripped
1511 dnl before we push the MPLS and VLAN tags.
1512 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1515 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))'
1517 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1518 ovs-appctl -t ovs-ofctl exit
1520 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1521 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1522 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
1523 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1524 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1525 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1526 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1528 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1529 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
1530 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1531 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1532 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1533 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1535 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1536 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
1537 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1538 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1539 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1540 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1543 dnl Modified MPLS controller action.
1544 dnl In this test, the input packet in vlan-tagged, which should be stripped
1545 dnl before we push the MPLS and VLAN tags.
1546 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1549 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))'
1551 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1552 ovs-appctl -t ovs-ofctl exit
1554 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1555 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1556 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
1557 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
1558 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1559 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1560 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1562 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1563 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
1564 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
1565 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1566 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1567 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1569 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1570 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
1571 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
1572 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1573 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1574 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1577 dnl Modified MPLS controller action.
1578 dnl In this test, the input packet in vlan-tagged, which should be modified
1579 dnl before we push MPLS and VLAN tags.
1580 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1583 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))'
1585 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1586 ovs-appctl -t ovs-ofctl exit
1588 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1589 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1590 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
1591 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
1592 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1593 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1594 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1596 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1597 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
1598 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
1599 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1600 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1601 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1603 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1604 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
1605 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
1606 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1607 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1608 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1611 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1612 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1613 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
1614 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
1615 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
1616 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
1617 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
1618 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
1619 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
1620 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
1621 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
1622 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
1623 OFPST_FLOW reply (OF1.2):
1629 AT_SETUP([ofproto-dpif - fragment handling])
1631 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1632 AT_DATA([flows.txt], [dnl
1633 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1634 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1635 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1636 priority=50 tcp ip_frag=no actions=output:4
1637 priority=50 tcp ip_frag=first actions=output:5
1638 priority=50 tcp ip_frag=later actions=output:6
1640 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1642 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"
1643 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1644 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1645 later_flow="$base_flow,frag=later)"
1647 # mode no first later
1650 'drop 1 drop drop' \
1659 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1660 for type in no first later; do
1661 eval flow=\$${type}_flow exp_output=\$$type
1662 printf "\n%s\n" "----$mode $type-----"
1663 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1665 if test $mode = drop && test $type != no; then
1666 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1668 echo "Datapath actions: $exp_output" >> expout
1669 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1675 AT_SETUP([ofproto-dpif - exit])
1677 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1678 AT_DATA([flows.txt], [dnl
1679 in_port=1 actions=output:10,exit,output:11
1680 in_port=2 actions=output:12,resubmit:1,output:12
1681 in_port=3 actions=output:13,resubmit:2,output:14
1683 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1684 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])
1685 AT_CHECK([tail -1 stdout], [0],
1686 [Datapath actions: 10
1688 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])
1689 AT_CHECK([tail -1 stdout], [0],
1690 [Datapath actions: 12,10
1692 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])
1693 AT_CHECK([tail -1 stdout], [0],
1694 [Datapath actions: 13,12,10
1700 AT_SETUP([ofproto-dpif - mirroring, select_all])
1702 ADD_OF_PORTS([br0], 1, 2, 3)
1704 set Bridge br0 mirrors=@m --\
1705 --id=@p3 get Port p3 --\
1706 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1708 AT_DATA([flows.txt], [dnl
1709 in_port=1 actions=output:2
1710 in_port=2 actions=output:1
1712 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1714 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)"
1715 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1716 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1717 [Datapath actions: 2,3
1720 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)"
1721 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1722 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1723 [Datapath actions: 1,3
1730 AT_SETUP([ofproto-dpif - mirroring, select_src])
1732 ADD_OF_PORTS([br0], 1, 2, 3)
1734 set Bridge br0 mirrors=@m --\
1735 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1736 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1738 AT_DATA([flows.txt], [dnl
1739 in_port=1 actions=output:2
1740 in_port=2 actions=output:1
1742 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1744 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)"
1745 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1746 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1747 [Datapath actions: 2,3
1750 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)"
1751 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1752 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1753 [Datapath actions: 1
1758 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1760 ADD_OF_PORTS([br0], 1, 2)
1762 set Bridge br0 mirrors=@m --\
1763 --id=@p2 get Port p2 --\
1764 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1766 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1768 # "in_port" defaults to OFPP_NONE if it's not specified.
1769 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"
1770 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1771 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1772 [Datapath actions: 1,2
1779 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1781 ADD_OF_PORTS([br0], 1, 2, 3)
1783 set Bridge br0 mirrors=@m --\
1784 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1785 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1787 AT_DATA([flows.txt], [dnl
1788 in_port=1 actions=output:2
1789 in_port=2 actions=output:1
1791 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1793 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)"
1794 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1795 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1796 [Datapath actions: 2,3
1799 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)"
1800 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1801 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1802 [Datapath actions: 1
1809 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1811 ADD_OF_PORTS([br0], 1, 2, 3)
1813 set Bridge br0 mirrors=@m --\
1814 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1815 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1817 AT_DATA([flows.txt], [dnl
1818 in_port=1, actions=output:2
1820 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1822 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)"
1823 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1824 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1825 [Datapath actions: 2
1828 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))"
1829 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1830 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1831 [Datapath actions: 2
1834 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))"
1835 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1836 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1837 [Datapath actions: 2,3
1844 AT_SETUP([ofproto-dpif - mirroring, output_port])
1846 ADD_OF_PORTS([br0], 1, 2, 3)
1848 set Bridge br0 mirrors=@m --\
1849 --id=@p3 get Port p3 --\
1850 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1852 AT_DATA([flows.txt], [dnl
1853 in_port=1 actions=mod_vlan_vid:17,output:2
1854 in_port=2 actions=output:1
1856 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1858 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)"
1859 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1860 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1861 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1864 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)"
1865 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1866 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1867 [Datapath actions: 1,3
1873 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1875 ADD_OF_PORTS([br0], 1, 2)
1877 set Bridge br0 mirrors=@m --\
1878 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1880 AT_DATA([flows.txt], [dnl
1881 in_port=1 actions=output:2
1882 in_port=2 actions=mod_vlan_vid:17,output:1
1884 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1886 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)"
1887 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1888 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1890 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1891 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1893 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1895 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)"
1896 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1897 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1899 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1900 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1902 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1907 # Two testcases below are for the ofproto/trace command
1908 # The first one tests all correct syntax:
1909 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1910 # ofproto/trace br_name br_flow [-generate|packet]
1911 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1912 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1913 ADD_OF_PORTS([br0], 1, 2, 3)
1915 AT_DATA([flows.txt], [dnl
1916 in_port=1 actions=output:2
1917 in_port=2 actions=output:1
1919 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1921 odp_flow="in_port(p1)"
1923 # Test command: ofproto/trace odp_flow with in_port as a name.
1924 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1925 AT_CHECK([tail -1 stdout], [0], [dnl
1929 odp_flow="in_port(1)"
1930 # Test command: ofproto/trace odp_flow
1931 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1932 AT_CHECK([tail -1 stdout], [0], [dnl
1936 # Test command: ofproto/trace dp_name odp_flow
1937 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1938 AT_CHECK([tail -1 stdout], [0], [dnl
1941 # Test commmand: ofproto/trace br_name br_flow
1942 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1943 AT_CHECK([tail -1 stdout], [0], [dnl
1947 # Delete the inserted flows
1948 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1949 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1951 # This section beflow tests the [-generate] option
1952 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1953 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"
1955 # Test command: ofproto/trace odp_flow
1956 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1957 # Check for no MAC learning entry
1958 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1962 # Test command: ofproto/trace br_name br_flow
1963 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1964 # Check for no MAC learning entry
1965 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1969 # Test command: ofproto/trace odp_flow -generate
1970 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1971 # Check for the MAC learning entry
1972 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1974 3 0 50:54:00:00:00:05 ?
1977 # Test command: ofproto/trace dp_name odp_flow -generate
1978 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1979 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1980 -generate], [0], [stdout])
1981 # Check for both MAC learning entries
1982 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1984 3 0 50:54:00:00:00:05 ?
1985 1 0 50:54:00:00:00:06 ?
1988 # Test command: ofproto/trace br_name br_flow -generate
1989 AT_CHECK([ovs-appctl ofproto/trace br0 \
1990 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1991 -generate], [0], [stdout])
1992 # Check for both MAC learning entries.
1993 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1995 3 0 50:54:00:00:00:05 ?
1996 1 0 50:54:00:00:00:06 ?
1997 2 0 50:54:00:00:00:07 ?
2000 # This section beflow tests the [packet] option
2001 # The ovs-tcpundump of packets between port1 and port2
2002 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2003 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2005 # Construct the MAC learning table
2006 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2007 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2008 -generate], [0], [stdout])
2010 # Construct the MAC learning table
2011 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2012 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2013 -generate], [0], [stdout])
2015 # Test command: ofproto/trace odp_flow packet
2016 AT_CHECK([ovs-appctl ofproto/trace \
2017 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2018 AT_CHECK([tail -1 stdout], [0], [dnl
2021 AT_CHECK([head -n 2 stdout], [0], [dnl
2023 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
2026 # Test command: ofproto/trace dp_name odp_flow packet
2027 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2028 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2029 AT_CHECK([tail -1 stdout], [0], [dnl
2032 AT_CHECK([head -n 2 stdout], [0], [dnl
2034 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
2037 # Test command: ofproto/trace br_name br_flow packet
2038 AT_CHECK([ovs-appctl ofproto/trace br0 \
2039 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2040 AT_CHECK([tail -1 stdout], [0], [dnl
2043 AT_CHECK([head -n 2 stdout], [0], [dnl
2045 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
2051 # The second test tests the corner cases
2052 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2054 ADD_OF_PORTS([br0], 1, 2)
2057 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2058 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2060 generate="-generate"
2061 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2063 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2069 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2071 AT_CHECK([tail -2 stderr], [0], [dnl
2072 Cannot find the datapath
2073 ovs-appctl: ovs-vswitchd: server returned an error
2076 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2082 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2084 AT_CHECK([tail -2 stderr], [0], [dnl
2085 Cannot find the datapath
2086 ovs-appctl: ovs-vswitchd: server returned an error
2089 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2095 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2097 AT_CHECK([tail -2 stderr], [0], [dnl
2098 Cannot find the datapath
2099 ovs-appctl: ovs-vswitchd: server returned an error
2102 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2108 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2110 AT_CHECK([tail -2 stderr], [0], [dnl
2111 Cannot find the datapath
2112 ovs-appctl: ovs-vswitchd: server returned an error
2115 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2121 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2123 AT_CHECK([tail -2 stderr], [0], [dnl
2125 ovs-appctl: ovs-vswitchd: server returned an error
2128 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2134 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2136 AT_CHECK([tail -2 stderr], [0], [dnl
2137 Must specify bridge name
2138 ovs-appctl: ovs-vswitchd: server returned an error
2141 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2142 AT_CHECK([ovs-appctl ofproto/trace \
2143 ovs-dummy "$odp_flow" garbage_option],
2144 [2], [stdout],[stderr])
2145 AT_CHECK([tail -2 stderr], [0], [dnl
2146 Trailing garbage in packet data
2147 ovs-appctl: ovs-vswitchd: server returned an error
2150 # Test incorrect command: ofproto/trace with 4 arguments
2151 AT_CHECK([ovs-appctl ofproto/trace \
2152 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2153 AT_CHECK([tail -2 stderr], [0], [dnl
2154 "ofproto/trace" command takes at most 3 arguments
2155 ovs-appctl: ovs-vswitchd: server returned an error
2158 # Test incorrect command: ofproto/trace with 0 argument
2159 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2160 AT_CHECK([tail -2 stderr], [0], [dnl
2161 "ofproto/trace" command requires at least 1 arguments
2162 ovs-appctl: ovs-vswitchd: server returned an error
2168 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2170 ADD_OF_PORTS([br0], 1, 2, 3)
2172 AT_DATA([flows.txt], [dnl
2173 in_port=1 actions=output:2
2174 in_port=2 actions=output:1
2176 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2178 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2179 AT_CHECK([tail -1 stdout], [0], [dnl
2180 Datapath actions: push_vlan(vid=123,pcp=0),2
2187 m4_define([OFPROTO_TRACE],
2189 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2190 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2192 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2195 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2198 AT_SETUP([ofproto-dpif - MAC learning])
2199 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2200 ADD_OF_PORTS([br0], 1, 2, 3)
2202 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)'
2204 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2207 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2211 # Check for the MAC learning entry.
2212 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2214 3 0 50:54:00:00:00:05 ?
2217 # Trace a packet arrival destined for the learned MAC.
2218 # (This will also learn a MAC.)
2221 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2225 # Check for both MAC learning entries.
2226 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2228 3 0 50:54:00:00:00:05 ?
2229 1 0 50:54:00:00:00:06 ?
2232 # Trace a packet arrival that updates the first learned MAC entry.
2235 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2239 # Check that the MAC learning entry was updated.
2240 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2242 1 0 50:54:00:00:00:06 ?
2243 2 0 50:54:00:00:00:05 ?
2246 # Add another bridge.
2250 -- set bridge br1 datapath-type=dummy])
2251 ADD_OF_PORTS([br1], 4, 5)
2253 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2256 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2261 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2265 # Check that the MAC learning entries were added.
2266 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2268 4 0 50:54:00:00:00:06 ?
2269 5 0 50:54:00:00:00:07 ?
2272 # Delete port p1 and see that its MAC learning entry disappeared, and
2273 # that the MAC learning entry for the same MAC was also deleted from br1.
2274 AT_CHECK([ovs-vsctl del-port p1])
2275 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2277 2 0 50:54:00:00:00:05 ?
2279 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2281 5 0 50:54:00:00:00:07 ?
2287 AT_SETUP([ofproto-dpif - MAC table overflow])
2289 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2290 ADD_OF_PORTS([br0], 1, 2, 3)
2292 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)'
2294 AT_CHECK([ovs-appctl time/stop])
2296 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2297 for i in 0 1 2 3 4 5 6 7 8 9; do
2300 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2303 ovs-appctl time/warp 1000
2306 # Check for the MAC learning entries.
2307 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2309 3 0 50:54:00:00:00:00
2310 3 0 50:54:00:00:00:01
2311 3 0 50:54:00:00:00:02
2312 3 0 50:54:00:00:00:03
2313 3 0 50:54:00:00:00:04
2314 3 0 50:54:00:00:00:05
2315 3 0 50:54:00:00:00:06
2316 3 0 50:54:00:00:00:07
2317 3 0 50:54:00:00:00:08
2318 3 0 50:54:00:00:00:09
2322 # Trace another ARP packet on another MAC.
2325 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2329 # Check that the new one chased the oldest one out of the table.
2330 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2332 3 0 50:54:00:00:00:01 ?
2333 3 0 50:54:00:00:00:02 ?
2334 3 0 50:54:00:00:00:03 ?
2335 3 0 50:54:00:00:00:04 ?
2336 3 0 50:54:00:00:00:05 ?
2337 3 0 50:54:00:00:00:06 ?
2338 3 0 50:54:00:00:00:07 ?
2339 3 0 50:54:00:00:00:08 ?
2340 3 0 50:54:00:00:00:09 ?
2341 3 0 50:54:00:00:00:10 ?
2347 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2349 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2351 # IP_VERSION_TYPE is used in AT_SETUP
2352 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2353 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2354 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2356 ON_EXIT([kill `cat test-sflow.pid`])
2357 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2358 AT_CAPTURE_FILE([sflow.log])
2359 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2360 ovs-appctl time/stop
2362 ADD_OF_PORTS([br0], 1, 2)
2364 set Interface br0 options:ifindex=1002 -- \
2365 set Interface p1 options:ifindex=1004 -- \
2366 set Interface p2 options:ifindex=1003 -- \
2367 set Bridge br0 sflow=@sf -- \
2368 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
2369 header=128 sampling=1 polling=1 agent=lo
2371 dnl open with ARP packets to seed the bridge-learning. The output
2372 dnl ifIndex numbers should be reported predictably after that.
2373 dnl Since we set sampling=1 we should see all of these packets
2374 dnl reported. Sorting the output by data-source and seqNo makes
2375 dnl it deterministic. Ensuring that we send at least two packets
2376 dnl into each port means we get to check the seq nos are
2377 dnl incrementing correctly.
2378 dnl because packets from different ports can be handled by separate
2379 dnl threads, put some sleeps
2381 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)'
2383 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)'
2385 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)'
2387 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)'
2388 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)'
2390 dnl sleep long enough to get more than one counter sample
2391 dnl from each datasource so we can check sequence numbers
2392 for i in `seq 1 30`; do
2393 ovs-appctl time/warp 100
2396 ovs-appctl -t test-sflow exit
2398 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
2419 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
2439 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
2459 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
2479 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
2499 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
2502 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
2516 in_broadcasts=4294967295
2519 in_unknownprotos=4294967295
2522 out_multicasts=4294967295
2523 out_broadcasts=4294967295
2539 in_broadcasts=4294967295
2542 in_unknownprotos=4294967295
2545 out_multicasts=4294967295
2546 out_broadcasts=4294967295
2562 in_broadcasts=4294967295
2565 in_unknownprotos=4294967295
2568 out_multicasts=4294967295
2569 out_broadcasts=4294967295
2585 in_broadcasts=4294967295
2588 in_unknownprotos=4294967295
2591 out_multicasts=4294967295
2592 out_broadcasts=4294967295
2608 in_broadcasts=4294967295
2611 in_unknownprotos=4294967295
2614 out_multicasts=4294967295
2615 out_broadcasts=4294967295
2631 in_broadcasts=4294967295
2634 in_unknownprotos=4294967295
2637 out_multicasts=4294967295
2638 out_broadcasts=4294967295
2645 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
2646 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
2648 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2650 # Test that basic NetFlow reports flow statistics correctly:
2651 # The initial packet of a flow are correctly accounted.
2652 # Later packets within a flow are correctly accounted.
2653 # Flow actions changing (in this case, due to MAC learning)
2654 # cause a record to be sent.
2656 # IP_VERSION_TYPE is used in AT_SETUP
2657 m4_define([CHECK_NETFLOW_EXPIRATION],
2658 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
2659 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2660 ADD_OF_PORTS([br0], 1, 2)
2662 ovs-appctl time/stop
2663 ON_EXIT([kill `cat test-netflow.pid`])
2664 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2665 AT_CAPTURE_FILE([netflow.log])
2666 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2669 set Bridge br0 netflow=@nf -- \
2670 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2671 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2673 for delay in 1000 30000; do
2674 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)'
2675 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)'
2677 ovs-appctl time/warp $delay
2680 ovs-appctl time/warp 6000
2683 ovs-appctl -t test-netflow exit
2685 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])
2687 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])
2689 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
2690 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
2691 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
2695 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
2696 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
2698 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2700 # Test that basic NetFlow reports active expirations correctly.
2702 # IP_VERSION_TYPE is used in AT_SETUP
2703 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
2704 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
2706 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2707 ADD_OF_PORTS([br0], 1, 2)
2709 ON_EXIT([kill `cat test-netflow.pid`])
2710 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2711 AT_CAPTURE_FILE([netflow.log])
2712 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2715 set Bridge br0 netflow=@nf -- \
2716 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2717 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2719 AT_CHECK([ovs-appctl time/stop])
2721 while test $n -le 60; do
2724 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)'
2725 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)'
2727 ovs-appctl time/warp 1000
2730 ovs-appctl time/warp 10000
2734 ovs-appctl -t test-netflow exit
2736 # Count the number of reported packets:
2737 # - From source to destination before MAC learning kicks in (just one).
2738 # - From source to destination after that.
2739 # - From destination to source.
2747 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2754 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2757 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2760 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2767 eval $counter=\`expr \$$counter + \$pkts\`
2768 n_recs=`expr $n_recs + 1`
2771 # There should be exactly 1 MAC learning packet,
2772 # exactly 59 other packets in that direction,
2773 # and exactly 60 packets in the other direction.
2774 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2779 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
2780 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
2782 AT_SETUP([idle_age and hard_age increase over time])
2785 # get_ages DURATION HARD IDLE
2787 # Fetch the flow duration, hard age, and idle age into the variables
2788 # whose names are given as arguments. Rounds DURATION down to the
2789 # nearest integer. If hard_age doesn't appear in the output, sets
2790 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2793 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2795 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2796 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2797 AS_VAR_COPY([$1], [duration])
2799 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2800 if test X"$hard" = X; then
2803 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2805 AS_VAR_COPY([$2], [hard])
2807 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2808 if test X"$idle" = X; then
2811 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2813 AS_VAR_COPY([$3], [idle])
2816 # Add a flow and get its initial hard and idle age.
2817 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2818 get_ages duration1 hard1 idle1
2820 ovs-appctl time/stop
2821 # Warp time forward by 10 seconds, then modify the flow's actions.
2822 ovs-appctl time/warp 10000
2823 get_ages duration2 hard2 idle2
2824 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2826 # Warp time forward by 10 seconds.
2827 ovs-appctl time/warp 10000
2828 get_ages duration3 hard3 idle3
2830 # Warp time forward 10 more seconds, then pass some packets through the flow,
2831 # then warp forward a few more times because idle times are only updated
2833 ovs-appctl time/warp 10000
2834 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)'
2835 ovs-appctl time/warp 1000
2836 ovs-appctl time/warp 1000
2837 ovs-appctl time/warp 1000
2838 get_ages duration4 hard4 idle4
2840 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2841 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2842 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2844 # Duration should increase steadily over time.
2845 AT_CHECK([test $duration1 -lt $duration2])
2846 AT_CHECK([test $duration2 -lt $duration3])
2847 AT_CHECK([test $duration3 -lt $duration4])
2849 # Hard age should be "none" initially because it's the same as flow_duration,
2850 # then it should increase.
2851 AT_CHECK([test $hard1 = none])
2852 AT_CHECK([test $hard2 = none])
2853 AT_CHECK([test $hard3 != none])
2854 AT_CHECK([test $hard4 != none])
2855 AT_CHECK([test $hard3 -lt $hard4])
2857 # Idle age should increase from 1 to 2 to 3, then decrease.
2858 AT_CHECK([test $idle1 -lt $idle2])
2859 AT_CHECK([test $idle2 -lt $idle3])
2860 AT_CHECK([test $idle3 -gt $idle4])
2862 # Check some invariant relationships.
2863 AT_CHECK([test $duration1 = $idle1])
2864 AT_CHECK([test $duration2 = $idle2])
2865 AT_CHECK([test $duration3 = $idle3])
2866 AT_CHECK([test $idle3 -gt $hard3])
2867 AT_CHECK([test $idle4 -lt $hard4])
2868 AT_CHECK([test $hard4 -lt $duration4])
2873 AT_SETUP([ofproto-dpif - fin_timeout])
2875 AT_DATA([flows.txt], [dnl
2876 in_port=1 actions=output:2
2877 in_port=2 actions=mod_vlan_vid:17,output:1
2879 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2880 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2882 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2885 ovs-appctl time/stop
2886 # Check that a TCP SYN packet does not change the timeout. (Because
2887 # flow stats updates are mainly what implements the fin_timeout
2888 # feature, we warp forward a couple of times to ensure that flow stats
2889 # run before re-checking the flow table.)
2890 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2891 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2894 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2896 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2898 # Check that a TCP FIN packet does change the timeout.
2899 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2900 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2903 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2905 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2910 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2911 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2912 ADD_OF_PORTS([br0], [1], [2])
2913 ADD_OF_PORTS([br1], [3])
2915 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2922 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2923 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2924 ADD_OF_PORTS([br0], [1], [2])
2925 ADD_OF_PORTS([br1], [3])
2927 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2928 dummy@ovs-dummy: hit:0 missed:0
2930 br0 65534/100: (dummy)
2934 br1 65534/101: (dummy)
2940 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2941 OVS_VSWITCHD_START([add-br br1 -- \
2942 set bridge br1 datapath-type=dummy fail-mode=secure])
2943 ADD_OF_PORTS([br0], [1], [2])
2944 ADD_OF_PORTS([br1], [3])
2946 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)'])
2947 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)'])
2948 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)'])
2950 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2951 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2952 skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2955 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2956 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2959 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
2960 skb_priority(0),skb_mark(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2961 skb_priority(0),skb_mark(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2964 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
2965 skb_priority(0),skb_mark(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2971 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
2972 OVS_VSWITCHD_START([dnl
2973 add-port br0 p1 -- set Interface p1 type=dummy
2975 ON_EXIT([kill `cat ovs-ofctl.pid`])
2977 AT_CAPTURE_FILE([ofctl_monitor.log])
2978 AT_DATA([flows.txt], [dnl
2979 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2980 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2982 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2984 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
2985 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
2987 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
2988 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)
2989 dnl (label 20, exp 0, [S], ttl 32)
2990 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2991 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2993 for dl_src in 00 01; do
2994 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"])
2996 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
2997 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))
3005 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3006 OVS_VSWITCHD_START([dnl
3007 add-port br0 p1 -- set Interface p1 type=dummy
3009 ON_EXIT([kill `cat ovs-ofctl.pid`])
3011 AT_CAPTURE_FILE([ofctl_monitor.log])
3012 AT_DATA([flows.txt], [dnl
3013 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3014 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3016 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3018 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3019 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3020 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3022 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3023 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)
3024 dnl (label 20, exp 0, ttl 32)
3025 dnl (label 20, exp 0, ttl 32)
3026 dnl (label 20, exp 0, [S], ttl 32)
3027 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3028 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3030 for dl_src in 00 01; do
3031 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"])
3033 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3034 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))
3041 AT_SETUP([ofproto-dpif - patch ports])
3042 OVS_VSWITCHD_START([add-br br1 \
3043 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3044 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3045 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3047 ADD_OF_PORTS([br0], [2])
3048 ADD_OF_PORTS([br1], [3])
3050 AT_CHECK([ovs-appctl time/stop])
3052 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3053 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3055 for i in $(seq 1 10); do
3056 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)'
3059 for i in $(seq 1 5); do
3060 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)'
3063 AT_CHECK([ovs-appctl time/warp 500], [0],
3067 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3068 dummy@ovs-dummy: hit:13 missed:2
3070 br0 65534/100: (dummy)
3072 pbr0 1/none: (patch: peer=pbr1)
3074 br1 65534/101: (dummy)
3076 pbr1 1/none: (patch: peer=pbr0)
3079 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3080 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
3082 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3083 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
3086 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3087 OFPST_PORT reply (xid=0x4): 1 ports
3088 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3089 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3092 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3093 OFPST_PORT reply (xid=0x4): 1 ports
3094 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3095 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3101 AT_SETUP([ofproto-dpif - port duration])
3102 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3103 ADD_OF_PORTS([br0], 1, 2)
3105 ovs-appctl time/stop
3106 ovs-appctl time/warp 10000
3108 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3109 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3118 dnl ----------------------------------------------------------------------
3119 AT_BANNER([ofproto-dpif -- megaflows])
3121 AT_SETUP([ofproto-dpif megaflow - port classification])
3123 ADD_OF_PORTS([br0], [1], [2])
3124 AT_DATA([flows.txt], [dnl
3125 table=0 in_port=1 actions=output(2)
3127 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3128 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)'])
3129 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)'])
3131 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3132 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>
3137 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3139 ADD_OF_PORTS([br0], [1], [2])
3140 AT_DATA([flows.txt], [dnl
3141 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3143 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3144 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)'])
3145 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)'])
3147 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3148 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>
3149 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>
3154 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3156 ADD_OF_PORTS([br0], [1], [2])
3157 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], [])
3158 AT_DATA([flows.txt], [dnl
3159 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3161 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3162 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)'])
3163 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)'])
3165 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3166 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>
3167 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>
3172 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3174 ADD_OF_PORTS([br0], [1], [2])
3175 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], [])
3176 AT_DATA([flows.txt], [dnl
3177 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3179 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3180 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)'])
3181 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)'])
3183 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3184 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>
3185 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>
3190 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3192 ADD_OF_PORTS([br0], [1], [2])
3193 AT_DATA([flows.txt], [dnl
3194 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3196 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3197 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)'])
3198 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)'])
3199 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3200 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>
3205 AT_SETUP([ofproto-dpif megaflow - normal])
3207 ADD_OF_PORTS([br0], [1], [2])
3208 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3209 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)'])
3210 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)'])
3212 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3213 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>
3214 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>
3219 AT_SETUP([ofproto-dpif megaflow - mpls])
3221 ADD_OF_PORTS([br0], [1], [2])
3222 AT_DATA([flows.txt], [dnl
3223 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3224 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3226 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3227 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)'])
3228 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)'])
3230 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3231 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>
3232 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>
3237 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3239 # IP_VERSION_TYPE is used in AT_SETUP
3240 m4_define([CHECK_MEGAFLOW_NETFLOW],
3241 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3243 ADD_OF_PORTS([br0], [1], [2])
3245 dnl NetFlow configuration disables wildcarding relevant fields
3246 ON_EXIT([kill `cat test-netflow.pid`])
3247 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3248 AT_CAPTURE_FILE([netflow.log])
3249 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3251 set Bridge br0 netflow=@nf -- \
3252 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3253 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3255 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3256 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)'])
3257 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)'])
3259 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3260 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>
3261 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>
3266 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3267 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3269 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3271 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3272 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3273 set interface p2 type=dummy ofport_request=2 -- \
3274 set interface p3 type=dummy ofport_request=3])
3275 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3278 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3279 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)'])
3280 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)'])
3282 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3283 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>
3284 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>
3289 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3291 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3292 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3293 set interface p2 type=dummy ofport_request=2 -- \
3294 set interface p3 type=dummy ofport_request=3])
3295 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3298 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3299 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)'])
3300 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)'])
3302 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3303 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>
3304 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>
3309 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3310 # Create bond0 on br0 with interfaces p0 and p1
3311 # and bond1 on br1 with interfaces p2 and p3
3312 # with p0 patched to p2 and p1 patched to p3.
3314 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3315 other-config:lacp-time=fast \
3316 other-config:bond-rebalance-interval=0 -- \
3317 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3318 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3320 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3321 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3322 fail-mode=secure -- \
3323 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3324 other-config:lacp-time=fast \
3325 other-config:bond-rebalance-interval=0 -- \
3326 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3327 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3329 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3331 ADD_OF_PORTS([br0], [7])
3332 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3333 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
3334 ovs-appctl time/stop
3335 ovs-appctl time/warp 5000
3336 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)'])
3337 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)'])
3339 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3340 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>
3341 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>
3346 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3348 ADD_OF_PORTS([br0], [1], [2])
3349 AT_DATA([flows.txt], [dnl
3350 table=0 in_port=1,ip actions=resubmit(90)
3351 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3353 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3354 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)'])
3355 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)'])
3357 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3358 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>
3359 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>
3364 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3366 ADD_OF_PORTS([br0], [1], [2])
3367 AT_DATA([flows.txt], [dnl
3368 table=0 in_port=1,ip actions=resubmit(,1)
3369 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3371 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3372 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)'])
3373 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=
3374 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3376 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3377 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>
3378 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>
3383 AT_SETUP([ofproto-dpif megaflow - goto_table action])
3385 ADD_OF_PORTS([br0], [1], [2])
3386 AT_DATA([flows.txt], [dnl
3387 table=0 in_port=1,ip actions=goto_table(1)
3388 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3390 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3391 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)'])
3392 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)'])
3394 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3395 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>
3396 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>
3401 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3403 ADD_OF_PORTS([br0], [1], [2], [3])
3405 set Bridge br0 mirrors=@m --\
3406 --id=@p3 get Port p3 --\
3407 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3409 AT_DATA([flows.txt], [dnl
3410 in_port=1 actions=output:2
3412 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3413 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)'])
3414 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)'])
3416 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3417 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>
3422 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3424 ADD_OF_PORTS([br0], [1], [2], [3])
3426 set Bridge br0 mirrors=@m --\
3427 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3428 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3430 AT_DATA([flows.txt], [dnl
3431 in_port=1 actions=output:2
3433 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3434 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))'])
3435 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)'])
3437 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3438 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>
3439 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>
3444 AT_SETUP([ofproto-dpif megaflow - move action])
3446 ADD_OF_PORTS([br0], [1], [2])
3447 AT_DATA([flows.txt], [dnl
3448 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
3449 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
3450 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
3452 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3453 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)'])
3454 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)'])
3456 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3457 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>
3458 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>
3463 AT_SETUP([ofproto-dpif megaflow - push action])
3465 ADD_OF_PORTS([br0], [1], [2])
3466 AT_DATA([flows.txt], [dnl
3467 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
3469 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3470 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)'])
3471 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)'])
3473 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3474 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>
3475 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>
3480 AT_SETUP([ofproto-dpif megaflow - learning])
3482 ADD_OF_PORTS([br0], [1], [2])
3483 AT_DATA([flows.txt], [dnl
3484 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
3486 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3487 ovs-appctl time/stop
3488 # We send each packet twice because the first packet in each flow causes the
3489 # flow table to change and thus revalidations, which (depending on timing)
3490 # can keep a megaflow from being installed. The revalidations are done by
3491 # the second iteration, allowing the flows to be installed.
3493 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)'])
3494 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)'])
3495 ovs-appctl time/warp 100
3498 dnl The original flow is missing due to a revalidation.
3499 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3500 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>
3501 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>
3506 AT_SETUP([ofproto-dpif megaflow - tunnels])
3508 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
3509 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
3510 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
3511 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
3513 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
3514 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
3515 ofport_request=4 options:key=flow])
3516 AT_DATA([flows.txt], [dnl
3517 in_port=1,actions=output(2)
3518 in_port=3,actions=output(4)
3520 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3521 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
3522 dnl will cause the packet to be dropped.
3523 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)'])
3524 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)'])
3525 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)'])
3526 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)'])
3528 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3529 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>
3530 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>
3531 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>
3536 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
3538 ADD_OF_PORTS([br0], [1], [2])
3539 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], [])
3540 AT_DATA([flows.txt], [dnl
3541 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
3543 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3544 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)'])
3545 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)'])
3547 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3548 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>
3549 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>
3554 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
3556 ADD_OF_PORTS([br0], [1], [2])
3557 AT_DATA([flows.txt], [dnl
3558 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
3560 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3561 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)'])
3562 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)'])
3564 dnl The megaflows do not match the same fields, since the first packet
3565 dnl is essentially a no-op. (The new destination MAC is the same as the
3566 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
3567 dnl so that a packet that doesn't need its MAC address changed doesn't
3568 dnl hide one that does. Since the first entry doesn't need to change,
3569 dnl only the destination MAC address is matched (as decided by
3570 dnl ofproto-dpif). The second entry actually updates the destination
3571 dnl MAC, so both the source and destination MAC addresses are
3572 dnl un-wildcarded, since the ODP commit functions update both the source
3573 dnl and destination MAC addresses.
3574 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3575 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
3576 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
3581 AT_SETUP([ofproto-dpif megaflow - disabled])
3583 ADD_OF_PORTS([br0], [1], [2])
3584 AT_DATA([flows.txt], [dnl
3585 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
3586 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
3588 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
3590 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
3591 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3592 for i in 1 2 3 4; do
3593 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)'])
3594 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)'])
3597 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3598 skb_priority(0),skb_mark(0),in_port(1/0xffff),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
3599 skb_priority(0),skb_mark(0),in_port(1/0xffff),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
3604 AT_SETUP([ofproto-dpif - datapath port number change])
3605 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3606 ADD_OF_PORTS([br0], 1)
3608 # Trace a flow that should output to p1.
3609 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3611 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
3614 # Change p1's port number to 5.
3615 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
3617 # Trace a flow that should output to p1 in its new location.
3618 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3620 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
3625 # Tests the bundling with various bfd and cfm configurations.
3626 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
3627 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
3628 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
3629 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
3630 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
3631 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
3632 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
3633 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
3634 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
3635 set Interface p0 cfm_mpid=1 -- \
3636 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
3638 ovs-appctl time/stop
3639 # advance the clock to stablize everything.
3640 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3641 # cfm/show should show 'recv' fault.
3642 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3645 # bfd/show should show 'up'.
3646 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3647 Local Session State: up
3648 Remote Session State: up
3649 Local Session State: up
3650 Remote Session State: up
3652 # bond/show should show 'may-enable: true' for all slaves.
3653 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3660 # now disable the bfd on p1.
3661 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3662 # advance the clock to stablize everything.
3663 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3664 # cfm/show should show 'recv' fault.
3665 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3668 # bfd/show should show 'down'.
3669 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3670 Local Session State: down
3671 Remote Session State: down
3673 # bond/show should show 'may-enable: false' for p0.
3674 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3679 # now enable the bfd on p1 and disable bfd on p0.
3680 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3681 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3682 # advance the clock to stablize everything.
3683 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3684 # cfm/show should show 'recv' fault.
3685 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3688 # bfd/show should show 'down'.
3689 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3690 Local Session State: down
3691 Remote Session State: down
3693 # bond/show should show 'may-enable: false' for p0 and p1.
3694 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3704 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3705 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3708 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3710 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3711 monitor thread created
3713 # disable bfd on p0.
3714 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3716 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3717 monitor thread terminated
3719 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3722 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3724 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3725 monitor thread created
3727 # disable cfm on p0.
3728 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3730 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3731 monitor thread terminated
3733 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3735 # enable both bfd and cfm on p0.
3736 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3738 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3739 monitor thread created
3741 # disable bfd on p0.
3742 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3743 # check log, there should not be the log of thread terminated.
3744 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3746 # reenable bfd on p0.
3747 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3748 # check log, should still be on log of thread created.
3749 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3750 monitor thread created
3752 # disable bfd and cfm together.
3753 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3755 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3756 monitor thread terminated
3762 # this test helps avoid the deadlock between the main thread and monitor thread.
3763 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3766 for i in `seq 1 199`
3768 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])
3774 AT_BANNER([ofproto-dpif - flow translation resource limits])
3776 AT_SETUP([ofproto-dpif - infinite resubmit])
3778 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3779 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3781 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3783 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3786 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3789 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3791 ADD_OF_PORTS([br0], 1)
3792 (for i in `seq 1 64`; do
3794 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3796 echo "in_port=65, actions=local") > flows
3797 AT_CHECK([ovs-ofctl add-flows br0 flows])
3798 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3799 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3801 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3804 AT_SETUP([ofproto-dpif - too many output actions])
3806 ADD_OF_PORTS([br0], 1)
3807 (for i in `seq 1 12`; do
3809 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3811 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3812 AT_CHECK([ovs-ofctl add-flows br0 flows])
3813 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3814 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3817 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3819 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3822 AT_SETUP([ofproto-dpif - stack too deep])
3824 ADD_OF_PORTS([br0], 1)
3825 (for i in `seq 1 12`; do
3827 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3829 push="push:NXM_NX_REG0[[]]"
3830 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3831 AT_CHECK([ovs-ofctl add-flows br0 flows])
3832 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3833 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3835 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])