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 - all group in action list])
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,bucket=output:11'])
119 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
120 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])
121 AT_CHECK([tail -1 stdout], [0],
122 [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
127 AT_SETUP([ofproto-dpif - indirect group in action list])
129 ADD_OF_PORTS([br0], [1], [10])
130 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
131 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
132 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])
133 AT_CHECK([tail -1 stdout], [0],
134 [Datapath actions: 10
139 AT_SETUP([ofproto-dpif - all group in action set])
141 ADD_OF_PORTS([br0], [1], [10], [11])
142 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'])
143 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
144 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])
145 AT_CHECK([tail -1 stdout], [0],
146 [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
151 AT_SETUP([ofproto-dpif - indirect group in action set])
153 ADD_OF_PORTS([br0], [1], [10])
154 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
155 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
156 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])
157 AT_CHECK([tail -1 stdout], [0],
158 [Datapath actions: 10
163 AT_SETUP([ofproto-dpif - select group])
165 ADD_OF_PORTS([br0], [1], [10], [11])
166 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
167 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
169 # Try a bunch of different flows and make sure that they get distributed
171 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
172 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])
173 tail -1 stdout >> results
175 sort results | uniq -c
176 AT_CHECK([sort results | uniq], [0],
177 [Datapath actions: 10
183 AT_SETUP([ofproto-dpif - select group with watch port])
185 ADD_OF_PORTS([br0], [1], [10], [11])
186 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
187 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
188 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])
189 AT_CHECK([tail -1 stdout], [0],
190 [Datapath actions: 11
195 AT_SETUP([ofproto-dpif - select group with weight])
197 ADD_OF_PORTS([br0], [1], [10], [11], [12])
198 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'])
199 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
200 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])
201 AT_CHECK([tail -1 stdout], [0],
202 [Datapath actions: 11
207 AT_SETUP([ofproto-dpif - fast failover group])
209 ADD_OF_PORTS([br0], [1], [10], [11])
210 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'])
211 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
212 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])
213 AT_CHECK([tail -1 stdout], [0],
214 [Datapath actions: drop
219 AT_SETUP([ofproto-dpif - registers])
221 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
222 AT_DATA([flows.txt], [dnl
223 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
224 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
225 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
226 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
228 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
229 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
230 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
231 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
232 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
233 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
234 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
235 in_port=9,reg0=0xdeadbeef actions=output:20
236 in_port=10,reg1=0xdeadbeef actions=output:21
237 in_port=11,reg2=0xeef22dea actions=output:22
239 dnl Sanilty check all registers
240 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
241 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
242 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
243 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
246 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
247 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])
248 AT_CHECK([tail -1 stdout], [0],
249 [Datapath actions: 20,21,22,33
254 AT_SETUP([ofproto-dpif - push-pop])
256 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
257 AT_DATA([flows.txt], [dnl
258 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
259 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
260 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
261 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
262 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
265 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
266 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])
267 AT_CHECK([tail -1 stdout], [0],
268 [Datapath actions: 33,22,21,20
273 AT_SETUP([ofproto-dpif - output])
275 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
276 AT_DATA([flows.txt], [dnl
277 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
278 in_port=2 actions=output:9
279 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
280 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
281 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
282 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
283 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
284 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
286 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
287 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])
288 AT_CHECK([tail -1 stdout], [0],
289 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
294 AT_SETUP([ofproto-dpif - dec_ttl])
296 ADD_OF_PORTS([br0], [1], [2], [3], [4])
297 AT_DATA([flows.txt], [dnl
298 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
299 table=1 in_port=1 action=dec_ttl,output:3
301 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
302 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])
303 AT_CHECK([tail -3 stdout], [0],
304 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
305 This flow is handled by the userspace slow path because it:
306 - Sends "packet-in" messages to the OpenFlow controller.
308 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])
309 AT_CHECK([tail -1 stdout], [0],
310 [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
312 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])
313 AT_CHECK([tail -1 stdout], [0],
314 [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
317 AT_CAPTURE_FILE([ofctl_monitor.log])
318 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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=2,frag=no)' -generate], [0], [stdout])
320 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
321 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
322 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
323 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
329 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
331 ADD_OF_PORTS([br0], [1], [2])
333 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
335 # "in_port" defaults to OFPP_NONE if it's not specified.
336 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"
337 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
338 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
347 AT_SETUP([ofproto-dpif - DSCP])
348 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
349 ADD_OF_PORTS([br0], [9])
350 AT_DATA([flows.txt], [dnl
351 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
353 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
354 AT_CHECK([ovs-vsctl -- \
355 set Port p1 qos=@newqos --\
356 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
357 --id=@q1 create Queue dscp=1 --\
358 --id=@q2 create Queue dscp=2], [0], [ignore])
359 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])
360 AT_CHECK([tail -1 stdout], [0],
361 [Datapath actions: dnl
363 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
364 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
366 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
367 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
368 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
374 AT_SETUP([ofproto-dpif - output/flood flags])
376 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
378 AT_DATA([flows.txt], [dnl
379 in_port=local actions=local,flood
380 in_port=1 actions=flood
381 in_port=2 actions=all
382 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
383 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
385 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
386 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
387 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
389 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])
390 AT_CHECK([tail -1 stdout \
391 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
399 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])
400 AT_CHECK([tail -1 stdout \
401 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
409 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])
410 AT_CHECK([tail -1 stdout \
411 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
420 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])
421 AT_CHECK([tail -1 stdout], [0],
422 [Datapath actions: 100,1,2,4,6,7
425 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])
426 AT_CHECK([tail -1 stdout], [0],
427 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
432 AT_SETUP([ofproto-dpif - controller])
433 OVS_VSWITCHD_START([dnl
434 add-port br0 p1 -- set Interface p1 type=dummy
436 ON_EXIT([kill `cat ovs-ofctl.pid`])
438 AT_CAPTURE_FILE([ofctl_monitor.log])
439 AT_DATA([flows.txt], [dnl
440 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
441 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
442 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
444 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
445 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)
446 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)
447 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
448 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)
449 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
450 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
451 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
452 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
453 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
454 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
455 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
456 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
457 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
458 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
459 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
460 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
461 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
462 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
463 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
465 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
468 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
471 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)'
473 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
474 ovs-appctl -t ovs-ofctl exit
476 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
477 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
478 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
480 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
481 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
483 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
484 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
487 dnl Singleton controller action.
488 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
491 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)'
493 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
494 ovs-appctl -t ovs-ofctl exit
496 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
497 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
498 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
500 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
501 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
503 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
504 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
507 dnl Modified controller action.
508 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
511 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)'
513 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
514 ovs-appctl -t ovs-ofctl exit
516 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
517 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
518 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
520 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
521 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
523 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
524 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
527 dnl Modified VLAN controller action.
528 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
531 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)'
533 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
534 ovs-appctl -t ovs-ofctl exit
536 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
537 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
538 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
540 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
541 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
543 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
544 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
547 dnl Modified MPLS controller action.
548 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
551 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)'
553 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
554 ovs-appctl -t ovs-ofctl exit
556 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
557 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
558 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
560 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
561 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
563 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
564 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
567 dnl Modified MPLS controller action.
568 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
571 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)'
573 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
574 ovs-appctl -t ovs-ofctl exit
576 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
577 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
578 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
580 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
581 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
583 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
584 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
587 dnl Modified MPLS controller action.
588 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
590 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)
593 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)'
596 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
597 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
598 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
599 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
601 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
602 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
604 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
605 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
608 dnl Modified MPLS controller action.
609 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
612 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))'
614 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
615 ovs-appctl -t ovs-ofctl exit
617 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
618 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
619 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
621 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
622 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
624 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
625 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
628 dnl Modified MPLS controller action.
629 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
632 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)'
634 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
635 ovs-appctl -t ovs-ofctl exit
637 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
638 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
639 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
641 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
642 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
644 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
645 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
648 dnl Modified MPLS controller action.
649 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
652 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)'
654 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
655 ovs-appctl -t ovs-ofctl exit
657 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
658 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
659 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
661 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
662 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
664 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
665 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
668 dnl Modified MPLS controller action.
669 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
672 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)'
674 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
675 ovs-appctl -t ovs-ofctl exit
677 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
678 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
679 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
681 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
682 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
684 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
685 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
688 dnl Modified MPLS controller action.
689 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
692 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)'
694 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
695 ovs-appctl -t ovs-ofctl exit
697 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
698 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
699 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
701 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
702 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
704 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
705 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
708 dnl Modified MPLS actions.
709 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
712 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)'
714 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
715 ovs-appctl -t ovs-ofctl exit
717 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
718 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
719 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
721 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
722 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
724 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
725 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
728 dnl Modified MPLS ipv6 controller action.
729 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
732 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)'
734 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
735 ovs-appctl -t ovs-ofctl exit
737 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
738 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
739 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
741 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
742 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
744 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
745 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
749 dnl Modified MPLS pop action.
750 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
751 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)
752 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
754 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
757 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'
760 # 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)'
762 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
763 ovs-appctl -t ovs-ofctl exit
765 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
766 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
767 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
769 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
770 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
772 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
773 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
777 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
780 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)'
782 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
783 ovs-appctl -t ovs-ofctl exit
785 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
786 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
787 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
789 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
790 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
792 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)
793 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
795 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)
796 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
798 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)
799 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
801 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)
802 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
804 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)
805 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
807 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)
808 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
810 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)
811 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
815 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
818 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'
820 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
821 ovs-appctl -t ovs-ofctl exit
823 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
824 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
825 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
827 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
828 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
830 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)
831 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
833 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)
834 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
836 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)
837 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
839 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)
840 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
842 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)
843 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
845 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)
846 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
848 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)
849 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
852 dnl Modified ARP controller action.
853 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
856 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)'
859 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
860 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
861 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
862 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
863 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
864 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
865 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
866 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
867 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
868 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
869 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
870 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
871 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
872 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
873 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
874 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
875 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
876 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
877 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
878 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
879 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
882 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
885 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
888 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'
891 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
892 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
893 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
894 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
895 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
897 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
898 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
900 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)
901 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
903 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)
904 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
906 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)
907 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
909 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)
910 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
912 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)
913 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
915 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)
916 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
918 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)
919 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
922 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
923 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
924 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
925 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)
926 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)
927 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)
928 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)
929 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)
930 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
931 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
932 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
933 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
934 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
935 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
936 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
937 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
938 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
939 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
940 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
941 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
942 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
943 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
944 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
945 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
952 AT_SETUP([ofproto-dpif - ARP modification slow-path])
954 ADD_OF_PORTS([br0], [1], [2])
956 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
957 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'
959 # Input some packets that should follow the arp modification slow-path.
961 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)'
963 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
965 # Check the packets that were output.
966 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
967 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
968 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
969 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
970 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
971 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
972 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
973 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
974 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
975 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 AT_SETUP([ofproto-dpif - VLAN handling])
983 [set Bridge br0 fail-mode=standalone -- \
984 add-port br0 p1 trunks=10,12 -- \
985 add-port br0 p2 tag=10 -- \
986 add-port br0 p3 tag=12 \
987 other-config:priority-tags=true -- \
988 add-port br0 p4 tag=12 -- \
989 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
990 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
991 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
992 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
993 other-config:priority-tags=true -- \
994 set Interface p1 type=dummy -- \
995 set Interface p2 type=dummy -- \
996 set Interface p3 type=dummy -- \
997 set Interface p4 type=dummy -- \
998 set Interface p5 type=dummy -- \
999 set Interface p6 type=dummy -- \
1000 set Interface p7 type=dummy -- \
1001 set Interface p8 type=dummy --])
1003 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1004 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1010 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1011 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1014 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1015 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1019 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1020 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1023 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1024 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1025 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1026 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1027 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1034 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1035 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1036 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1043 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1044 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1045 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1052 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1053 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1054 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1055 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1056 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1059 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1060 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1061 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1062 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1063 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1064 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1065 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1068 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1069 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1070 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1071 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1072 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1073 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1074 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1077 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1078 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1079 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1080 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1081 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1082 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1083 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1086 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1087 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1095 if test $vlan = none; then
1096 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1098 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))"
1101 echo "----------------------------------------------------------------------"
1102 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1104 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1105 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1107 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1109 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1115 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1116 OVS_VSWITCHD_START([dnl
1117 add-port br0 p1 -- set Interface p1 type=dummy
1119 ON_EXIT([kill `cat ovs-ofctl.pid`])
1121 AT_CAPTURE_FILE([ofctl_monitor.log])
1122 AT_DATA([flows.txt], [dnl
1123 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
1124 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
1125 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
1126 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
1127 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
1128 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
1129 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
1130 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
1131 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
1132 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
1134 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1136 dnl Modified MPLS controller action.
1137 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1138 dnl both of these in the final flow
1139 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1142 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)'
1144 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1146 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1147 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1148 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
1149 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1150 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1151 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1152 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1153 00000040 00 00 00 00
1155 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1156 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
1157 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1158 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1159 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1160 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1161 00000040 00 00 00 00
1163 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1164 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
1165 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1166 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1167 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1168 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1169 00000040 00 00 00 00
1172 dnl Modified MPLS controller action.
1173 dnl In this test, the input packet in vlan-tagged, which should be stripped
1174 dnl before we push the MPLS and VLAN tags.
1175 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1178 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))'
1180 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1181 ovs-appctl -t ovs-ofctl exit
1183 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1184 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1185 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
1186 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1187 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1188 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1189 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1191 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1192 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
1193 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1194 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1195 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1196 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1198 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1199 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
1200 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1201 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1202 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1203 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1206 dnl Modified MPLS controller action.
1207 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1208 dnl both of these in the final flow
1209 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1212 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)'
1214 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1216 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1217 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1218 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
1219 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1220 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1221 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1222 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1223 00000040 00 00 00 00
1225 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1226 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
1227 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1228 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1229 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1230 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1231 00000040 00 00 00 00
1233 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1234 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
1235 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
1236 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1237 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1238 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1239 00000040 00 00 00 00
1242 dnl Modified MPLS controller action.
1243 dnl In this test, the input packet in vlan-tagged, which should be stripped
1244 dnl before we push the MPLS and VLAN tags.
1245 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1248 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))'
1250 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1251 ovs-appctl -t ovs-ofctl exit
1253 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1254 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1255 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
1256 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1257 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1258 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1259 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1261 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1262 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
1263 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1264 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1265 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1266 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1268 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1269 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
1270 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
1271 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1272 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1273 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1276 dnl Modified MPLS controller action.
1277 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1278 dnl actions are reordered, so we see both of these in the final flow.
1279 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1282 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)'
1284 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1285 ovs-appctl -t ovs-ofctl exit
1287 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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:54,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 54 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
1296 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1297 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
1298 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1299 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1300 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1301 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1302 00000040 00 00 00 00
1304 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1305 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
1306 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
1307 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1308 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1309 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1310 00000040 00 00 00 00
1313 dnl Modified MPLS controller action.
1314 dnl In this test, the input packet in vlan-tagged, which should be stripped
1315 dnl before we push the MPLS and VLAN tags.
1316 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1319 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))'
1321 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1322 ovs-appctl -t ovs-ofctl exit
1324 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1325 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1326 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
1327 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1328 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1329 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1330 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1332 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1333 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
1334 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1335 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1336 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1337 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1339 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1340 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
1341 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
1342 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1343 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1344 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1347 dnl Modified MPLS controller action.
1348 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
1349 dnl actions are reordered, so we see both of these in the final flow.
1350 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1353 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)'
1355 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1356 ovs-appctl -t ovs-ofctl exit
1358 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1359 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1360 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
1361 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1362 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1363 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1364 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1365 00000040 00 00 00 00
1367 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1368 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
1369 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1370 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1371 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1372 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1373 00000040 00 00 00 00
1375 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1376 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
1377 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
1378 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1379 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1380 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1381 00000040 00 00 00 00
1384 dnl Modified MPLS controller action.
1385 dnl In this test, the input packet in vlan-tagged, which should be stripped
1386 dnl before we push the MPLS and VLAN tags.
1387 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1390 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))'
1392 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1393 ovs-appctl -t ovs-ofctl exit
1395 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1396 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1397 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
1398 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1399 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1400 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1401 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1403 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1404 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
1405 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1406 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1407 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1408 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1410 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1411 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
1412 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
1413 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1414 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1415 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1418 dnl Modified MPLS controller action.
1419 dnl In this test, the input packet in vlan-tagged, which should be stripped
1420 dnl before we push the MPLS and VLAN tags.
1421 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1424 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))'
1426 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1427 ovs-appctl -t ovs-ofctl exit
1429 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1430 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1431 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
1432 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
1433 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1434 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1435 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1437 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1438 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
1439 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
1440 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1441 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1442 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1444 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1445 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
1446 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
1447 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1448 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1449 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1452 dnl Modified MPLS controller action.
1453 dnl In this test, the input packet in vlan-tagged, which should be modified
1454 dnl before we push MPLS and VLAN tags.
1455 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1458 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))'
1460 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1461 ovs-appctl -t ovs-ofctl exit
1463 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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:59,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 59 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
1471 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1472 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
1473 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
1474 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1475 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1476 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1478 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1479 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
1480 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
1481 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1482 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1483 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1486 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1487 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1488 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
1489 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
1490 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
1491 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
1492 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
1493 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
1494 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
1495 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
1496 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
1497 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
1498 OFPST_FLOW reply (OF1.2):
1504 AT_SETUP([ofproto-dpif - fragment handling])
1506 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1507 AT_DATA([flows.txt], [dnl
1508 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1509 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1510 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1511 priority=50 tcp ip_frag=no actions=output:4
1512 priority=50 tcp ip_frag=first actions=output:5
1513 priority=50 tcp ip_frag=later actions=output:6
1515 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1517 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"
1518 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1519 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1520 later_flow="$base_flow,frag=later)"
1522 # mode no first later
1525 'drop 1 drop drop' \
1534 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1535 for type in no first later; do
1536 eval flow=\$${type}_flow exp_output=\$$type
1537 printf "\n%s\n" "----$mode $type-----"
1538 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1540 if test $mode = drop && test $type != no; then
1541 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1543 echo "Datapath actions: $exp_output" >> expout
1544 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1550 AT_SETUP([ofproto-dpif - exit])
1552 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1553 AT_DATA([flows.txt], [dnl
1554 in_port=1 actions=output:10,exit,output:11
1555 in_port=2 actions=output:12,resubmit:1,output:12
1556 in_port=3 actions=output:13,resubmit:2,output:14
1558 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1559 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])
1560 AT_CHECK([tail -1 stdout], [0],
1561 [Datapath actions: 10
1563 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])
1564 AT_CHECK([tail -1 stdout], [0],
1565 [Datapath actions: 12,10
1567 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])
1568 AT_CHECK([tail -1 stdout], [0],
1569 [Datapath actions: 13,12,10
1575 AT_SETUP([ofproto-dpif - mirroring, select_all])
1577 ADD_OF_PORTS([br0], 1, 2, 3)
1579 set Bridge br0 mirrors=@m --\
1580 --id=@p3 get Port p3 --\
1581 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1583 AT_DATA([flows.txt], [dnl
1584 in_port=1 actions=output:2
1585 in_port=2 actions=output:1
1587 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1589 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)"
1590 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1591 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1592 [Datapath actions: 2,3
1595 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)"
1596 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1597 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1598 [Datapath actions: 1,3
1605 AT_SETUP([ofproto-dpif - mirroring, select_src])
1607 ADD_OF_PORTS([br0], 1, 2, 3)
1609 set Bridge br0 mirrors=@m --\
1610 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1611 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1613 AT_DATA([flows.txt], [dnl
1614 in_port=1 actions=output:2
1615 in_port=2 actions=output:1
1617 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1619 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)"
1620 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1621 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1622 [Datapath actions: 2,3
1625 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)"
1626 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1627 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1628 [Datapath actions: 1
1633 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1635 ADD_OF_PORTS([br0], 1, 2)
1637 set Bridge br0 mirrors=@m --\
1638 --id=@p2 get Port p2 --\
1639 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1641 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1643 # "in_port" defaults to OFPP_NONE if it's not specified.
1644 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"
1645 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1646 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1647 [Datapath actions: 1,2
1654 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1656 ADD_OF_PORTS([br0], 1, 2, 3)
1658 set Bridge br0 mirrors=@m --\
1659 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1660 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1662 AT_DATA([flows.txt], [dnl
1663 in_port=1 actions=output:2
1664 in_port=2 actions=output:1
1666 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1668 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)"
1669 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1670 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1671 [Datapath actions: 2,3
1674 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)"
1675 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1676 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1677 [Datapath actions: 1
1684 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1686 ADD_OF_PORTS([br0], 1, 2, 3)
1688 set Bridge br0 mirrors=@m --\
1689 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1690 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1692 AT_DATA([flows.txt], [dnl
1693 in_port=1, actions=output:2
1695 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1697 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)"
1698 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1699 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1700 [Datapath actions: 2
1703 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))"
1704 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1705 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1706 [Datapath actions: 2
1709 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))"
1710 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1711 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1712 [Datapath actions: 2,3
1719 AT_SETUP([ofproto-dpif - mirroring, output_port])
1721 ADD_OF_PORTS([br0], 1, 2, 3)
1723 set Bridge br0 mirrors=@m --\
1724 --id=@p3 get Port p3 --\
1725 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1727 AT_DATA([flows.txt], [dnl
1728 in_port=1 actions=mod_vlan_vid:17,output:2
1729 in_port=2 actions=output:1
1731 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1733 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)"
1734 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1735 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1736 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1739 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)"
1740 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1741 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1742 [Datapath actions: 1,3
1748 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1750 ADD_OF_PORTS([br0], 1, 2)
1752 set Bridge br0 mirrors=@m --\
1753 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1755 AT_DATA([flows.txt], [dnl
1756 in_port=1 actions=output:2
1757 in_port=2 actions=mod_vlan_vid:17,output:1
1759 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1761 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)"
1762 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1763 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1765 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1766 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1768 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1770 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)"
1771 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1772 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1774 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1775 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1777 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1782 # Two testcases below are for the ofproto/trace command
1783 # The first one tests all correct syntax:
1784 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1785 # ofproto/trace br_name br_flow [-generate|packet]
1786 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1787 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1788 ADD_OF_PORTS([br0], 1, 2, 3)
1790 AT_DATA([flows.txt], [dnl
1791 in_port=1 actions=output:2
1792 in_port=2 actions=output:1
1794 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1796 odp_flow="in_port(p1)"
1798 # Test command: ofproto/trace odp_flow with in_port as a name.
1799 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1800 AT_CHECK([tail -1 stdout], [0], [dnl
1804 odp_flow="in_port(1)"
1805 # Test command: ofproto/trace odp_flow
1806 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1807 AT_CHECK([tail -1 stdout], [0], [dnl
1811 # Test command: ofproto/trace dp_name odp_flow
1812 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1813 AT_CHECK([tail -1 stdout], [0], [dnl
1816 # Test commmand: ofproto/trace br_name br_flow
1817 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1818 AT_CHECK([tail -1 stdout], [0], [dnl
1822 # Delete the inserted flows
1823 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1824 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1826 # This section beflow tests the [-generate] option
1827 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1828 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"
1830 # Test command: ofproto/trace odp_flow
1831 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1832 # Check for no MAC learning entry
1833 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1837 # Test command: ofproto/trace br_name br_flow
1838 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1839 # Check for no MAC learning entry
1840 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1844 # Test command: ofproto/trace odp_flow -generate
1845 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1846 # Check for the MAC learning entry
1847 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1849 3 0 50:54:00:00:00:05 ?
1852 # Test command: ofproto/trace dp_name odp_flow -generate
1853 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1854 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1855 -generate], [0], [stdout])
1856 # Check for both MAC learning entries
1857 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1859 3 0 50:54:00:00:00:05 ?
1860 1 0 50:54:00:00:00:06 ?
1863 # Test command: ofproto/trace br_name br_flow -generate
1864 AT_CHECK([ovs-appctl ofproto/trace br0 \
1865 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1866 -generate], [0], [stdout])
1867 # Check for both MAC learning entries.
1868 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1870 3 0 50:54:00:00:00:05 ?
1871 1 0 50:54:00:00:00:06 ?
1872 2 0 50:54:00:00:00:07 ?
1875 # This section beflow tests the [packet] option
1876 # The ovs-tcpundump of packets between port1 and port2
1877 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1878 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1880 # Construct the MAC learning table
1881 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1882 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1883 -generate], [0], [stdout])
1885 # Construct the MAC learning table
1886 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1887 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1888 -generate], [0], [stdout])
1890 # Test command: ofproto/trace odp_flow packet
1891 AT_CHECK([ovs-appctl ofproto/trace \
1892 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1893 AT_CHECK([tail -1 stdout], [0], [dnl
1896 AT_CHECK([head -n 2 stdout], [0], [dnl
1898 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
1901 # Test command: ofproto/trace dp_name odp_flow packet
1902 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1903 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1904 AT_CHECK([tail -1 stdout], [0], [dnl
1907 AT_CHECK([head -n 2 stdout], [0], [dnl
1909 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
1912 # Test command: ofproto/trace br_name br_flow packet
1913 AT_CHECK([ovs-appctl ofproto/trace br0 \
1914 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1915 AT_CHECK([tail -1 stdout], [0], [dnl
1918 AT_CHECK([head -n 2 stdout], [0], [dnl
1920 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
1926 # The second test tests the corner cases
1927 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1929 ADD_OF_PORTS([br0], 1, 2)
1932 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1933 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1935 generate="-generate"
1936 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1938 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1944 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1946 AT_CHECK([tail -2 stderr], [0], [dnl
1947 Cannot find the datapath
1948 ovs-appctl: ovs-vswitchd: server returned an error
1951 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1957 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1959 AT_CHECK([tail -2 stderr], [0], [dnl
1960 Cannot find the datapath
1961 ovs-appctl: ovs-vswitchd: server returned an error
1964 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1970 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1972 AT_CHECK([tail -2 stderr], [0], [dnl
1973 Cannot find the datapath
1974 ovs-appctl: ovs-vswitchd: server returned an error
1977 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1983 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1985 AT_CHECK([tail -2 stderr], [0], [dnl
1986 Cannot find the datapath
1987 ovs-appctl: ovs-vswitchd: server returned an error
1990 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1996 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1998 AT_CHECK([tail -2 stderr], [0], [dnl
2000 ovs-appctl: ovs-vswitchd: server returned an error
2003 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2009 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2011 AT_CHECK([tail -2 stderr], [0], [dnl
2012 Must specify bridge name
2013 ovs-appctl: ovs-vswitchd: server returned an error
2016 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2017 AT_CHECK([ovs-appctl ofproto/trace \
2018 ovs-dummy "$odp_flow" garbage_option],
2019 [2], [stdout],[stderr])
2020 AT_CHECK([tail -2 stderr], [0], [dnl
2021 Trailing garbage in packet data
2022 ovs-appctl: ovs-vswitchd: server returned an error
2025 # Test incorrect command: ofproto/trace with 4 arguments
2026 AT_CHECK([ovs-appctl ofproto/trace \
2027 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2028 AT_CHECK([tail -2 stderr], [0], [dnl
2029 "ofproto/trace" command takes at most 3 arguments
2030 ovs-appctl: ovs-vswitchd: server returned an error
2033 # Test incorrect command: ofproto/trace with 0 argument
2034 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2035 AT_CHECK([tail -2 stderr], [0], [dnl
2036 "ofproto/trace" command requires at least 1 arguments
2037 ovs-appctl: ovs-vswitchd: server returned an error
2043 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2045 ADD_OF_PORTS([br0], 1, 2, 3)
2047 AT_DATA([flows.txt], [dnl
2048 in_port=1 actions=output:2
2049 in_port=2 actions=output:1
2051 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2053 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2054 AT_CHECK([tail -1 stdout], [0], [dnl
2055 Datapath actions: push_vlan(vid=123,pcp=0),2
2062 m4_define([OFPROTO_TRACE],
2064 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2065 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2067 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2070 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2073 AT_SETUP([ofproto-dpif - MAC learning])
2074 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2075 ADD_OF_PORTS([br0], 1, 2, 3)
2077 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)'
2079 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2082 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2086 # Check for the MAC learning entry.
2087 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2089 3 0 50:54:00:00:00:05 ?
2092 # Trace a packet arrival destined for the learned MAC.
2093 # (This will also learn a MAC.)
2096 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2100 # Check for both MAC learning entries.
2101 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2103 3 0 50:54:00:00:00:05 ?
2104 1 0 50:54:00:00:00:06 ?
2107 # Trace a packet arrival that updates the first learned MAC entry.
2110 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2114 # Check that the MAC learning entry was updated.
2115 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2117 1 0 50:54:00:00:00:06 ?
2118 2 0 50:54:00:00:00:05 ?
2121 # Add another bridge.
2125 -- set bridge br1 datapath-type=dummy])
2126 ADD_OF_PORTS([br1], 4, 5)
2128 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2131 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2136 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2140 # Check that the MAC learning entries were added.
2141 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2143 4 0 50:54:00:00:00:06 ?
2144 5 0 50:54:00:00:00:07 ?
2147 # Delete port p1 and see that its MAC learning entry disappeared, and
2148 # that the MAC learning entry for the same MAC was also deleted from br1.
2149 AT_CHECK([ovs-vsctl del-port p1])
2150 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2152 2 0 50:54:00:00:00:05 ?
2154 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2156 5 0 50:54:00:00:00:07 ?
2162 AT_SETUP([ofproto-dpif - MAC table overflow])
2164 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2165 ADD_OF_PORTS([br0], 1, 2, 3)
2167 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)'
2169 AT_CHECK([ovs-appctl time/stop])
2171 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2172 for i in 0 1 2 3 4 5 6 7 8 9; do
2175 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2178 ovs-appctl time/warp 1000
2181 # Check for the MAC learning entries.
2182 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2184 3 0 50:54:00:00:00:00
2185 3 0 50:54:00:00:00:01
2186 3 0 50:54:00:00:00:02
2187 3 0 50:54:00:00:00:03
2188 3 0 50:54:00:00:00:04
2189 3 0 50:54:00:00:00:05
2190 3 0 50:54:00:00:00:06
2191 3 0 50:54:00:00:00:07
2192 3 0 50:54:00:00:00:08
2193 3 0 50:54:00:00:00:09
2197 # Trace another ARP packet on another MAC.
2200 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2204 # Check that the new one chased the oldest one out of the table.
2205 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2207 3 0 50:54:00:00:00:01 ?
2208 3 0 50:54:00:00:00:02 ?
2209 3 0 50:54:00:00:00:03 ?
2210 3 0 50:54:00:00:00:04 ?
2211 3 0 50:54:00:00:00:05 ?
2212 3 0 50:54:00:00:00:06 ?
2213 3 0 50:54:00:00:00:07 ?
2214 3 0 50:54:00:00:00:08 ?
2215 3 0 50:54:00:00:00:09 ?
2216 3 0 50:54:00:00:00:10 ?
2222 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
2224 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
2226 # IP_VERSION_TYPE is used in AT_SETUP
2227 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
2228 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
2229 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2231 ON_EXIT([kill `cat test-sflow.pid`])
2232 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
2233 AT_CAPTURE_FILE([sflow.log])
2234 SFLOW_PORT=`parse_listening_port < test-sflow.log`
2235 ovs-appctl time/stop
2237 ADD_OF_PORTS([br0], 1, 2)
2239 set Interface br0 options:ifindex=1002 -- \
2240 set Interface p1 options:ifindex=1004 -- \
2241 set Interface p2 options:ifindex=1003 -- \
2242 set Bridge br0 sflow=@sf -- \
2243 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
2244 header=128 sampling=1 polling=1 agent=lo
2246 dnl open with ARP packets to seed the bridge-learning. The output
2247 dnl ifIndex numbers should be reported predictably after that.
2248 dnl Since we set sampling=1 we should see all of these packets
2249 dnl reported. Sorting the output by data-source and seqNo makes
2250 dnl it deterministic. Ensuring that we send at least two packets
2251 dnl into each port means we get to check the seq nos are
2252 dnl incrementing correctly.
2253 dnl because packets from different ports can be handled by separate
2254 dnl threads, put some sleeps
2256 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)'
2258 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)'
2260 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)'
2262 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)'
2263 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)'
2265 dnl sleep long enough to get more than one counter sample
2266 dnl from each datasource so we can check sequence numbers
2267 for i in `seq 1 30`; do
2268 ovs-appctl time/warp 100
2271 ovs-appctl -t test-sflow exit
2273 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
2294 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
2314 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
2334 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
2354 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
2374 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
2377 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
2391 in_broadcasts=4294967295
2394 in_unknownprotos=4294967295
2397 out_multicasts=4294967295
2398 out_broadcasts=4294967295
2414 in_broadcasts=4294967295
2417 in_unknownprotos=4294967295
2420 out_multicasts=4294967295
2421 out_broadcasts=4294967295
2437 in_broadcasts=4294967295
2440 in_unknownprotos=4294967295
2443 out_multicasts=4294967295
2444 out_broadcasts=4294967295
2460 in_broadcasts=4294967295
2463 in_unknownprotos=4294967295
2466 out_multicasts=4294967295
2467 out_broadcasts=4294967295
2483 in_broadcasts=4294967295
2486 in_unknownprotos=4294967295
2489 out_multicasts=4294967295
2490 out_broadcasts=4294967295
2506 in_broadcasts=4294967295
2509 in_unknownprotos=4294967295
2512 out_multicasts=4294967295
2513 out_broadcasts=4294967295
2520 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
2521 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
2523 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2525 # Test that basic NetFlow reports flow statistics correctly:
2526 # The initial packet of a flow are correctly accounted.
2527 # Later packets within a flow are correctly accounted.
2528 # Flow actions changing (in this case, due to MAC learning)
2529 # cause a record to be sent.
2531 # IP_VERSION_TYPE is used in AT_SETUP
2532 m4_define([CHECK_NETFLOW_EXPIRATION],
2533 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
2534 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2535 ADD_OF_PORTS([br0], 1, 2)
2537 ovs-appctl time/stop
2538 ON_EXIT([kill `cat test-netflow.pid`])
2539 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2540 AT_CAPTURE_FILE([netflow.log])
2541 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2544 set Bridge br0 netflow=@nf -- \
2545 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2546 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2548 for delay in 1000 30000; do
2549 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)'
2550 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)'
2552 ovs-appctl time/warp $delay
2555 ovs-appctl time/warp 6000
2558 ovs-appctl -t test-netflow exit
2560 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])
2562 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])
2564 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
2565 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
2566 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
2570 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
2571 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
2573 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2575 # Test that basic NetFlow reports active expirations correctly.
2577 # IP_VERSION_TYPE is used in AT_SETUP
2578 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
2579 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
2581 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2582 ADD_OF_PORTS([br0], 1, 2)
2584 ON_EXIT([kill `cat test-netflow.pid`])
2585 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2586 AT_CAPTURE_FILE([netflow.log])
2587 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2590 set Bridge br0 netflow=@nf -- \
2591 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2592 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2594 AT_CHECK([ovs-appctl time/stop])
2596 while test $n -le 60; do
2599 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)'
2600 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)'
2602 ovs-appctl time/warp 1000
2605 ovs-appctl time/warp 10000
2609 ovs-appctl -t test-netflow exit
2611 # Count the number of reported packets:
2612 # - From source to destination before MAC learning kicks in (just one).
2613 # - From source to destination after that.
2614 # - From destination to source.
2622 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2629 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2632 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2635 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2642 eval $counter=\`expr \$$counter + \$pkts\`
2643 n_recs=`expr $n_recs + 1`
2646 # There should be exactly 1 MAC learning packet,
2647 # exactly 59 other packets in that direction,
2648 # and exactly 60 packets in the other direction.
2649 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2654 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
2655 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
2657 AT_SETUP([idle_age and hard_age increase over time])
2660 # get_ages DURATION HARD IDLE
2662 # Fetch the flow duration, hard age, and idle age into the variables
2663 # whose names are given as arguments. Rounds DURATION down to the
2664 # nearest integer. If hard_age doesn't appear in the output, sets
2665 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2668 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2670 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2671 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2672 AS_VAR_COPY([$1], [duration])
2674 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2675 if test X"$hard" = X; then
2678 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2680 AS_VAR_COPY([$2], [hard])
2682 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2683 if test X"$idle" = X; then
2686 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2688 AS_VAR_COPY([$3], [idle])
2691 # Add a flow and get its initial hard and idle age.
2692 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2693 get_ages duration1 hard1 idle1
2695 ovs-appctl time/stop
2696 # Warp time forward by 10 seconds, then modify the flow's actions.
2697 ovs-appctl time/warp 10000
2698 get_ages duration2 hard2 idle2
2699 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2701 # Warp time forward by 10 seconds.
2702 ovs-appctl time/warp 10000
2703 get_ages duration3 hard3 idle3
2705 # Warp time forward 10 more seconds, then pass some packets through the flow,
2706 # then warp forward a few more times because idle times are only updated
2708 ovs-appctl time/warp 10000
2709 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)'
2710 ovs-appctl time/warp 1000
2711 ovs-appctl time/warp 1000
2712 ovs-appctl time/warp 1000
2713 get_ages duration4 hard4 idle4
2715 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2716 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2717 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2719 # Duration should increase steadily over time.
2720 AT_CHECK([test $duration1 -lt $duration2])
2721 AT_CHECK([test $duration2 -lt $duration3])
2722 AT_CHECK([test $duration3 -lt $duration4])
2724 # Hard age should be "none" initially because it's the same as flow_duration,
2725 # then it should increase.
2726 AT_CHECK([test $hard1 = none])
2727 AT_CHECK([test $hard2 = none])
2728 AT_CHECK([test $hard3 != none])
2729 AT_CHECK([test $hard4 != none])
2730 AT_CHECK([test $hard3 -lt $hard4])
2732 # Idle age should increase from 1 to 2 to 3, then decrease.
2733 AT_CHECK([test $idle1 -lt $idle2])
2734 AT_CHECK([test $idle2 -lt $idle3])
2735 AT_CHECK([test $idle3 -gt $idle4])
2737 # Check some invariant relationships.
2738 AT_CHECK([test $duration1 = $idle1])
2739 AT_CHECK([test $duration2 = $idle2])
2740 AT_CHECK([test $duration3 = $idle3])
2741 AT_CHECK([test $idle3 -gt $hard3])
2742 AT_CHECK([test $idle4 -lt $hard4])
2743 AT_CHECK([test $hard4 -lt $duration4])
2748 AT_SETUP([ofproto-dpif - fin_timeout])
2750 AT_DATA([flows.txt], [dnl
2751 in_port=1 actions=output:2
2752 in_port=2 actions=mod_vlan_vid:17,output:1
2754 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2755 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2757 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2760 ovs-appctl time/stop
2761 # Check that a TCP SYN packet does not change the timeout. (Because
2762 # flow stats updates are mainly what implements the fin_timeout
2763 # feature, we warp forward a couple of times to ensure that flow stats
2764 # run before re-checking the flow table.)
2765 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2766 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2769 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2771 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2773 # Check that a TCP FIN packet does change the timeout.
2774 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2775 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2778 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2780 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2785 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2786 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2787 ADD_OF_PORTS([br0], [1], [2])
2788 ADD_OF_PORTS([br1], [3])
2790 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2797 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2798 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2799 ADD_OF_PORTS([br0], [1], [2])
2800 ADD_OF_PORTS([br1], [3])
2802 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2803 dummy@ovs-dummy: hit:0 missed:0
2805 br0 65534/100: (dummy)
2809 br1 65534/101: (dummy)
2815 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2816 OVS_VSWITCHD_START([add-br br1 -- \
2817 set bridge br1 datapath-type=dummy fail-mode=secure])
2818 ADD_OF_PORTS([br0], [1], [2])
2819 ADD_OF_PORTS([br1], [3])
2821 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)'])
2822 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)'])
2823 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)'])
2825 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2826 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))
2827 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))
2830 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2831 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))
2834 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
2835 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))
2836 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))
2839 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
2840 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))
2846 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
2847 OVS_VSWITCHD_START([dnl
2848 add-port br0 p1 -- set Interface p1 type=dummy
2850 ON_EXIT([kill `cat ovs-ofctl.pid`])
2852 AT_CAPTURE_FILE([ofctl_monitor.log])
2853 AT_DATA([flows.txt], [dnl
2854 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2855 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2857 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2859 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
2860 dnl a packet with 4 MPLS LSEs but userspace and the datapath can only handle up
2863 dnl The input is a frame with four MPLS labels which tcpdump -vve shows as:
2864 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)
2865 dnl (label 20, exp 0, ttl 32)
2866 dnl (label 20, exp 0, ttl 32)
2867 dnl (label 20, exp 0, [S], ttl 32)
2868 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2869 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2871 for dl_src in 00 01; do
2872 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014020 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"])
2874 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
2875 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/0x100,lse1=0x14020/0x100,lse2=0x14020/0x100), packets:0, bytes:0, used:never, actions:drop
2883 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
2884 OVS_VSWITCHD_START([dnl
2885 add-port br0 p1 -- set Interface p1 type=dummy
2887 ON_EXIT([kill `cat ovs-ofctl.pid`])
2889 AT_CAPTURE_FILE([ofctl_monitor.log])
2890 AT_DATA([flows.txt], [dnl
2891 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2892 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2894 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2896 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
2897 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
2898 dnl can't determine the resulting MPLS label after an MPLS PUSH action.
2900 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
2901 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)
2902 dnl (label 20, exp 0, ttl 32)
2903 dnl (label 20, exp 0, ttl 32)
2904 dnl (label 20, exp 0, [S], ttl 32)
2905 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2906 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2907 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 01 88 47 00 01 40 20 00 01 40 20 00 01 40 20 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'])
2909 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2910 skb_priority(0),in_port(1),eth(src=60:66:66:66:66:01/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/0x100,lse1=0x14020/0x100,lse2=0x14020/0x100), packets:0, bytes:0, used:never, actions:drop
2916 AT_SETUP([ofproto-dpif - patch ports])
2917 OVS_VSWITCHD_START([add-br br1 \
2918 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2919 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2920 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2922 ADD_OF_PORTS([br0], [2])
2923 ADD_OF_PORTS([br1], [3])
2925 AT_CHECK([ovs-appctl time/stop])
2927 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2928 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2930 for i in $(seq 1 10); do
2931 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)'
2934 for i in $(seq 1 5); do
2935 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)'
2938 AT_CHECK([ovs-appctl time/warp 500], [0],
2942 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2943 dummy@ovs-dummy: hit:13 missed:2
2945 br0 65534/100: (dummy)
2947 pbr0 1/none: (patch: peer=pbr1)
2949 br1 65534/101: (dummy)
2951 pbr1 1/none: (patch: peer=pbr0)
2954 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2955 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
2957 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2958 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
2961 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2962 OFPST_PORT reply (xid=0x4): 1 ports
2963 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2964 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2967 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2968 OFPST_PORT reply (xid=0x4): 1 ports
2969 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2970 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2976 AT_SETUP([ofproto-dpif - port duration])
2977 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2978 ADD_OF_PORTS([br0], 1, 2)
2980 ovs-appctl time/stop
2981 ovs-appctl time/warp 10000
2983 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2984 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
2993 dnl ----------------------------------------------------------------------
2994 AT_BANNER([ofproto-dpif -- megaflows])
2996 AT_SETUP([ofproto-dpif megaflow - port classification])
2998 ADD_OF_PORTS([br0], [1], [2])
2999 AT_DATA([flows.txt], [dnl
3000 table=0 in_port=1 actions=output(2)
3002 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3003 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)'])
3004 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)'])
3006 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3007 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>
3012 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3014 ADD_OF_PORTS([br0], [1], [2])
3015 AT_DATA([flows.txt], [dnl
3016 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3018 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3019 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)'])
3020 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)'])
3022 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3023 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>
3024 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>
3029 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3031 ADD_OF_PORTS([br0], [1], [2])
3032 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], [])
3033 AT_DATA([flows.txt], [dnl
3034 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3036 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3037 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)'])
3038 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)'])
3040 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3041 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>
3042 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>
3047 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3049 ADD_OF_PORTS([br0], [1], [2])
3050 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], [])
3051 AT_DATA([flows.txt], [dnl
3052 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3054 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3055 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)'])
3056 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)'])
3058 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3059 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>
3060 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>
3065 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3067 ADD_OF_PORTS([br0], [1], [2])
3068 AT_DATA([flows.txt], [dnl
3069 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3071 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3072 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)'])
3073 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)'])
3074 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3075 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>
3080 AT_SETUP([ofproto-dpif megaflow - normal])
3082 ADD_OF_PORTS([br0], [1], [2])
3083 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3084 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)'])
3085 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)'])
3087 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3088 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>
3089 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>
3094 AT_SETUP([ofproto-dpif megaflow - mpls])
3096 ADD_OF_PORTS([br0], [1], [2])
3097 AT_DATA([flows.txt], [dnl
3098 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3099 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3101 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3102 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)'])
3103 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)'])
3105 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3106 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>
3107 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>
3112 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3114 # IP_VERSION_TYPE is used in AT_SETUP
3115 m4_define([CHECK_MEGAFLOW_NETFLOW],
3116 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3118 ADD_OF_PORTS([br0], [1], [2])
3120 dnl NetFlow configuration disables wildcarding relevant fields
3121 ON_EXIT([kill `cat test-netflow.pid`])
3122 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3123 AT_CAPTURE_FILE([netflow.log])
3124 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3126 set Bridge br0 netflow=@nf -- \
3127 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3128 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3130 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3131 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)'])
3132 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)'])
3134 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3135 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>
3136 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>
3141 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3142 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3144 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3146 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3147 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3148 set interface p2 type=dummy ofport_request=2 -- \
3149 set interface p3 type=dummy ofport_request=3])
3150 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3153 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3154 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)'])
3155 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)'])
3157 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3158 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>
3159 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>
3164 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
3166 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3167 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
3168 set interface p2 type=dummy ofport_request=2 -- \
3169 set interface p3 type=dummy ofport_request=3])
3170 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3173 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3174 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)'])
3175 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)'])
3177 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3178 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>
3179 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>
3184 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
3185 # Create bond0 on br0 with interfaces p0 and p1
3186 # and bond1 on br1 with interfaces p2 and p3
3187 # with p0 patched to p2 and p1 patched to p3.
3189 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
3190 other-config:lacp-time=fast \
3191 other-config:bond-rebalance-interval=0 -- \
3192 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
3193 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
3195 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
3196 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
3197 fail-mode=secure -- \
3198 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
3199 other-config:lacp-time=fast \
3200 other-config:bond-rebalance-interval=0 -- \
3201 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
3202 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
3204 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3206 ADD_OF_PORTS([br0], [7])
3207 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3208 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
3209 ovs-appctl time/stop
3210 ovs-appctl time/warp 5000
3211 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)'])
3212 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)'])
3214 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3215 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>
3216 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>
3221 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
3223 ADD_OF_PORTS([br0], [1], [2])
3224 AT_DATA([flows.txt], [dnl
3225 table=0 in_port=1,ip actions=resubmit(90)
3226 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
3228 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3229 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)'])
3230 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)'])
3232 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3233 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>
3234 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>
3239 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
3241 ADD_OF_PORTS([br0], [1], [2])
3242 AT_DATA([flows.txt], [dnl
3243 table=0 in_port=1,ip actions=resubmit(,1)
3244 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3246 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3247 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)'])
3248 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=
3249 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3251 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3252 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>
3253 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>
3258 AT_SETUP([ofproto-dpif megaflow - goto_table action])
3260 ADD_OF_PORTS([br0], [1], [2])
3261 AT_DATA([flows.txt], [dnl
3262 table=0 in_port=1,ip actions=goto_table(1)
3263 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
3265 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
3266 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)'])
3267 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)'])
3269 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3270 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>
3271 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>
3276 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
3278 ADD_OF_PORTS([br0], [1], [2], [3])
3280 set Bridge br0 mirrors=@m --\
3281 --id=@p3 get Port p3 --\
3282 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3284 AT_DATA([flows.txt], [dnl
3285 in_port=1 actions=output:2
3287 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3288 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)'])
3289 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)'])
3291 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3292 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>
3297 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
3299 ADD_OF_PORTS([br0], [1], [2], [3])
3301 set Bridge br0 mirrors=@m --\
3302 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3303 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3305 AT_DATA([flows.txt], [dnl
3306 in_port=1 actions=output:2
3308 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3309 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))'])
3310 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)'])
3312 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3313 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>
3314 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>
3319 AT_SETUP([ofproto-dpif megaflow - move action])
3321 ADD_OF_PORTS([br0], [1], [2])
3322 AT_DATA([flows.txt], [dnl
3323 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
3324 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
3325 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
3327 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3328 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)'])
3329 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)'])
3331 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3332 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>
3333 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>
3338 AT_SETUP([ofproto-dpif megaflow - push action])
3340 ADD_OF_PORTS([br0], [1], [2])
3341 AT_DATA([flows.txt], [dnl
3342 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
3344 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3345 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)'])
3346 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)'])
3348 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3349 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>
3350 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>
3355 AT_SETUP([ofproto-dpif megaflow - learning])
3357 ADD_OF_PORTS([br0], [1], [2])
3358 AT_DATA([flows.txt], [dnl
3359 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
3361 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3362 ovs-appctl time/stop
3363 # We send each packet twice because the first packet in each flow causes the
3364 # flow table to change and thus revalidations, which (depending on timing)
3365 # can keep a megaflow from being installed. The revalidations are done by
3366 # the second iteration, allowing the flows to be installed.
3368 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)'])
3369 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)'])
3370 ovs-appctl time/warp 100
3373 dnl The original flow is missing due to a revalidation.
3374 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3375 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>
3376 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>
3381 AT_SETUP([ofproto-dpif megaflow - tunnels])
3383 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
3384 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
3385 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
3386 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
3388 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
3389 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
3390 ofport_request=4 options:key=flow])
3391 AT_DATA([flows.txt], [dnl
3392 in_port=1,actions=output(2)
3393 in_port=3,actions=output(4)
3395 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3396 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
3397 dnl will cause the packet to be dropped.
3398 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)'])
3399 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)'])
3400 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)'])
3401 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)'])
3403 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3404 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>
3405 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>
3406 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>
3411 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
3413 ADD_OF_PORTS([br0], [1], [2])
3414 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], [])
3415 AT_DATA([flows.txt], [dnl
3416 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
3418 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3419 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)'])
3420 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)'])
3422 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3423 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>
3424 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>
3429 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
3431 ADD_OF_PORTS([br0], [1], [2])
3432 AT_DATA([flows.txt], [dnl
3433 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
3435 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3436 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)'])
3437 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)'])
3439 dnl The megaflows do not match the same fields, since the first packet
3440 dnl is essentially a no-op. (The new destination MAC is the same as the
3441 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
3442 dnl so that a packet that doesn't need its MAC address changed doesn't
3443 dnl hide one that does. Since the first entry doesn't need to change,
3444 dnl only the destination MAC address is matched (as decided by
3445 dnl ofproto-dpif). The second entry actually updates the destination
3446 dnl MAC, so both the source and destination MAC addresses are
3447 dnl un-wildcarded, since the ODP commit functions update both the source
3448 dnl and destination MAC addresses.
3449 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3450 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
3451 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
3456 AT_SETUP([ofproto-dpif megaflow - disabled])
3458 ADD_OF_PORTS([br0], [1], [2])
3459 AT_DATA([flows.txt], [dnl
3460 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
3461 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
3463 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
3465 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
3466 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3467 for i in 1 2 3 4; do
3468 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)'])
3469 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)'])
3472 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3473 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/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xff,ttl=64/0xff,frag=no/0xfc),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
3474 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/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xff,ttl=64/0xff,frag=no/0xfc),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
3479 AT_SETUP([ofproto-dpif - datapath port number change])
3480 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3481 ADD_OF_PORTS([br0], 1)
3483 # Trace a flow that should output to p1.
3484 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3486 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
3489 # Change p1's port number to 5.
3490 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
3492 # Trace a flow that should output to p1 in its new location.
3493 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3495 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
3500 # Tests the bundling with various bfd and cfm configurations.
3501 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
3502 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
3503 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
3504 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
3505 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
3506 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
3507 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
3508 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
3509 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
3510 set Interface p0 cfm_mpid=1 -- \
3511 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
3513 ovs-appctl time/stop
3514 # advance the clock to stablize everything.
3515 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3516 # cfm/show should show 'recv' fault.
3517 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3520 # bfd/show should show 'up'.
3521 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3522 Local Session State: up
3523 Remote Session State: up
3524 Local Session State: up
3525 Remote Session State: up
3527 # bond/show should show 'may-enable: true' for all slaves.
3528 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3535 # now disable the bfd on p1.
3536 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3537 # advance the clock to stablize everything.
3538 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3539 # cfm/show should show 'recv' fault.
3540 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3543 # bfd/show should show 'down'.
3544 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3545 Local Session State: down
3546 Remote Session State: down
3548 # bond/show should show 'may-enable: false' for p0.
3549 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3554 # now enable the bfd on p1 and disable bfd on p0.
3555 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3556 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3557 # advance the clock to stablize everything.
3558 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3559 # cfm/show should show 'recv' fault.
3560 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3563 # bfd/show should show 'down'.
3564 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3565 Local Session State: down
3566 Remote Session State: down
3568 # bond/show should show 'may-enable: false' for p0 and p1.
3569 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3579 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3580 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3583 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3585 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3586 monitor thread created
3588 # disable bfd on p0.
3589 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3591 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3592 monitor thread terminated
3594 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3597 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3599 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3600 monitor thread created
3602 # disable cfm on p0.
3603 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3605 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3606 monitor thread terminated
3608 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3610 # enable both bfd and cfm on p0.
3611 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3613 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3614 monitor thread created
3616 # disable bfd on p0.
3617 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3618 # check log, there should not be the log of thread terminated.
3619 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3621 # reenable bfd on p0.
3622 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3623 # check log, should still be on log of thread created.
3624 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3625 monitor thread created
3627 # disable bfd and cfm together.
3628 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3630 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3631 monitor thread terminated
3637 # this test helps avoid the deadlock between the main thread and monitor thread.
3638 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3641 for i in `seq 1 199`
3643 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])
3649 AT_BANNER([ofproto-dpif - flow translation resource limits])
3651 AT_SETUP([ofproto-dpif - infinite resubmit])
3653 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3654 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3656 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3658 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3661 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3664 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3666 ADD_OF_PORTS([br0], 1)
3667 (for i in `seq 1 64`; do
3669 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3671 echo "in_port=65, actions=local") > flows
3672 AT_CHECK([ovs-ofctl add-flows br0 flows])
3673 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3674 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3676 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3679 AT_SETUP([ofproto-dpif - too many output actions])
3681 ADD_OF_PORTS([br0], 1)
3682 (for i in `seq 1 12`; do
3684 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3686 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3687 AT_CHECK([ovs-ofctl add-flows br0 flows])
3688 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3689 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3692 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3694 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3697 AT_SETUP([ofproto-dpif - stack too deep])
3699 ADD_OF_PORTS([br0], 1)
3700 (for i in `seq 1 12`; do
3702 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3704 push="push:NXM_NX_REG0[[]]"
3705 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3706 AT_CHECK([ovs-ofctl add-flows br0 flows])
3707 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3708 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3710 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])