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
37 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
38 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>
39 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>
42 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
43 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>
44 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>
49 AT_SETUP([ofproto-dpif - resubmit])
51 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
52 [16], [17], [18], [19], [20], [21])
53 AT_DATA([flows.txt], [dnl
54 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
55 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
56 table=0 in_port=3 priority=2000 icmp actions=output(20)
57 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
58 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
59 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
61 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
62 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])
63 AT_CHECK([tail -1 stdout], [0],
64 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
69 AT_SETUP([ofproto-dpif - goto table])
71 ADD_OF_PORTS([br0], [1], [10], [11])
72 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
73 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
74 echo "table=64 actions=output(11)" >> flows.txt
75 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
76 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])
77 AT_CHECK([tail -1 stdout], [0],
78 [Datapath actions: 10,11
83 AT_SETUP([ofproto-dpif - write actions])
85 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
86 AT_DATA([flows.txt], [dnl
87 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
88 table=1 ip actions=write_actions(output(13)),goto_table(2)
89 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
91 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
92 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])
93 AT_CHECK([tail -1 stdout], [0],
94 [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
99 AT_SETUP([ofproto-dpif - clear actions])
101 ADD_OF_PORTS([br0], [1], [10], [11], [12])
102 AT_DATA([flows.txt], [dnl
103 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
104 table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
106 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
107 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])
108 AT_CHECK([tail -1 stdout], [0],
109 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
114 AT_SETUP([ofproto-dpif - all group in action list])
116 ADD_OF_PORTS([br0], [1], [10], [11])
117 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'])
118 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
119 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])
120 AT_CHECK([tail -1 stdout], [0],
121 [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
126 AT_SETUP([ofproto-dpif - indirect group in action list])
128 ADD_OF_PORTS([br0], [1], [10])
129 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
130 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
131 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
132 AT_CHECK([tail -1 stdout], [0],
133 [Datapath actions: 10
138 AT_SETUP([ofproto-dpif - all group in action set])
140 ADD_OF_PORTS([br0], [1], [10], [11])
141 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'])
142 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
143 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
144 AT_CHECK([tail -1 stdout], [0],
145 [Datapath actions: 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
150 AT_SETUP([ofproto-dpif - indirect group in action set])
152 ADD_OF_PORTS([br0], [1], [10])
153 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
154 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
155 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
156 AT_CHECK([tail -1 stdout], [0],
157 [Datapath actions: 10
162 AT_SETUP([ofproto-dpif - select group])
164 ADD_OF_PORTS([br0], [1], [10], [11])
165 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
166 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
168 # Try a bunch of different flows and make sure that they get distributed
170 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
171 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])
172 tail -1 stdout >> results
174 sort results | uniq -c
175 AT_CHECK([sort results | uniq], [0],
176 [Datapath actions: 10
182 AT_SETUP([ofproto-dpif - select group with watch port])
184 ADD_OF_PORTS([br0], [1], [10], [11])
185 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
186 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
187 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])
188 AT_CHECK([tail -1 stdout], [0],
189 [Datapath actions: 11
194 AT_SETUP([ofproto-dpif - select group with weight])
196 ADD_OF_PORTS([br0], [1], [10], [11], [12])
197 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'])
198 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
199 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
200 AT_CHECK([tail -1 stdout], [0],
201 [Datapath actions: 11
206 AT_SETUP([ofproto-dpif - fast failover group])
208 ADD_OF_PORTS([br0], [1], [10], [11])
209 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'])
210 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
211 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00: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])
212 AT_CHECK([tail -1 stdout], [0],
213 [Datapath actions: drop
218 AT_SETUP([ofproto-dpif - registers])
220 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
221 AT_DATA([flows.txt], [dnl
222 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
223 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
224 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
225 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
227 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
228 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
229 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
230 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
231 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
232 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
233 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
234 in_port=9,reg0=0xdeadbeef actions=output:20
235 in_port=10,reg1=0xdeadbeef actions=output:21
236 in_port=11,reg2=0xeef22dea actions=output:22
238 dnl Sanilty check all registers
239 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
240 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
241 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
242 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
245 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
246 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])
247 AT_CHECK([tail -1 stdout], [0],
248 [Datapath actions: 20,21,22,33
253 AT_SETUP([ofproto-dpif - push-pop])
255 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
256 AT_DATA([flows.txt], [dnl
257 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
258 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
259 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
260 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
261 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
264 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
265 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])
266 AT_CHECK([tail -1 stdout], [0],
267 [Datapath actions: 33,22,21,20
272 AT_SETUP([ofproto-dpif - output])
274 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
275 AT_DATA([flows.txt], [dnl
276 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
277 in_port=2 actions=output:9
278 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
279 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
280 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
281 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
282 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
283 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
285 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
286 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])
287 AT_CHECK([tail -1 stdout], [0],
288 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
293 AT_SETUP([ofproto-dpif - dec_ttl])
295 ADD_OF_PORTS([br0], [1], [2], [3], [4])
296 AT_DATA([flows.txt], [dnl
297 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
298 table=1 in_port=1 action=dec_ttl,output:3
300 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
301 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])
302 AT_CHECK([tail -3 stdout], [0],
303 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
304 This flow is handled by the userspace slow path because it:
305 - Sends "packet-in" messages to the OpenFlow controller.
307 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])
308 AT_CHECK([tail -1 stdout], [0],
309 [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
311 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])
312 AT_CHECK([tail -1 stdout], [0],
313 [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
316 AT_CAPTURE_FILE([ofctl_monitor.log])
317 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
318 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])
319 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
320 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
321 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
322 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
328 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
330 ADD_OF_PORTS([br0], [1], [2])
332 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
334 # "in_port" defaults to OFPP_NONE if it's not specified.
335 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"
336 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
337 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
346 AT_SETUP([ofproto-dpif - DSCP])
347 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
348 ADD_OF_PORTS([br0], [9])
349 AT_DATA([flows.txt], [dnl
350 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
352 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
353 AT_CHECK([ovs-vsctl -- \
354 set Port p1 qos=@newqos --\
355 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
356 --id=@q1 create Queue dscp=1 --\
357 --id=@q2 create Queue dscp=2], [0], [ignore])
358 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])
359 AT_CHECK([tail -1 stdout], [0],
360 [Datapath actions: dnl
362 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
363 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
365 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
366 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
367 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
373 AT_SETUP([ofproto-dpif - output/flood flags])
375 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
377 AT_DATA([flows.txt], [dnl
378 in_port=local actions=local,flood
379 in_port=1 actions=flood
380 in_port=2 actions=all
381 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
382 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
384 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
385 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
386 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
388 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])
389 AT_CHECK([tail -1 stdout \
390 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
398 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])
399 AT_CHECK([tail -1 stdout \
400 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
408 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])
409 AT_CHECK([tail -1 stdout \
410 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
419 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])
420 AT_CHECK([tail -1 stdout], [0],
421 [Datapath actions: 100,1,2,4,6,7
424 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])
425 AT_CHECK([tail -1 stdout], [0],
426 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
431 AT_SETUP([ofproto-dpif - controller])
432 OVS_VSWITCHD_START([dnl
433 add-port br0 p1 -- set Interface p1 type=dummy
435 ON_EXIT([kill `cat ovs-ofctl.pid`])
437 AT_CAPTURE_FILE([ofctl_monitor.log])
438 AT_DATA([flows.txt], [dnl
439 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
440 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
441 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
443 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
444 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)
445 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)
446 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
447 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)
448 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
449 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
450 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
451 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
452 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
453 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
454 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
455 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
456 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
457 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
458 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
459 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
460 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
461 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
462 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
464 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
467 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
470 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)'
472 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
473 ovs-appctl -t ovs-ofctl exit
475 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
476 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
477 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
479 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
480 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
482 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
483 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
486 dnl Singleton controller action.
487 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
490 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)'
492 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
493 ovs-appctl -t ovs-ofctl exit
495 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
496 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
497 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
499 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
500 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
502 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
503 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
506 dnl Modified controller action.
507 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
510 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)'
512 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
513 ovs-appctl -t ovs-ofctl exit
515 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
516 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
517 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
519 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
520 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
522 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
523 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
526 dnl Modified VLAN controller action.
527 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
530 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)'
532 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
533 ovs-appctl -t ovs-ofctl exit
535 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
536 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
537 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
539 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
540 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
542 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
543 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
546 dnl Modified MPLS controller action.
547 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
550 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)'
552 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
553 ovs-appctl -t ovs-ofctl exit
555 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
556 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
557 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
559 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
560 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
562 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
563 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
566 dnl Modified MPLS controller action.
567 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
570 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)'
572 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
573 ovs-appctl -t ovs-ofctl exit
575 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
576 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
577 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
579 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
580 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
582 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
583 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
586 dnl Modified MPLS controller action.
587 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
589 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)
592 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)'
595 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
596 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
597 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
598 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
600 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
601 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
603 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
604 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
607 dnl Modified MPLS controller action.
608 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
611 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))'
613 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
614 ovs-appctl -t ovs-ofctl exit
616 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
617 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
618 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
620 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
621 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
623 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
624 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
627 dnl Modified MPLS controller action.
628 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
631 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)'
633 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
634 ovs-appctl -t ovs-ofctl exit
636 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
637 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
638 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
640 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
641 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
643 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
644 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
647 dnl Modified MPLS controller action.
648 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
651 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)'
653 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
654 ovs-appctl -t ovs-ofctl exit
656 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
657 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
658 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
660 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
661 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
663 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
664 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
667 dnl Modified MPLS controller action.
668 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
671 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)'
673 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
674 ovs-appctl -t ovs-ofctl exit
676 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
677 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
678 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
680 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
681 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
683 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
684 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
687 dnl Modified MPLS controller action.
688 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
691 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)'
693 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
694 ovs-appctl -t ovs-ofctl exit
696 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
697 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
698 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
700 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
701 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
703 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
704 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
707 dnl Modified MPLS actions.
708 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
711 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)'
713 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
714 ovs-appctl -t ovs-ofctl exit
716 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
717 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
718 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
720 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
721 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
723 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
724 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
727 dnl Modified MPLS ipv6 controller action.
728 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
731 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)'
733 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
734 ovs-appctl -t ovs-ofctl exit
736 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
737 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
738 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
740 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
741 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
743 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
744 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
748 dnl Modified MPLS pop action.
749 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
750 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)
751 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
753 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
756 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'
759 # 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)'
761 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
762 ovs-appctl -t ovs-ofctl exit
764 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
765 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
766 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
768 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
769 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
771 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
772 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
776 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
779 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)'
781 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
782 ovs-appctl -t ovs-ofctl exit
784 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
785 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
786 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
788 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
789 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
791 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)
792 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
794 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)
795 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
797 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)
798 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
800 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)
801 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
803 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)
804 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
806 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)
807 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
809 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)
810 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=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
814 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
817 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'
819 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
820 ovs-appctl -t ovs-ofctl exit
822 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
823 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
824 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
826 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
827 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
829 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)
830 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
832 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)
833 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
835 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)
836 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
838 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)
839 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
841 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)
842 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
844 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)
845 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
847 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)
848 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
851 dnl Modified ARP controller action.
852 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
855 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)'
858 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
859 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
860 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
861 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
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.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
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=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
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=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
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.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
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=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
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=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
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.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
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=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
880 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
883 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
886 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'
889 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
890 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
891 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
892 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
894 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
895 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
897 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)
898 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
900 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)
901 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
903 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)
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=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
906 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)
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=84.84.84.84,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=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)
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=85,tp_dst=2223 sctp_csum:7f12662e
912 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)
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=86 sctp_csum:a7e86f67
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
919 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
920 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
921 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
922 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)
923 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)
924 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)
925 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)
926 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)
927 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
928 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
929 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
930 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
931 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
932 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
933 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
934 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
935 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
936 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
937 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
938 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
939 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
940 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
941 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
942 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
949 AT_SETUP([ofproto-dpif - ARP modification slow-path])
951 ADD_OF_PORTS([br0], [1], [2])
953 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
954 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'
956 # Input some packets that should follow the arp modification slow-path.
958 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)'
960 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
962 # Check the packets that were output.
963 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
964 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
965 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
966 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
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
978 AT_SETUP([ofproto-dpif - VLAN handling])
980 [set Bridge br0 fail-mode=standalone -- \
981 add-port br0 p1 trunks=10,12 -- \
982 add-port br0 p2 tag=10 -- \
983 add-port br0 p3 tag=12 \
984 other-config:priority-tags=true -- \
985 add-port br0 p4 tag=12 -- \
986 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
987 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
988 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
989 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
990 other-config:priority-tags=true -- \
991 set Interface p1 type=dummy -- \
992 set Interface p2 type=dummy -- \
993 set Interface p3 type=dummy -- \
994 set Interface p4 type=dummy -- \
995 set Interface p5 type=dummy -- \
996 set Interface p6 type=dummy -- \
997 set Interface p7 type=dummy -- \
998 set Interface p8 type=dummy --])
1000 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1001 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1007 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1008 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1011 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1012 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1016 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1017 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1020 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1021 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1022 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1023 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1024 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1031 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1032 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1033 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1040 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1041 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1042 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1049 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1050 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1051 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1052 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1053 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1056 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1057 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1058 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1059 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1060 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1061 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1062 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1065 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1066 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1067 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1068 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1069 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1070 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1071 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1074 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1075 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1076 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1077 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1078 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1079 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1080 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1083 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1084 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1092 if test $vlan = none; then
1093 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1095 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))"
1098 echo "----------------------------------------------------------------------"
1099 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1101 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1102 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1104 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1106 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1112 AT_SETUP([ofproto-dpif - fragment handling])
1114 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1115 AT_DATA([flows.txt], [dnl
1116 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1117 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1118 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1119 priority=50 tcp ip_frag=no actions=output:4
1120 priority=50 tcp ip_frag=first actions=output:5
1121 priority=50 tcp ip_frag=later actions=output:6
1123 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1125 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"
1126 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1127 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1128 later_flow="$base_flow,frag=later)"
1130 # mode no first later
1133 'drop 1 drop drop' \
1142 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1143 for type in no first later; do
1144 eval flow=\$${type}_flow exp_output=\$$type
1145 printf "\n%s\n" "----$mode $type-----"
1146 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1148 if test $mode = drop && test $type != no; then
1149 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1151 echo "Datapath actions: $exp_output" >> expout
1152 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1158 AT_SETUP([ofproto-dpif - exit])
1160 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1161 AT_DATA([flows.txt], [dnl
1162 in_port=1 actions=output:10,exit,output:11
1163 in_port=2 actions=output:12,resubmit:1,output:12
1164 in_port=3 actions=output:13,resubmit:2,output:14
1166 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1167 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])
1168 AT_CHECK([tail -1 stdout], [0],
1169 [Datapath actions: 10
1171 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])
1172 AT_CHECK([tail -1 stdout], [0],
1173 [Datapath actions: 12,10
1175 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])
1176 AT_CHECK([tail -1 stdout], [0],
1177 [Datapath actions: 13,12,10
1183 AT_SETUP([ofproto-dpif - mirroring, select_all])
1185 ADD_OF_PORTS([br0], 1, 2, 3)
1187 set Bridge br0 mirrors=@m --\
1188 --id=@p3 get Port p3 --\
1189 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1191 AT_DATA([flows.txt], [dnl
1192 in_port=1 actions=output:2
1193 in_port=2 actions=output:1
1195 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1197 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)"
1198 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1199 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1200 [Datapath actions: 2,3
1203 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)"
1204 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1205 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1206 [Datapath actions: 1,3
1213 AT_SETUP([ofproto-dpif - mirroring, select_src])
1215 ADD_OF_PORTS([br0], 1, 2, 3)
1217 set Bridge br0 mirrors=@m --\
1218 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1219 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1221 AT_DATA([flows.txt], [dnl
1222 in_port=1 actions=output:2
1223 in_port=2 actions=output:1
1225 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1227 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)"
1228 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1229 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1230 [Datapath actions: 2,3
1233 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)"
1234 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1235 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1236 [Datapath actions: 1
1241 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1243 ADD_OF_PORTS([br0], 1, 2)
1245 set Bridge br0 mirrors=@m --\
1246 --id=@p2 get Port p2 --\
1247 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1249 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1251 # "in_port" defaults to OFPP_NONE if it's not specified.
1252 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"
1253 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1254 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1255 [Datapath actions: 1,2
1262 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1264 ADD_OF_PORTS([br0], 1, 2, 3)
1266 set Bridge br0 mirrors=@m --\
1267 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1268 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1270 AT_DATA([flows.txt], [dnl
1271 in_port=1 actions=output:2
1272 in_port=2 actions=output:1
1274 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1276 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)"
1277 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1278 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1279 [Datapath actions: 2,3
1282 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)"
1283 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1284 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1285 [Datapath actions: 1
1292 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1294 ADD_OF_PORTS([br0], 1, 2, 3)
1296 set Bridge br0 mirrors=@m --\
1297 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1298 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1300 AT_DATA([flows.txt], [dnl
1301 in_port=1, actions=output:2
1303 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1305 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)"
1306 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1307 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1308 [Datapath actions: 2
1311 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))"
1312 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1313 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1314 [Datapath actions: 2
1317 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))"
1318 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1319 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1320 [Datapath actions: 2,3
1327 AT_SETUP([ofproto-dpif - mirroring, output_port])
1329 ADD_OF_PORTS([br0], 1, 2, 3)
1331 set Bridge br0 mirrors=@m --\
1332 --id=@p3 get Port p3 --\
1333 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1335 AT_DATA([flows.txt], [dnl
1336 in_port=1 actions=mod_vlan_vid:17,output:2
1337 in_port=2 actions=output:1
1339 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1341 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)"
1342 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1343 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1344 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1347 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)"
1348 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1349 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1350 [Datapath actions: 1,3
1356 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1358 ADD_OF_PORTS([br0], 1, 2)
1360 set Bridge br0 mirrors=@m --\
1361 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1363 AT_DATA([flows.txt], [dnl
1364 in_port=1 actions=output:2
1365 in_port=2 actions=mod_vlan_vid:17,output:1
1367 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1369 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)"
1370 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1371 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1373 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1374 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1376 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1378 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)"
1379 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1380 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1382 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1383 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1385 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1390 # Two testcases below are for the ofproto/trace command
1391 # The first one tests all correct syntax:
1392 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1393 # ofproto/trace br_name br_flow [-generate|packet]
1394 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1395 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1396 ADD_OF_PORTS([br0], 1, 2, 3)
1398 AT_DATA([flows.txt], [dnl
1399 in_port=1 actions=output:2
1400 in_port=2 actions=output:1
1402 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1404 odp_flow="in_port(p1)"
1406 # Test command: ofproto/trace odp_flow with in_port as a name.
1407 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1408 AT_CHECK([tail -1 stdout], [0], [dnl
1412 odp_flow="in_port(1)"
1413 # Test command: ofproto/trace odp_flow
1414 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1415 AT_CHECK([tail -1 stdout], [0], [dnl
1419 # Test command: ofproto/trace dp_name odp_flow
1420 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1421 AT_CHECK([tail -1 stdout], [0], [dnl
1424 # Test commmand: ofproto/trace br_name br_flow
1425 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1426 AT_CHECK([tail -1 stdout], [0], [dnl
1430 # Delete the inserted flows
1431 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1432 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1434 # This section beflow tests the [-generate] option
1435 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1436 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"
1438 # Test command: ofproto/trace odp_flow
1439 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1440 # Check for no MAC learning entry
1441 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1445 # Test command: ofproto/trace br_name br_flow
1446 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1447 # Check for no MAC learning entry
1448 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1452 # Test command: ofproto/trace odp_flow -generate
1453 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1454 # Check for the MAC learning entry
1455 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1457 3 0 50:54:00:00:00:05 ?
1460 # Test command: ofproto/trace dp_name odp_flow -generate
1461 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1462 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1463 -generate], [0], [stdout])
1464 # Check for both MAC learning entries
1465 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1467 3 0 50:54:00:00:00:05 ?
1468 1 0 50:54:00:00:00:06 ?
1471 # Test command: ofproto/trace br_name br_flow -generate
1472 AT_CHECK([ovs-appctl ofproto/trace br0 \
1473 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1474 -generate], [0], [stdout])
1475 # Check for both MAC learning entries.
1476 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1478 3 0 50:54:00:00:00:05 ?
1479 1 0 50:54:00:00:00:06 ?
1480 2 0 50:54:00:00:00:07 ?
1483 # This section beflow tests the [packet] option
1484 # The ovs-tcpundump of packets between port1 and port2
1485 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1486 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1488 # Construct the MAC learning table
1489 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1490 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1491 -generate], [0], [stdout])
1493 # Construct the MAC learning table
1494 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1495 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1496 -generate], [0], [stdout])
1498 # Test command: ofproto/trace odp_flow packet
1499 AT_CHECK([ovs-appctl ofproto/trace \
1500 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1501 AT_CHECK([tail -1 stdout], [0], [dnl
1504 AT_CHECK([head -n 2 stdout], [0], [dnl
1506 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
1509 # Test command: ofproto/trace dp_name odp_flow packet
1510 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1511 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1512 AT_CHECK([tail -1 stdout], [0], [dnl
1515 AT_CHECK([head -n 2 stdout], [0], [dnl
1517 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
1520 # Test command: ofproto/trace br_name br_flow packet
1521 AT_CHECK([ovs-appctl ofproto/trace br0 \
1522 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1523 AT_CHECK([tail -1 stdout], [0], [dnl
1526 AT_CHECK([head -n 2 stdout], [0], [dnl
1528 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
1534 # The second test tests the corner cases
1535 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1537 ADD_OF_PORTS([br0], 1, 2)
1540 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1541 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1543 generate="-generate"
1544 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1546 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1552 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1554 AT_CHECK([tail -2 stderr], [0], [dnl
1555 Cannot find the datapath
1556 ovs-appctl: ovs-vswitchd: server returned an error
1559 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1565 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1567 AT_CHECK([tail -2 stderr], [0], [dnl
1568 Cannot find the datapath
1569 ovs-appctl: ovs-vswitchd: server returned an error
1572 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1578 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1580 AT_CHECK([tail -2 stderr], [0], [dnl
1581 Cannot find the datapath
1582 ovs-appctl: ovs-vswitchd: server returned an error
1585 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1591 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1593 AT_CHECK([tail -2 stderr], [0], [dnl
1594 Cannot find the datapath
1595 ovs-appctl: ovs-vswitchd: server returned an error
1598 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1604 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1606 AT_CHECK([tail -2 stderr], [0], [dnl
1608 ovs-appctl: ovs-vswitchd: server returned an error
1611 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1617 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1619 AT_CHECK([tail -2 stderr], [0], [dnl
1620 Must specify bridge name
1621 ovs-appctl: ovs-vswitchd: server returned an error
1624 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1625 AT_CHECK([ovs-appctl ofproto/trace \
1626 ovs-dummy "$odp_flow" garbage_option],
1627 [2], [stdout],[stderr])
1628 AT_CHECK([tail -2 stderr], [0], [dnl
1629 Trailing garbage in packet data
1630 ovs-appctl: ovs-vswitchd: server returned an error
1633 # Test incorrect command: ofproto/trace with 4 arguments
1634 AT_CHECK([ovs-appctl ofproto/trace \
1635 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1636 AT_CHECK([tail -2 stderr], [0], [dnl
1637 "ofproto/trace" command takes at most 3 arguments
1638 ovs-appctl: ovs-vswitchd: server returned an error
1641 # Test incorrect command: ofproto/trace with 0 argument
1642 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1643 AT_CHECK([tail -2 stderr], [0], [dnl
1644 "ofproto/trace" command requires at least 1 arguments
1645 ovs-appctl: ovs-vswitchd: server returned an error
1651 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
1653 ADD_OF_PORTS([br0], 1, 2, 3)
1655 AT_DATA([flows.txt], [dnl
1656 in_port=1 actions=output:2
1657 in_port=2 actions=output:1
1659 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1661 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
1662 AT_CHECK([tail -1 stdout], [0], [dnl
1663 Datapath actions: push_vlan(vid=123,pcp=0),2
1670 m4_define([OFPROTO_TRACE],
1672 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1673 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1675 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1678 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1681 AT_SETUP([ofproto-dpif - MAC learning])
1682 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1683 ADD_OF_PORTS([br0], 1, 2, 3)
1685 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)'
1687 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1690 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1694 # Check for the MAC learning entry.
1695 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1697 3 0 50:54:00:00:00:05 ?
1700 # Trace a packet arrival destined for the learned MAC.
1701 # (This will also learn a MAC.)
1704 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1708 # Check for both MAC learning entries.
1709 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1711 3 0 50:54:00:00:00:05 ?
1712 1 0 50:54:00:00:00:06 ?
1715 # Trace a packet arrival that updates the first learned MAC entry.
1718 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1722 # Check that the MAC learning entry was updated.
1723 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1725 1 0 50:54:00:00:00:06 ?
1726 2 0 50:54:00:00:00:05 ?
1729 # Add another bridge.
1733 -- set bridge br1 datapath-type=dummy])
1734 ADD_OF_PORTS([br1], 4, 5)
1736 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1739 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1744 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1748 # Check that the MAC learning entries were added.
1749 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1751 4 0 50:54:00:00:00:06 ?
1752 5 0 50:54:00:00:00:07 ?
1755 # Delete port p1 and see that its MAC learning entry disappeared, and
1756 # that the MAC learning entry for the same MAC was also deleted from br1.
1757 AT_CHECK([ovs-vsctl del-port p1])
1758 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1760 2 0 50:54:00:00:00:05 ?
1762 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1764 5 0 50:54:00:00:00:07 ?
1770 AT_SETUP([ofproto-dpif - MAC table overflow])
1772 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1773 ADD_OF_PORTS([br0], 1, 2, 3)
1775 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)'
1777 AT_CHECK([ovs-appctl time/stop])
1779 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1780 for i in 0 1 2 3 4 5 6 7 8 9; do
1783 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1786 ovs-appctl time/warp 1000
1789 # Check for the MAC learning entries.
1790 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1792 3 0 50:54:00:00:00:00
1793 3 0 50:54:00:00:00:01
1794 3 0 50:54:00:00:00:02
1795 3 0 50:54:00:00:00:03
1796 3 0 50:54:00:00:00:04
1797 3 0 50:54:00:00:00:05
1798 3 0 50:54:00:00:00:06
1799 3 0 50:54:00:00:00:07
1800 3 0 50:54:00:00:00:08
1801 3 0 50:54:00:00:00:09
1805 # Trace another ARP packet on another MAC.
1808 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1812 # Check that the new one chased the oldest one out of the table.
1813 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1815 3 0 50:54:00:00:00:01 ?
1816 3 0 50:54:00:00:00:02 ?
1817 3 0 50:54:00:00:00:03 ?
1818 3 0 50:54:00:00:00:04 ?
1819 3 0 50:54:00:00:00:05 ?
1820 3 0 50:54:00:00:00:06 ?
1821 3 0 50:54:00:00:00:07 ?
1822 3 0 50:54:00:00:00:08 ?
1823 3 0 50:54:00:00:00:09 ?
1824 3 0 50:54:00:00:00:10 ?
1830 dnl Test that sFlow samples packets correctly.
1831 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1832 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1834 ON_EXIT([kill `cat test-sflow.pid`])
1835 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1836 AT_CAPTURE_FILE([sflow.log])
1837 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1839 ovs-appctl time/stop
1841 ADD_OF_PORTS([br0], 1, 2)
1843 set Interface br0 options:ifindex=1002 -- \
1844 set Interface p1 options:ifindex=1004 -- \
1845 set Interface p2 options:ifindex=1003 -- \
1846 set Bridge br0 sflow=@sf -- \
1847 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1848 header=128 sampling=1 polling=1
1850 dnl open with ARP packets to seed the bridge-learning. The output
1851 dnl ifIndex numbers should be reported predictably after that.
1852 dnl Since we set sampling=1 we should see all of these packets
1853 dnl reported. Sorting the output by data-source and seqNo makes
1854 dnl it deterministic. Ensuring that we send at least two packets
1855 dnl into each port means we get to check the seq nos are
1856 dnl incrementing correctly.
1858 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)'
1859 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)'
1860 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)'
1861 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)'
1862 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)'
1864 dnl sleep long enough to get more than one counter sample
1865 dnl from each datasource so we can check sequence numbers
1866 for i in `seq 1 30`; do
1867 ovs-appctl time/warp 100
1870 ovs-appctl -t test-sflow exit
1872 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1893 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
1913 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
1933 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
1953 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
1973 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
1976 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1990 in_broadcasts=4294967295
1993 in_unknownprotos=4294967295
1996 out_multicasts=4294967295
1997 out_broadcasts=4294967295
2013 in_broadcasts=4294967295
2016 in_unknownprotos=4294967295
2019 out_multicasts=4294967295
2020 out_broadcasts=4294967295
2036 in_broadcasts=4294967295
2039 in_unknownprotos=4294967295
2042 out_multicasts=4294967295
2043 out_broadcasts=4294967295
2059 in_broadcasts=4294967295
2062 in_unknownprotos=4294967295
2065 out_multicasts=4294967295
2066 out_broadcasts=4294967295
2082 in_broadcasts=4294967295
2085 in_unknownprotos=4294967295
2088 out_multicasts=4294967295
2089 out_broadcasts=4294967295
2105 in_broadcasts=4294967295
2108 in_unknownprotos=4294967295
2111 out_multicasts=4294967295
2112 out_broadcasts=4294967295
2121 dnl Test that basic NetFlow reports flow statistics correctly:
2122 dnl - The initial packet of a flow are correctly accounted.
2123 dnl - Later packets within a flow are correctly accounted.
2124 dnl - Flow actions changing (in this case, due to MAC learning)
2125 dnl cause a record to be sent.
2126 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
2128 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2129 ADD_OF_PORTS([br0], 1, 2)
2131 ovs-appctl time/stop
2132 ON_EXIT([kill `cat test-netflow.pid`])
2133 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2134 AT_CAPTURE_FILE([netflow.log])
2135 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2138 set Bridge br0 netflow=@nf -- \
2139 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2140 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2142 for delay in 1000 30000; do
2143 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)'
2144 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)'
2146 ovs-appctl time/warp $delay
2149 ovs-appctl time/warp 6000
2152 ovs-appctl -t test-netflow exit
2154 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])
2156 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])
2158 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
2159 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
2160 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
2164 dnl Test that basic NetFlow reports active expirations correctly.
2165 AT_SETUP([ofproto-dpif - NetFlow active expiration])
2167 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2168 ADD_OF_PORTS([br0], 1, 2)
2170 ON_EXIT([kill `cat test-netflow.pid`])
2171 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2172 AT_CAPTURE_FILE([netflow.log])
2173 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2176 set Bridge br0 netflow=@nf -- \
2177 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2178 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2180 AT_CHECK([ovs-appctl time/stop])
2182 while test $n -le 60; do
2185 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)'
2186 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)'
2188 ovs-appctl time/warp 1000
2191 ovs-appctl time/warp 10000
2195 ovs-appctl -t test-netflow exit
2197 # Count the number of reported packets:
2198 # - From source to destination before MAC learning kicks in (just one).
2199 # - From source to destination after that.
2200 # - From destination to source.
2208 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2215 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2218 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2221 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2228 eval $counter=\`expr \$$counter + \$pkts\`
2229 n_recs=`expr $n_recs + 1`
2232 # There should be exactly 1 MAC learning packet,
2233 # exactly 59 other packets in that direction,
2234 # and exactly 60 packets in the other direction.
2235 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2240 AT_SETUP([idle_age and hard_age increase over time])
2243 # get_ages DURATION HARD IDLE
2245 # Fetch the flow duration, hard age, and idle age into the variables
2246 # whose names are given as arguments. Rounds DURATION down to the
2247 # nearest integer. If hard_age doesn't appear in the output, sets
2248 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2251 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2253 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2254 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2255 AS_VAR_COPY([$1], [duration])
2257 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2258 if test X"$hard" = X; then
2261 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2263 AS_VAR_COPY([$2], [hard])
2265 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2266 if test X"$idle" = X; then
2269 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2271 AS_VAR_COPY([$3], [idle])
2274 # Add a flow and get its initial hard and idle age.
2275 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2276 get_ages duration1 hard1 idle1
2278 ovs-appctl time/stop
2279 # Warp time forward by 10 seconds, then modify the flow's actions.
2280 ovs-appctl time/warp 10000
2281 get_ages duration2 hard2 idle2
2282 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2284 # Warp time forward by 10 seconds.
2285 ovs-appctl time/warp 10000
2286 get_ages duration3 hard3 idle3
2288 # Warp time forward 10 more seconds, then pass some packets through the flow,
2289 # then warp forward a few more times because idle times are only updated
2291 ovs-appctl time/warp 10000
2292 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)'
2293 ovs-appctl time/warp 1000
2294 ovs-appctl time/warp 1000
2295 ovs-appctl time/warp 1000
2296 get_ages duration4 hard4 idle4
2298 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2299 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2300 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2302 # Duration should increase steadily over time.
2303 AT_CHECK([test $duration1 -lt $duration2])
2304 AT_CHECK([test $duration2 -lt $duration3])
2305 AT_CHECK([test $duration3 -lt $duration4])
2307 # Hard age should be "none" initially because it's the same as flow_duration,
2308 # then it should increase.
2309 AT_CHECK([test $hard1 = none])
2310 AT_CHECK([test $hard2 = none])
2311 AT_CHECK([test $hard3 != none])
2312 AT_CHECK([test $hard4 != none])
2313 AT_CHECK([test $hard3 -lt $hard4])
2315 # Idle age should increase from 1 to 2 to 3, then decrease.
2316 AT_CHECK([test $idle1 -lt $idle2])
2317 AT_CHECK([test $idle2 -lt $idle3])
2318 AT_CHECK([test $idle3 -gt $idle4])
2320 # Check some invariant relationships.
2321 AT_CHECK([test $duration1 = $idle1])
2322 AT_CHECK([test $duration2 = $idle2])
2323 AT_CHECK([test $duration3 = $idle3])
2324 AT_CHECK([test $idle3 -gt $hard3])
2325 AT_CHECK([test $idle4 -lt $hard4])
2326 AT_CHECK([test $hard4 -lt $duration4])
2331 AT_SETUP([ofproto-dpif - fin_timeout])
2333 AT_DATA([flows.txt], [dnl
2334 in_port=1 actions=output:2
2335 in_port=2 actions=mod_vlan_vid:17,output:1
2337 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2338 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2340 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2343 ovs-appctl time/stop
2344 # Check that a TCP SYN packet does not change the timeout. (Because
2345 # flow stats updates are mainly what implements the fin_timeout
2346 # feature, we warp forward a couple of times to ensure that flow stats
2347 # run before re-checking the flow table.)
2348 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2349 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2352 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2354 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2356 # Check that a TCP FIN packet does change the timeout.
2357 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2358 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2361 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2363 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2368 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2369 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2370 ADD_OF_PORTS([br0], [1], [2])
2371 ADD_OF_PORTS([br1], [3])
2373 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2380 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2381 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2382 ADD_OF_PORTS([br0], [1], [2])
2383 ADD_OF_PORTS([br1], [3])
2385 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2386 dummy@ovs-dummy: hit:0 missed:0
2388 br0 65534/100: (dummy)
2392 br1 65534/101: (dummy)
2398 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2399 OVS_VSWITCHD_START([add-br br1 -- \
2400 set bridge br1 datapath-type=dummy fail-mode=secure])
2401 ADD_OF_PORTS([br0], [1], [2])
2402 ADD_OF_PORTS([br1], [3])
2404 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)'])
2405 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)'])
2406 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)'])
2408 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2409 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))
2410 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))
2413 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2414 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))
2417 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
2418 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))
2419 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))
2422 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
2423 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))
2429 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
2430 OVS_VSWITCHD_START([dnl
2431 add-port br0 p1 -- set Interface p1 type=dummy
2433 ON_EXIT([kill `cat ovs-ofctl.pid`])
2435 AT_CAPTURE_FILE([ofctl_monitor.log])
2436 AT_DATA([flows.txt], [dnl
2437 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2438 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2440 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2442 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
2443 dnl a packet with 4 MPLS LSEs but userspace and the datapath can only handle up
2446 dnl The input is a frame with four MPLS labels which tcpdump -vve shows as:
2447 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)
2448 dnl (label 20, exp 0, ttl 32)
2449 dnl (label 20, exp 0, ttl 32)
2450 dnl (label 20, exp 0, [S], ttl 32)
2451 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2452 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2454 for dl_src in 00 01; do
2455 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"])
2457 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
2458 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
2466 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
2467 OVS_VSWITCHD_START([dnl
2468 add-port br0 p1 -- set Interface p1 type=dummy
2470 ON_EXIT([kill `cat ovs-ofctl.pid`])
2472 AT_CAPTURE_FILE([ofctl_monitor.log])
2473 AT_DATA([flows.txt], [dnl
2474 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2475 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2477 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2479 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
2480 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
2481 dnl can't determine the resulting MPLS label after an MPLS PUSH action.
2483 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
2484 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)
2485 dnl (label 20, exp 0, ttl 32)
2486 dnl (label 20, exp 0, ttl 32)
2487 dnl (label 20, exp 0, [S], ttl 32)
2488 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2489 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2490 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'])
2492 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2493 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
2499 AT_SETUP([ofproto-dpif - patch ports])
2500 OVS_VSWITCHD_START([add-br br1 \
2501 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2502 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2503 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2505 ADD_OF_PORTS([br0], [2])
2506 ADD_OF_PORTS([br1], [3])
2508 AT_CHECK([ovs-appctl time/stop])
2510 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2511 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2513 for i in $(seq 1 10); do
2514 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)'
2517 for i in $(seq 1 5); do
2518 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)'
2521 AT_CHECK([ovs-appctl time/warp 500], [0],
2525 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2526 dummy@ovs-dummy: hit:13 missed:2
2528 br0 65534/100: (dummy)
2530 pbr0 1/none: (patch: peer=pbr1)
2532 br1 65534/101: (dummy)
2534 pbr1 1/none: (patch: peer=pbr0)
2537 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2538 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
2540 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2541 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
2544 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2545 OFPST_PORT reply (xid=0x4): 1 ports
2546 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2547 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2550 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2551 OFPST_PORT reply (xid=0x4): 1 ports
2552 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2553 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2559 AT_SETUP([ofproto-dpif - port duration])
2560 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2561 ADD_OF_PORTS([br0], 1, 2)
2563 ovs-appctl time/stop
2564 ovs-appctl time/warp 10000
2566 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2567 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
2576 dnl ----------------------------------------------------------------------
2577 AT_BANNER([ofproto-dpif -- megaflows])
2579 AT_SETUP([ofproto-dpif megaflow - port classification])
2581 ADD_OF_PORTS([br0], [1], [2])
2582 AT_DATA([flows.txt], [dnl
2583 table=0 in_port=1 actions=output(2)
2585 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2586 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)'])
2587 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)'])
2588 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2589 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>
2594 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2596 ADD_OF_PORTS([br0], [1], [2])
2597 AT_DATA([flows.txt], [dnl
2598 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2600 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2601 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)'])
2602 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)'])
2603 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2604 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>
2605 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>
2610 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2612 ADD_OF_PORTS([br0], [1], [2])
2613 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], [])
2614 AT_DATA([flows.txt], [dnl
2615 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2617 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2618 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)'])
2619 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)'])
2620 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2621 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>
2622 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>
2627 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
2629 ADD_OF_PORTS([br0], [1], [2])
2630 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], [])
2631 AT_DATA([flows.txt], [dnl
2632 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
2634 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2635 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)'])
2636 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)'])
2637 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2638 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>
2639 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>
2644 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2646 ADD_OF_PORTS([br0], [1], [2])
2647 AT_DATA([flows.txt], [dnl
2648 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2650 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2651 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)'])
2652 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)'])
2653 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2654 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>
2659 AT_SETUP([ofproto-dpif megaflow - normal])
2661 ADD_OF_PORTS([br0], [1], [2])
2662 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2663 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)'])
2664 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)'])
2665 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2666 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>
2667 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>
2672 AT_SETUP([ofproto-dpif megaflow - mpls])
2674 ADD_OF_PORTS([br0], [1], [2])
2675 AT_DATA([flows.txt], [dnl
2676 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2677 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2679 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2680 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)'])
2681 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)'])
2682 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2683 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>
2684 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>
2689 AT_SETUP([ofproto-dpif megaflow - netflow])
2691 ADD_OF_PORTS([br0], [1], [2])
2693 dnl NetFlow configuration disables wildcarding relevant fields
2694 ON_EXIT([kill `cat test-netflow.pid`])
2695 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2696 AT_CAPTURE_FILE([netflow.log])
2697 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2699 set Bridge br0 netflow=@nf -- \
2700 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2701 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2703 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2704 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)'])
2705 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)'])
2706 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2707 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>
2708 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>
2713 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2715 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2716 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2717 set interface p2 type=dummy ofport_request=2 -- \
2718 set interface p3 type=dummy ofport_request=3])
2719 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2722 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2723 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)'])
2724 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)'])
2725 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2726 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>
2727 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>
2732 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2734 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2735 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2736 set interface p2 type=dummy ofport_request=2 -- \
2737 set interface p3 type=dummy ofport_request=3])
2738 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2741 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2742 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)'])
2743 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)'])
2744 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2745 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>
2746 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>
2751 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2752 # Create bond0 on br0 with interfaces p0 and p1
2753 # and bond1 on br1 with interfaces p2 and p3
2754 # with p0 patched to p2 and p1 patched to p3.
2756 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2757 other-config:lacp-time=fast \
2758 other-config:bond-rebalance-interval=0 -- \
2759 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2760 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2762 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2763 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2764 fail-mode=secure -- \
2765 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2766 other-config:lacp-time=fast \
2767 other-config:bond-rebalance-interval=0 -- \
2768 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2769 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2771 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2773 ADD_OF_PORTS([br0], [7])
2774 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2775 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2776 ovs-appctl time/stop
2777 ovs-appctl time/warp 5000
2778 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)'])
2779 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)'])
2781 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2782 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>
2783 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>
2788 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2790 ADD_OF_PORTS([br0], [1], [2])
2791 AT_DATA([flows.txt], [dnl
2792 table=0 in_port=1,ip actions=resubmit(90)
2793 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2795 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2796 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)'])
2797 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)'])
2798 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2799 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>
2800 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>
2805 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2807 ADD_OF_PORTS([br0], [1], [2])
2808 AT_DATA([flows.txt], [dnl
2809 table=0 in_port=1,ip actions=resubmit(,1)
2810 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2812 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2813 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)'])
2814 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=
2815 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2816 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2817 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>
2818 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>
2823 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2825 ADD_OF_PORTS([br0], [1], [2])
2826 AT_DATA([flows.txt], [dnl
2827 table=0 in_port=1,ip actions=goto_table(1)
2828 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2830 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2831 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)'])
2832 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)'])
2833 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2834 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>
2835 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>
2840 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2842 ADD_OF_PORTS([br0], [1], [2], [3])
2844 set Bridge br0 mirrors=@m --\
2845 --id=@p3 get Port p3 --\
2846 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2848 AT_DATA([flows.txt], [dnl
2849 in_port=1 actions=output:2
2851 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2852 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)'])
2853 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)'])
2854 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2855 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>
2860 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2862 ADD_OF_PORTS([br0], [1], [2], [3])
2864 set Bridge br0 mirrors=@m --\
2865 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2866 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2868 AT_DATA([flows.txt], [dnl
2869 in_port=1 actions=output:2
2871 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2872 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))'])
2873 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)'])
2874 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2875 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>
2876 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>
2881 AT_SETUP([ofproto-dpif megaflow - move action])
2883 ADD_OF_PORTS([br0], [1], [2])
2884 AT_DATA([flows.txt], [dnl
2885 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2886 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2887 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2889 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2890 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)'])
2891 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)'])
2892 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2893 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>
2894 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>
2899 AT_SETUP([ofproto-dpif megaflow - push action])
2901 ADD_OF_PORTS([br0], [1], [2])
2902 AT_DATA([flows.txt], [dnl
2903 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2905 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2906 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)'])
2907 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)'])
2908 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2909 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>
2910 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>
2915 AT_SETUP([ofproto-dpif megaflow - learning])
2917 ADD_OF_PORTS([br0], [1], [2])
2918 AT_DATA([flows.txt], [dnl
2919 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
2921 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2922 ovs-appctl time/stop
2923 # We send each packet twice because the first packet in each flow causes the
2924 # flow table to change and thus revalidations, which (depending on timing)
2925 # can keep a megaflow from being installed. The revalidations are done by
2926 # the second iteration, allowing the flows to be installed.
2928 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)'])
2929 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)'])
2930 ovs-appctl time/warp 100
2932 dnl The original flow is missing due to a revalidation.
2933 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2934 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>
2935 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>
2940 AT_SETUP([ofproto-dpif megaflow - tunnels])
2942 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
2943 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
2944 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
2945 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
2947 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
2948 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
2949 ofport_request=4 options:key=flow])
2950 AT_DATA([flows.txt], [dnl
2951 in_port=1,actions=output(2)
2952 in_port=3,actions=output(4)
2954 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2955 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2956 dnl will cause the packet to be dropped.
2957 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)'])
2958 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)'])
2959 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)'])
2960 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)'])
2961 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2962 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>
2963 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>
2964 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>
2969 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2971 ADD_OF_PORTS([br0], [1], [2])
2972 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], [])
2973 AT_DATA([flows.txt], [dnl
2974 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2976 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2977 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)'])
2978 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)'])
2979 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2980 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>
2981 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>
2986 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2988 ADD_OF_PORTS([br0], [1], [2])
2989 AT_DATA([flows.txt], [dnl
2990 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2992 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2993 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)'])
2994 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)'])
2995 dnl The megaflows do not match the same fields, since the first packet
2996 dnl is essentially a no-op. (The new destination MAC is the same as the
2997 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2998 dnl so that a packet that doesn't need its MAC address changed doesn't
2999 dnl hide one that does. Since the first entry doesn't need to change,
3000 dnl only the destination MAC address is matched (as decided by
3001 dnl ofproto-dpif). The second entry actually updates the destination
3002 dnl MAC, so both the source and destination MAC addresses are
3003 dnl un-wildcarded, since the ODP commit functions update both the source
3004 dnl and destination MAC addresses.
3005 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3006 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
3007 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
3012 AT_SETUP([ofproto-dpif megaflow - disabled])
3014 ADD_OF_PORTS([br0], [1], [2])
3015 AT_DATA([flows.txt], [dnl
3016 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
3017 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
3019 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
3021 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
3022 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3023 for i in 1 2 3 4; do
3024 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)'])
3025 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)'])
3027 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3028 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
3029 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
3034 AT_SETUP([ofproto-dpif - datapath port number change])
3035 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3036 ADD_OF_PORTS([br0], 1)
3038 # Trace a flow that should output to p1.
3039 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3041 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
3044 # Change p1's port number to 5.
3045 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
3047 # Trace a flow that should output to p1 in its new location.
3048 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3050 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
3055 # Tests the bundling with various bfd and cfm configurations.
3056 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
3057 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
3058 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
3059 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
3060 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
3061 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
3062 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
3063 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
3064 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
3065 set Interface p0 cfm_mpid=1 -- \
3066 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
3068 ovs-appctl time/stop
3069 # advance the clock to stablize everything.
3070 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3071 # cfm/show should show 'recv' fault.
3072 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3075 # bfd/show should show 'up'.
3076 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3077 Local Session State: up
3078 Remote Session State: up
3079 Local Session State: up
3080 Remote Session State: up
3082 # bond/show should show 'may-enable: true' for all slaves.
3083 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3090 # now disable the bfd on p1.
3091 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3092 # advance the clock to stablize everything.
3093 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3094 # cfm/show should show 'recv' fault.
3095 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3098 # bfd/show should show 'down'.
3099 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3100 Local Session State: down
3101 Remote Session State: down
3103 # bond/show should show 'may-enable: false' for p0.
3104 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3109 # now enable the bfd on p1 and disable bfd on p0.
3110 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3111 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3112 # advance the clock to stablize everything.
3113 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3114 # cfm/show should show 'recv' fault.
3115 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3118 # bfd/show should show 'down'.
3119 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3120 Local Session State: down
3121 Remote Session State: down
3123 # bond/show should show 'may-enable: false' for p0 and p1.
3124 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3134 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3135 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3138 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3140 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3141 monitor thread created
3143 # disable bfd on p0.
3144 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3146 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3147 monitor thread terminated
3149 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3152 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3154 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3155 monitor thread created
3157 # disable cfm on p0.
3158 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3160 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3161 monitor thread terminated
3163 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3165 # enable both bfd and cfm on p0.
3166 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3168 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3169 monitor thread created
3171 # disable bfd on p0.
3172 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3173 # check log, there should not be the log of thread terminated.
3174 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3176 # reenable bfd on p0.
3177 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3178 # check log, should still be on log of thread created.
3179 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3180 monitor thread created
3182 # disable bfd and cfm together.
3183 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3185 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3186 monitor thread terminated
3192 # this test helps avoid the deadlock between the main thread and monitor thread.
3193 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3196 for i in `seq 1 199`
3198 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])
3204 AT_BANNER([ofproto-dpif - flow translation resource limits])
3206 AT_SETUP([ofproto-dpif - infinite resubmit])
3208 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3209 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3211 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3213 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3216 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3219 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3221 ADD_OF_PORTS([br0], 1)
3222 (for i in `seq 1 64`; do
3224 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3226 echo "in_port=65, actions=local") > flows
3227 AT_CHECK([ovs-ofctl add-flows br0 flows])
3228 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3229 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3231 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3234 AT_SETUP([ofproto-dpif - too many output actions])
3236 ADD_OF_PORTS([br0], 1)
3237 (for i in `seq 1 12`; do
3239 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3241 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3242 AT_CHECK([ovs-ofctl add-flows br0 flows])
3243 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3244 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3247 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3249 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3252 AT_SETUP([ofproto-dpif - stack too deep])
3254 ADD_OF_PORTS([br0], 1)
3255 (for i in `seq 1 12`; do
3257 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3259 push="push:NXM_NX_REG0[[]]"
3260 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3261 AT_CHECK([ovs-ofctl add-flows br0 flows])
3262 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3263 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3265 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])