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([test `wc -l < ofctl_monitor.log` -ge 9])
859 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
860 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
861 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
862 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
863 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
864 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
865 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
866 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
867 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
868 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
869 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
870 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
871 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
872 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
873 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
874 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
875 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
876 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
877 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
878 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
881 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
884 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
887 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'
890 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
891 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
892 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
893 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
894 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
896 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
897 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
899 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)
900 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
902 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)
903 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
905 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)
906 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
908 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)
909 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
911 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)
912 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
914 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)
915 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
917 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)
918 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
921 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
922 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
923 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
924 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)
925 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)
926 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)
927 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)
928 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)
929 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
930 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
931 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
932 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
933 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
934 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
935 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
936 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
937 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
938 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
939 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
940 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
941 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
942 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
943 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
944 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
951 AT_SETUP([ofproto-dpif - ARP modification slow-path])
953 ADD_OF_PORTS([br0], [1], [2])
955 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
956 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'
958 # Input some packets that should follow the arp modification slow-path.
960 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)'
962 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
964 # Check the packets that were output.
965 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
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.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
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.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
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=40:44:44:44:44:41
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.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
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.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
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=40:44:44:44:44:41
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.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
973 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
974 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
980 AT_SETUP([ofproto-dpif - VLAN handling])
982 [set Bridge br0 fail-mode=standalone -- \
983 add-port br0 p1 trunks=10,12 -- \
984 add-port br0 p2 tag=10 -- \
985 add-port br0 p3 tag=12 \
986 other-config:priority-tags=true -- \
987 add-port br0 p4 tag=12 -- \
988 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
989 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
990 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
991 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
992 other-config:priority-tags=true -- \
993 set Interface p1 type=dummy -- \
994 set Interface p2 type=dummy -- \
995 set Interface p3 type=dummy -- \
996 set Interface p4 type=dummy -- \
997 set Interface p5 type=dummy -- \
998 set Interface p6 type=dummy -- \
999 set Interface p7 type=dummy -- \
1000 set Interface p8 type=dummy --])
1002 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1003 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1009 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1010 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1013 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1014 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1018 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1019 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1022 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1023 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1024 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1025 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1026 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1033 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1034 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1035 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1042 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1043 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1044 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1051 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1052 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1053 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1054 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1055 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1058 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1059 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1060 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1061 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1062 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1063 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1064 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1067 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1068 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1069 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1070 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1071 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1072 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1073 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1076 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1077 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1078 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1079 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1080 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1081 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1082 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1085 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1086 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1094 if test $vlan = none; then
1095 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1097 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))"
1100 echo "----------------------------------------------------------------------"
1101 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1103 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1104 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1106 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1108 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1114 AT_SETUP([ofproto-dpif - fragment handling])
1116 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1117 AT_DATA([flows.txt], [dnl
1118 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1119 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1120 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1121 priority=50 tcp ip_frag=no actions=output:4
1122 priority=50 tcp ip_frag=first actions=output:5
1123 priority=50 tcp ip_frag=later actions=output:6
1125 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1127 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"
1128 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1129 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1130 later_flow="$base_flow,frag=later)"
1132 # mode no first later
1135 'drop 1 drop drop' \
1144 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1145 for type in no first later; do
1146 eval flow=\$${type}_flow exp_output=\$$type
1147 printf "\n%s\n" "----$mode $type-----"
1148 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1150 if test $mode = drop && test $type != no; then
1151 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1153 echo "Datapath actions: $exp_output" >> expout
1154 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1160 AT_SETUP([ofproto-dpif - exit])
1162 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1163 AT_DATA([flows.txt], [dnl
1164 in_port=1 actions=output:10,exit,output:11
1165 in_port=2 actions=output:12,resubmit:1,output:12
1166 in_port=3 actions=output:13,resubmit:2,output:14
1168 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1169 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])
1170 AT_CHECK([tail -1 stdout], [0],
1171 [Datapath actions: 10
1173 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])
1174 AT_CHECK([tail -1 stdout], [0],
1175 [Datapath actions: 12,10
1177 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])
1178 AT_CHECK([tail -1 stdout], [0],
1179 [Datapath actions: 13,12,10
1185 AT_SETUP([ofproto-dpif - mirroring, select_all])
1187 ADD_OF_PORTS([br0], 1, 2, 3)
1189 set Bridge br0 mirrors=@m --\
1190 --id=@p3 get Port p3 --\
1191 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1193 AT_DATA([flows.txt], [dnl
1194 in_port=1 actions=output:2
1195 in_port=2 actions=output:1
1197 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1199 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)"
1200 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1201 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1202 [Datapath actions: 2,3
1205 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)"
1206 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1207 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1208 [Datapath actions: 1,3
1215 AT_SETUP([ofproto-dpif - mirroring, select_src])
1217 ADD_OF_PORTS([br0], 1, 2, 3)
1219 set Bridge br0 mirrors=@m --\
1220 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1221 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1223 AT_DATA([flows.txt], [dnl
1224 in_port=1 actions=output:2
1225 in_port=2 actions=output:1
1227 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1229 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)"
1230 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1231 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1232 [Datapath actions: 2,3
1235 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)"
1236 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1237 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1238 [Datapath actions: 1
1243 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1245 ADD_OF_PORTS([br0], 1, 2)
1247 set Bridge br0 mirrors=@m --\
1248 --id=@p2 get Port p2 --\
1249 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1251 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1253 # "in_port" defaults to OFPP_NONE if it's not specified.
1254 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"
1255 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1256 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1257 [Datapath actions: 1,2
1264 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1266 ADD_OF_PORTS([br0], 1, 2, 3)
1268 set Bridge br0 mirrors=@m --\
1269 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1270 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1272 AT_DATA([flows.txt], [dnl
1273 in_port=1 actions=output:2
1274 in_port=2 actions=output:1
1276 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1278 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)"
1279 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1280 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1281 [Datapath actions: 2,3
1284 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)"
1285 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1286 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1287 [Datapath actions: 1
1294 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1296 ADD_OF_PORTS([br0], 1, 2, 3)
1298 set Bridge br0 mirrors=@m --\
1299 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1300 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1302 AT_DATA([flows.txt], [dnl
1303 in_port=1, actions=output:2
1305 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1307 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)"
1308 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1309 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1310 [Datapath actions: 2
1313 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))"
1314 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1315 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1316 [Datapath actions: 2
1319 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))"
1320 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1321 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1322 [Datapath actions: 2,3
1329 AT_SETUP([ofproto-dpif - mirroring, output_port])
1331 ADD_OF_PORTS([br0], 1, 2, 3)
1333 set Bridge br0 mirrors=@m --\
1334 --id=@p3 get Port p3 --\
1335 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1337 AT_DATA([flows.txt], [dnl
1338 in_port=1 actions=mod_vlan_vid:17,output:2
1339 in_port=2 actions=output:1
1341 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1343 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)"
1344 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1345 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1346 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1349 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)"
1350 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1351 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1352 [Datapath actions: 1,3
1358 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1360 ADD_OF_PORTS([br0], 1, 2)
1362 set Bridge br0 mirrors=@m --\
1363 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1365 AT_DATA([flows.txt], [dnl
1366 in_port=1 actions=output:2
1367 in_port=2 actions=mod_vlan_vid:17,output:1
1369 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1371 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)"
1372 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1373 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1375 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1376 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1378 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1380 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)"
1381 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1382 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1384 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1385 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1387 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1392 # Two testcases below are for the ofproto/trace command
1393 # The first one tests all correct syntax:
1394 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1395 # ofproto/trace br_name br_flow [-generate|packet]
1396 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1397 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1398 ADD_OF_PORTS([br0], 1, 2, 3)
1400 AT_DATA([flows.txt], [dnl
1401 in_port=1 actions=output:2
1402 in_port=2 actions=output:1
1404 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1406 odp_flow="in_port(p1)"
1408 # Test command: ofproto/trace odp_flow with in_port as a name.
1409 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1410 AT_CHECK([tail -1 stdout], [0], [dnl
1414 odp_flow="in_port(1)"
1415 # Test command: ofproto/trace odp_flow
1416 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1417 AT_CHECK([tail -1 stdout], [0], [dnl
1421 # Test command: ofproto/trace dp_name odp_flow
1422 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1423 AT_CHECK([tail -1 stdout], [0], [dnl
1426 # Test commmand: ofproto/trace br_name br_flow
1427 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1428 AT_CHECK([tail -1 stdout], [0], [dnl
1432 # Delete the inserted flows
1433 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1434 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1436 # This section beflow tests the [-generate] option
1437 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1438 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"
1440 # Test command: ofproto/trace odp_flow
1441 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1442 # Check for no MAC learning entry
1443 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1447 # Test command: ofproto/trace br_name br_flow
1448 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1449 # Check for no MAC learning entry
1450 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1454 # Test command: ofproto/trace odp_flow -generate
1455 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1456 # Check for the MAC learning entry
1457 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1459 3 0 50:54:00:00:00:05 ?
1462 # Test command: ofproto/trace dp_name odp_flow -generate
1463 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1464 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1465 -generate], [0], [stdout])
1466 # Check for both MAC learning entries
1467 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1469 3 0 50:54:00:00:00:05 ?
1470 1 0 50:54:00:00:00:06 ?
1473 # Test command: ofproto/trace br_name br_flow -generate
1474 AT_CHECK([ovs-appctl ofproto/trace br0 \
1475 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1476 -generate], [0], [stdout])
1477 # Check for both MAC learning entries.
1478 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1480 3 0 50:54:00:00:00:05 ?
1481 1 0 50:54:00:00:00:06 ?
1482 2 0 50:54:00:00:00:07 ?
1485 # This section beflow tests the [packet] option
1486 # The ovs-tcpundump of packets between port1 and port2
1487 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1488 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1490 # Construct the MAC learning table
1491 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1492 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1493 -generate], [0], [stdout])
1495 # Construct the MAC learning table
1496 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1497 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1498 -generate], [0], [stdout])
1500 # Test command: ofproto/trace odp_flow packet
1501 AT_CHECK([ovs-appctl ofproto/trace \
1502 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1503 AT_CHECK([tail -1 stdout], [0], [dnl
1506 AT_CHECK([head -n 2 stdout], [0], [dnl
1508 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
1511 # Test command: ofproto/trace dp_name odp_flow packet
1512 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1513 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1514 AT_CHECK([tail -1 stdout], [0], [dnl
1517 AT_CHECK([head -n 2 stdout], [0], [dnl
1519 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
1522 # Test command: ofproto/trace br_name br_flow packet
1523 AT_CHECK([ovs-appctl ofproto/trace br0 \
1524 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1525 AT_CHECK([tail -1 stdout], [0], [dnl
1528 AT_CHECK([head -n 2 stdout], [0], [dnl
1530 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
1536 # The second test tests the corner cases
1537 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1539 ADD_OF_PORTS([br0], 1, 2)
1542 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1543 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1545 generate="-generate"
1546 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1548 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1554 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1556 AT_CHECK([tail -2 stderr], [0], [dnl
1557 Cannot find the datapath
1558 ovs-appctl: ovs-vswitchd: server returned an error
1561 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1567 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1569 AT_CHECK([tail -2 stderr], [0], [dnl
1570 Cannot find the datapath
1571 ovs-appctl: ovs-vswitchd: server returned an error
1574 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1580 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1582 AT_CHECK([tail -2 stderr], [0], [dnl
1583 Cannot find the datapath
1584 ovs-appctl: ovs-vswitchd: server returned an error
1587 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1593 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1595 AT_CHECK([tail -2 stderr], [0], [dnl
1596 Cannot find the datapath
1597 ovs-appctl: ovs-vswitchd: server returned an error
1600 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1606 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1608 AT_CHECK([tail -2 stderr], [0], [dnl
1610 ovs-appctl: ovs-vswitchd: server returned an error
1613 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1619 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1621 AT_CHECK([tail -2 stderr], [0], [dnl
1622 Must specify bridge name
1623 ovs-appctl: ovs-vswitchd: server returned an error
1626 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1627 AT_CHECK([ovs-appctl ofproto/trace \
1628 ovs-dummy "$odp_flow" garbage_option],
1629 [2], [stdout],[stderr])
1630 AT_CHECK([tail -2 stderr], [0], [dnl
1631 Trailing garbage in packet data
1632 ovs-appctl: ovs-vswitchd: server returned an error
1635 # Test incorrect command: ofproto/trace with 4 arguments
1636 AT_CHECK([ovs-appctl ofproto/trace \
1637 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1638 AT_CHECK([tail -2 stderr], [0], [dnl
1639 "ofproto/trace" command takes at most 3 arguments
1640 ovs-appctl: ovs-vswitchd: server returned an error
1643 # Test incorrect command: ofproto/trace with 0 argument
1644 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1645 AT_CHECK([tail -2 stderr], [0], [dnl
1646 "ofproto/trace" command requires at least 1 arguments
1647 ovs-appctl: ovs-vswitchd: server returned an error
1653 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
1655 ADD_OF_PORTS([br0], 1, 2, 3)
1657 AT_DATA([flows.txt], [dnl
1658 in_port=1 actions=output:2
1659 in_port=2 actions=output:1
1661 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1663 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
1664 AT_CHECK([tail -1 stdout], [0], [dnl
1665 Datapath actions: push_vlan(vid=123,pcp=0),2
1672 m4_define([OFPROTO_TRACE],
1674 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1675 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1677 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1680 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1683 AT_SETUP([ofproto-dpif - MAC learning])
1684 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1685 ADD_OF_PORTS([br0], 1, 2, 3)
1687 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)'
1689 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1692 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1696 # Check for the MAC learning entry.
1697 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1699 3 0 50:54:00:00:00:05 ?
1702 # Trace a packet arrival destined for the learned MAC.
1703 # (This will also learn a MAC.)
1706 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1710 # Check for both MAC learning entries.
1711 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1713 3 0 50:54:00:00:00:05 ?
1714 1 0 50:54:00:00:00:06 ?
1717 # Trace a packet arrival that updates the first learned MAC entry.
1720 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1724 # Check that the MAC learning entry was updated.
1725 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1727 1 0 50:54:00:00:00:06 ?
1728 2 0 50:54:00:00:00:05 ?
1731 # Add another bridge.
1735 -- set bridge br1 datapath-type=dummy])
1736 ADD_OF_PORTS([br1], 4, 5)
1738 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1741 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1746 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1750 # Check that the MAC learning entries were added.
1751 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1753 4 0 50:54:00:00:00:06 ?
1754 5 0 50:54:00:00:00:07 ?
1757 # Delete port p1 and see that its MAC learning entry disappeared, and
1758 # that the MAC learning entry for the same MAC was also deleted from br1.
1759 AT_CHECK([ovs-vsctl del-port p1])
1760 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1762 2 0 50:54:00:00:00:05 ?
1764 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1766 5 0 50:54:00:00:00:07 ?
1772 AT_SETUP([ofproto-dpif - MAC table overflow])
1774 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1775 ADD_OF_PORTS([br0], 1, 2, 3)
1777 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)'
1779 AT_CHECK([ovs-appctl time/stop])
1781 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1782 for i in 0 1 2 3 4 5 6 7 8 9; do
1785 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1788 ovs-appctl time/warp 1000
1791 # Check for the MAC learning entries.
1792 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1794 3 0 50:54:00:00:00:00
1795 3 0 50:54:00:00:00:01
1796 3 0 50:54:00:00:00:02
1797 3 0 50:54:00:00:00:03
1798 3 0 50:54:00:00:00:04
1799 3 0 50:54:00:00:00:05
1800 3 0 50:54:00:00:00:06
1801 3 0 50:54:00:00:00:07
1802 3 0 50:54:00:00:00:08
1803 3 0 50:54:00:00:00:09
1807 # Trace another ARP packet on another MAC.
1810 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1814 # Check that the new one chased the oldest one out of the table.
1815 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1817 3 0 50:54:00:00:00:01 ?
1818 3 0 50:54:00:00:00:02 ?
1819 3 0 50:54:00:00:00:03 ?
1820 3 0 50:54:00:00:00:04 ?
1821 3 0 50:54:00:00:00:05 ?
1822 3 0 50:54:00:00:00:06 ?
1823 3 0 50:54:00:00:00:07 ?
1824 3 0 50:54:00:00:00:08 ?
1825 3 0 50:54:00:00:00:09 ?
1826 3 0 50:54:00:00:00:10 ?
1832 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
1834 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
1836 # IP_VERSION_TYPE is used in AT_SETUP
1837 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
1838 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
1839 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1841 ON_EXIT([kill `cat test-sflow.pid`])
1842 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
1843 AT_CAPTURE_FILE([sflow.log])
1844 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1845 ovs-appctl time/stop
1847 ADD_OF_PORTS([br0], 1, 2)
1849 set Interface br0 options:ifindex=1002 -- \
1850 set Interface p1 options:ifindex=1004 -- \
1851 set Interface p2 options:ifindex=1003 -- \
1852 set Bridge br0 sflow=@sf -- \
1853 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
1854 header=128 sampling=1 polling=1 agent=lo
1856 dnl open with ARP packets to seed the bridge-learning. The output
1857 dnl ifIndex numbers should be reported predictably after that.
1858 dnl Since we set sampling=1 we should see all of these packets
1859 dnl reported. Sorting the output by data-source and seqNo makes
1860 dnl it deterministic. Ensuring that we send at least two packets
1861 dnl into each port means we get to check the seq nos are
1862 dnl incrementing correctly.
1863 dnl because packets from different ports can be handled by separate
1864 dnl threads, put some sleeps
1866 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)'
1868 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)'
1870 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)'
1872 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)'
1873 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)'
1875 dnl sleep long enough to get more than one counter sample
1876 dnl from each datasource so we can check sequence numbers
1877 for i in `seq 1 30`; do
1878 ovs-appctl time/warp 100
1881 ovs-appctl -t test-sflow exit
1883 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1904 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
1924 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
1944 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
1964 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
1984 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
1987 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
2001 in_broadcasts=4294967295
2004 in_unknownprotos=4294967295
2007 out_multicasts=4294967295
2008 out_broadcasts=4294967295
2024 in_broadcasts=4294967295
2027 in_unknownprotos=4294967295
2030 out_multicasts=4294967295
2031 out_broadcasts=4294967295
2047 in_broadcasts=4294967295
2050 in_unknownprotos=4294967295
2053 out_multicasts=4294967295
2054 out_broadcasts=4294967295
2070 in_broadcasts=4294967295
2073 in_unknownprotos=4294967295
2076 out_multicasts=4294967295
2077 out_broadcasts=4294967295
2093 in_broadcasts=4294967295
2096 in_unknownprotos=4294967295
2099 out_multicasts=4294967295
2100 out_broadcasts=4294967295
2116 in_broadcasts=4294967295
2119 in_unknownprotos=4294967295
2122 out_multicasts=4294967295
2123 out_broadcasts=4294967295
2130 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
2131 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
2133 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2135 # Test that basic NetFlow reports flow statistics correctly:
2136 # The initial packet of a flow are correctly accounted.
2137 # Later packets within a flow are correctly accounted.
2138 # Flow actions changing (in this case, due to MAC learning)
2139 # cause a record to be sent.
2141 # IP_VERSION_TYPE is used in AT_SETUP
2142 m4_define([CHECK_NETFLOW_EXPIRATION],
2143 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
2144 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2145 ADD_OF_PORTS([br0], 1, 2)
2147 ovs-appctl time/stop
2148 ON_EXIT([kill `cat test-netflow.pid`])
2149 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2150 AT_CAPTURE_FILE([netflow.log])
2151 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2154 set Bridge br0 netflow=@nf -- \
2155 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2156 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2158 for delay in 1000 30000; do
2159 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)'
2160 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)'
2162 ovs-appctl time/warp $delay
2165 ovs-appctl time/warp 6000
2168 ovs-appctl -t test-netflow exit
2170 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])
2172 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])
2174 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
2175 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
2176 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
2180 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
2181 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
2183 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
2185 # Test that basic NetFlow reports active expirations correctly.
2187 # IP_VERSION_TYPE is used in AT_SETUP
2188 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
2189 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
2191 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2192 ADD_OF_PORTS([br0], 1, 2)
2194 ON_EXIT([kill `cat test-netflow.pid`])
2195 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2196 AT_CAPTURE_FILE([netflow.log])
2197 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2200 set Bridge br0 netflow=@nf -- \
2201 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2202 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2204 AT_CHECK([ovs-appctl time/stop])
2206 while test $n -le 60; do
2209 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)'
2210 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)'
2212 ovs-appctl time/warp 1000
2215 ovs-appctl time/warp 10000
2219 ovs-appctl -t test-netflow exit
2221 # Count the number of reported packets:
2222 # - From source to destination before MAC learning kicks in (just one).
2223 # - From source to destination after that.
2224 # - From destination to source.
2232 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2239 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2242 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2245 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2252 eval $counter=\`expr \$$counter + \$pkts\`
2253 n_recs=`expr $n_recs + 1`
2256 # There should be exactly 1 MAC learning packet,
2257 # exactly 59 other packets in that direction,
2258 # and exactly 60 packets in the other direction.
2259 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2264 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
2265 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
2267 AT_SETUP([idle_age and hard_age increase over time])
2270 # get_ages DURATION HARD IDLE
2272 # Fetch the flow duration, hard age, and idle age into the variables
2273 # whose names are given as arguments. Rounds DURATION down to the
2274 # nearest integer. If hard_age doesn't appear in the output, sets
2275 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2278 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2280 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2281 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2282 AS_VAR_COPY([$1], [duration])
2284 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2285 if test X"$hard" = X; then
2288 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2290 AS_VAR_COPY([$2], [hard])
2292 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2293 if test X"$idle" = X; then
2296 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2298 AS_VAR_COPY([$3], [idle])
2301 # Add a flow and get its initial hard and idle age.
2302 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2303 get_ages duration1 hard1 idle1
2305 ovs-appctl time/stop
2306 # Warp time forward by 10 seconds, then modify the flow's actions.
2307 ovs-appctl time/warp 10000
2308 get_ages duration2 hard2 idle2
2309 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2311 # Warp time forward by 10 seconds.
2312 ovs-appctl time/warp 10000
2313 get_ages duration3 hard3 idle3
2315 # Warp time forward 10 more seconds, then pass some packets through the flow,
2316 # then warp forward a few more times because idle times are only updated
2318 ovs-appctl time/warp 10000
2319 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)'
2320 ovs-appctl time/warp 1000
2321 ovs-appctl time/warp 1000
2322 ovs-appctl time/warp 1000
2323 get_ages duration4 hard4 idle4
2325 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2326 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2327 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2329 # Duration should increase steadily over time.
2330 AT_CHECK([test $duration1 -lt $duration2])
2331 AT_CHECK([test $duration2 -lt $duration3])
2332 AT_CHECK([test $duration3 -lt $duration4])
2334 # Hard age should be "none" initially because it's the same as flow_duration,
2335 # then it should increase.
2336 AT_CHECK([test $hard1 = none])
2337 AT_CHECK([test $hard2 = none])
2338 AT_CHECK([test $hard3 != none])
2339 AT_CHECK([test $hard4 != none])
2340 AT_CHECK([test $hard3 -lt $hard4])
2342 # Idle age should increase from 1 to 2 to 3, then decrease.
2343 AT_CHECK([test $idle1 -lt $idle2])
2344 AT_CHECK([test $idle2 -lt $idle3])
2345 AT_CHECK([test $idle3 -gt $idle4])
2347 # Check some invariant relationships.
2348 AT_CHECK([test $duration1 = $idle1])
2349 AT_CHECK([test $duration2 = $idle2])
2350 AT_CHECK([test $duration3 = $idle3])
2351 AT_CHECK([test $idle3 -gt $hard3])
2352 AT_CHECK([test $idle4 -lt $hard4])
2353 AT_CHECK([test $hard4 -lt $duration4])
2358 AT_SETUP([ofproto-dpif - fin_timeout])
2360 AT_DATA([flows.txt], [dnl
2361 in_port=1 actions=output:2
2362 in_port=2 actions=mod_vlan_vid:17,output:1
2364 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2365 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2367 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2370 ovs-appctl time/stop
2371 # Check that a TCP SYN packet does not change the timeout. (Because
2372 # flow stats updates are mainly what implements the fin_timeout
2373 # feature, we warp forward a couple of times to ensure that flow stats
2374 # run before re-checking the flow table.)
2375 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2376 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2379 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2381 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2383 # Check that a TCP FIN packet does change the timeout.
2384 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2385 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2388 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2390 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2395 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2396 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2397 ADD_OF_PORTS([br0], [1], [2])
2398 ADD_OF_PORTS([br1], [3])
2400 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2407 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2408 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2409 ADD_OF_PORTS([br0], [1], [2])
2410 ADD_OF_PORTS([br1], [3])
2412 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2413 dummy@ovs-dummy: hit:0 missed:0
2415 br0 65534/100: (dummy)
2419 br1 65534/101: (dummy)
2425 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2426 OVS_VSWITCHD_START([add-br br1 -- \
2427 set bridge br1 datapath-type=dummy fail-mode=secure])
2428 ADD_OF_PORTS([br0], [1], [2])
2429 ADD_OF_PORTS([br1], [3])
2431 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)'])
2432 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)'])
2433 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)'])
2435 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2436 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))
2437 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))
2440 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2441 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))
2444 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
2445 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))
2446 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))
2449 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
2450 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))
2456 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
2457 OVS_VSWITCHD_START([dnl
2458 add-port br0 p1 -- set Interface p1 type=dummy
2460 ON_EXIT([kill `cat ovs-ofctl.pid`])
2462 AT_CAPTURE_FILE([ofctl_monitor.log])
2463 AT_DATA([flows.txt], [dnl
2464 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2465 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2467 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2469 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
2470 dnl a packet with 4 MPLS LSEs but userspace and the datapath can only handle up
2473 dnl The input is a frame with four MPLS labels which tcpdump -vve shows as:
2474 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)
2475 dnl (label 20, exp 0, ttl 32)
2476 dnl (label 20, exp 0, ttl 32)
2477 dnl (label 20, exp 0, [S], ttl 32)
2478 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2479 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2481 for dl_src in 00 01; do
2482 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"])
2484 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
2485 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
2493 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
2494 OVS_VSWITCHD_START([dnl
2495 add-port br0 p1 -- set Interface p1 type=dummy
2497 ON_EXIT([kill `cat ovs-ofctl.pid`])
2499 AT_CAPTURE_FILE([ofctl_monitor.log])
2500 AT_DATA([flows.txt], [dnl
2501 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
2502 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
2504 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2506 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
2507 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
2508 dnl can't determine the resulting MPLS label after an MPLS PUSH action.
2510 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
2511 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)
2512 dnl (label 20, exp 0, ttl 32)
2513 dnl (label 20, exp 0, ttl 32)
2514 dnl (label 20, exp 0, [S], ttl 32)
2515 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
2516 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2517 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'])
2519 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2520 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
2526 AT_SETUP([ofproto-dpif - patch ports])
2527 OVS_VSWITCHD_START([add-br br1 \
2528 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2529 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2530 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2532 ADD_OF_PORTS([br0], [2])
2533 ADD_OF_PORTS([br1], [3])
2535 AT_CHECK([ovs-appctl time/stop])
2537 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2538 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2540 for i in $(seq 1 10); do
2541 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)'
2544 for i in $(seq 1 5); do
2545 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)'
2548 AT_CHECK([ovs-appctl time/warp 500], [0],
2552 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2553 dummy@ovs-dummy: hit:13 missed:2
2555 br0 65534/100: (dummy)
2557 pbr0 1/none: (patch: peer=pbr1)
2559 br1 65534/101: (dummy)
2561 pbr1 1/none: (patch: peer=pbr0)
2564 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2565 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
2567 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2568 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
2571 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2572 OFPST_PORT reply (xid=0x4): 1 ports
2573 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2574 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2577 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2578 OFPST_PORT reply (xid=0x4): 1 ports
2579 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2580 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2586 AT_SETUP([ofproto-dpif - port duration])
2587 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2588 ADD_OF_PORTS([br0], 1, 2)
2590 ovs-appctl time/stop
2591 ovs-appctl time/warp 10000
2593 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2594 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
2603 dnl ----------------------------------------------------------------------
2604 AT_BANNER([ofproto-dpif -- megaflows])
2606 AT_SETUP([ofproto-dpif megaflow - port classification])
2608 ADD_OF_PORTS([br0], [1], [2])
2609 AT_DATA([flows.txt], [dnl
2610 table=0 in_port=1 actions=output(2)
2612 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2613 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)'])
2614 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)'])
2616 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2617 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>
2622 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2624 ADD_OF_PORTS([br0], [1], [2])
2625 AT_DATA([flows.txt], [dnl
2626 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2628 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2629 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)'])
2630 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)'])
2632 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2633 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>
2634 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>
2639 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2641 ADD_OF_PORTS([br0], [1], [2])
2642 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], [])
2643 AT_DATA([flows.txt], [dnl
2644 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2646 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2647 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)'])
2648 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)'])
2650 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2651 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>
2652 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>
2657 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
2659 ADD_OF_PORTS([br0], [1], [2])
2660 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], [])
2661 AT_DATA([flows.txt], [dnl
2662 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
2664 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2665 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)'])
2666 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)'])
2668 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2669 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>
2670 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>
2675 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2677 ADD_OF_PORTS([br0], [1], [2])
2678 AT_DATA([flows.txt], [dnl
2679 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2681 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2682 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)'])
2683 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)'])
2684 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2685 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>
2690 AT_SETUP([ofproto-dpif megaflow - normal])
2692 ADD_OF_PORTS([br0], [1], [2])
2693 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2694 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)'])
2695 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)'])
2697 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2698 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>
2699 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>
2704 AT_SETUP([ofproto-dpif megaflow - mpls])
2706 ADD_OF_PORTS([br0], [1], [2])
2707 AT_DATA([flows.txt], [dnl
2708 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2709 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2711 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2712 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)'])
2713 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)'])
2715 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2716 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>
2717 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>
2722 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
2724 # IP_VERSION_TYPE is used in AT_SETUP
2725 m4_define([CHECK_MEGAFLOW_NETFLOW],
2726 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
2728 ADD_OF_PORTS([br0], [1], [2])
2730 dnl NetFlow configuration disables wildcarding relevant fields
2731 ON_EXIT([kill `cat test-netflow.pid`])
2732 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
2733 AT_CAPTURE_FILE([netflow.log])
2734 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2736 set Bridge br0 netflow=@nf -- \
2737 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
2738 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2740 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2741 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)'])
2742 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/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>
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/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>
2751 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
2752 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
2754 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2756 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2757 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2758 set interface p2 type=dummy ofport_request=2 -- \
2759 set interface p3 type=dummy ofport_request=3])
2760 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2763 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2764 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)'])
2765 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)'])
2767 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2768 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>
2769 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>
2774 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2776 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2777 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2778 set interface p2 type=dummy ofport_request=2 -- \
2779 set interface p3 type=dummy ofport_request=3])
2780 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2783 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2784 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)'])
2785 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)'])
2787 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2788 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>
2789 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>
2794 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2795 # Create bond0 on br0 with interfaces p0 and p1
2796 # and bond1 on br1 with interfaces p2 and p3
2797 # with p0 patched to p2 and p1 patched to p3.
2799 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2800 other-config:lacp-time=fast \
2801 other-config:bond-rebalance-interval=0 -- \
2802 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2803 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2805 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2806 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2807 fail-mode=secure -- \
2808 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2809 other-config:lacp-time=fast \
2810 other-config:bond-rebalance-interval=0 -- \
2811 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2812 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2814 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2816 ADD_OF_PORTS([br0], [7])
2817 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2818 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2819 ovs-appctl time/stop
2820 ovs-appctl time/warp 5000
2821 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)'])
2822 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)'])
2824 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2825 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>
2826 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>
2831 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2833 ADD_OF_PORTS([br0], [1], [2])
2834 AT_DATA([flows.txt], [dnl
2835 table=0 in_port=1,ip actions=resubmit(90)
2836 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2838 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2839 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)'])
2840 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)'])
2842 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2843 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>
2844 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>
2849 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2851 ADD_OF_PORTS([br0], [1], [2])
2852 AT_DATA([flows.txt], [dnl
2853 table=0 in_port=1,ip actions=resubmit(,1)
2854 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2856 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2857 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)'])
2858 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=
2859 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2861 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2862 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>
2863 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>
2868 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2870 ADD_OF_PORTS([br0], [1], [2])
2871 AT_DATA([flows.txt], [dnl
2872 table=0 in_port=1,ip actions=goto_table(1)
2873 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2875 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2876 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)'])
2877 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)'])
2879 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2880 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>
2881 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>
2886 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2888 ADD_OF_PORTS([br0], [1], [2], [3])
2890 set Bridge br0 mirrors=@m --\
2891 --id=@p3 get Port p3 --\
2892 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2894 AT_DATA([flows.txt], [dnl
2895 in_port=1 actions=output:2
2897 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2898 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)'])
2899 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)'])
2901 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2902 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>
2907 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2909 ADD_OF_PORTS([br0], [1], [2], [3])
2911 set Bridge br0 mirrors=@m --\
2912 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2913 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2915 AT_DATA([flows.txt], [dnl
2916 in_port=1 actions=output:2
2918 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2919 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))'])
2920 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)'])
2922 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2923 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>
2924 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>
2929 AT_SETUP([ofproto-dpif megaflow - move action])
2931 ADD_OF_PORTS([br0], [1], [2])
2932 AT_DATA([flows.txt], [dnl
2933 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2934 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2935 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2937 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2938 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)'])
2939 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)'])
2941 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2942 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>
2943 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>
2948 AT_SETUP([ofproto-dpif megaflow - push action])
2950 ADD_OF_PORTS([br0], [1], [2])
2951 AT_DATA([flows.txt], [dnl
2952 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2954 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2955 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)'])
2956 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)'])
2958 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2959 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>
2960 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>
2965 AT_SETUP([ofproto-dpif megaflow - learning])
2967 ADD_OF_PORTS([br0], [1], [2])
2968 AT_DATA([flows.txt], [dnl
2969 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
2971 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2972 ovs-appctl time/stop
2973 # We send each packet twice because the first packet in each flow causes the
2974 # flow table to change and thus revalidations, which (depending on timing)
2975 # can keep a megaflow from being installed. The revalidations are done by
2976 # the second iteration, allowing the flows to be installed.
2978 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)'])
2979 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)'])
2980 ovs-appctl time/warp 100
2983 dnl The original flow is missing due to a revalidation.
2984 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2985 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>
2986 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>
2991 AT_SETUP([ofproto-dpif megaflow - tunnels])
2993 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
2994 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
2995 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
2996 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
2998 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
2999 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
3000 ofport_request=4 options:key=flow])
3001 AT_DATA([flows.txt], [dnl
3002 in_port=1,actions=output(2)
3003 in_port=3,actions=output(4)
3005 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3006 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
3007 dnl will cause the packet to be dropped.
3008 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)'])
3009 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)'])
3010 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)'])
3011 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)'])
3013 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3014 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>
3015 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>
3016 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>
3021 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
3023 ADD_OF_PORTS([br0], [1], [2])
3024 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], [])
3025 AT_DATA([flows.txt], [dnl
3026 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
3028 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3029 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)'])
3030 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)'])
3032 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3033 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>
3034 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>
3039 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
3041 ADD_OF_PORTS([br0], [1], [2])
3042 AT_DATA([flows.txt], [dnl
3043 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
3045 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3046 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)'])
3047 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)'])
3049 dnl The megaflows do not match the same fields, since the first packet
3050 dnl is essentially a no-op. (The new destination MAC is the same as the
3051 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
3052 dnl so that a packet that doesn't need its MAC address changed doesn't
3053 dnl hide one that does. Since the first entry doesn't need to change,
3054 dnl only the destination MAC address is matched (as decided by
3055 dnl ofproto-dpif). The second entry actually updates the destination
3056 dnl MAC, so both the source and destination MAC addresses are
3057 dnl un-wildcarded, since the ODP commit functions update both the source
3058 dnl and destination MAC addresses.
3059 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3060 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
3061 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
3066 AT_SETUP([ofproto-dpif megaflow - disabled])
3068 ADD_OF_PORTS([br0], [1], [2])
3069 AT_DATA([flows.txt], [dnl
3070 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
3071 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
3073 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
3075 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
3076 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3077 for i in 1 2 3 4; do
3078 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)'])
3079 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)'])
3082 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3083 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
3084 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
3089 AT_SETUP([ofproto-dpif - datapath port number change])
3090 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3091 ADD_OF_PORTS([br0], 1)
3093 # Trace a flow that should output to p1.
3094 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3096 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
3099 # Change p1's port number to 5.
3100 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
3102 # Trace a flow that should output to p1 in its new location.
3103 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
3105 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
3110 # Tests the bundling with various bfd and cfm configurations.
3111 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
3112 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
3113 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
3114 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
3115 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
3116 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
3117 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
3118 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
3119 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
3120 set Interface p0 cfm_mpid=1 -- \
3121 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
3123 ovs-appctl time/stop
3124 # advance the clock to stablize everything.
3125 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3126 # cfm/show should show 'recv' fault.
3127 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3130 # bfd/show should show 'up'.
3131 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3132 Local Session State: up
3133 Remote Session State: up
3134 Local Session State: up
3135 Remote Session State: up
3137 # bond/show should show 'may-enable: true' for all slaves.
3138 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3145 # now disable the bfd on p1.
3146 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3147 # advance the clock to stablize everything.
3148 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3149 # cfm/show should show 'recv' fault.
3150 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3153 # bfd/show should show 'down'.
3154 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3155 Local Session State: down
3156 Remote Session State: down
3158 # bond/show should show 'may-enable: false' for p0.
3159 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3164 # now enable the bfd on p1 and disable bfd on p0.
3165 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3166 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3167 # advance the clock to stablize everything.
3168 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3169 # cfm/show should show 'recv' fault.
3170 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3173 # bfd/show should show 'down'.
3174 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3175 Local Session State: down
3176 Remote Session State: down
3178 # bond/show should show 'may-enable: false' for p0 and p1.
3179 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3189 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3190 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3193 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3195 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3196 monitor thread created
3198 # disable bfd on p0.
3199 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3201 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3202 monitor thread terminated
3204 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3207 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3209 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3210 monitor thread created
3212 # disable cfm on p0.
3213 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3215 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3216 monitor thread terminated
3218 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3220 # enable both bfd and cfm on p0.
3221 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3223 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3224 monitor thread created
3226 # disable bfd on p0.
3227 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3228 # check log, there should not be the log of thread terminated.
3229 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3231 # reenable bfd on p0.
3232 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3233 # check log, should still be on log of thread created.
3234 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3235 monitor thread created
3237 # disable bfd and cfm together.
3238 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3240 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3241 monitor thread terminated
3247 # this test helps avoid the deadlock between the main thread and monitor thread.
3248 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3251 for i in `seq 1 199`
3253 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])
3259 AT_BANNER([ofproto-dpif - flow translation resource limits])
3261 AT_SETUP([ofproto-dpif - infinite resubmit])
3263 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3264 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3266 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3268 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3271 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3274 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3276 ADD_OF_PORTS([br0], 1)
3277 (for i in `seq 1 64`; do
3279 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3281 echo "in_port=65, actions=local") > flows
3282 AT_CHECK([ovs-ofctl add-flows br0 flows])
3283 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3284 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3286 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3289 AT_SETUP([ofproto-dpif - too many output actions])
3291 ADD_OF_PORTS([br0], 1)
3292 (for i in `seq 1 12`; do
3294 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3296 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3297 AT_CHECK([ovs-ofctl add-flows br0 flows])
3298 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3299 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3302 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3304 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3307 AT_SETUP([ofproto-dpif - stack too deep])
3309 ADD_OF_PORTS([br0], 1)
3310 (for i in `seq 1 12`; do
3312 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3314 push="push:NXM_NX_REG0[[]]"
3315 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3316 AT_CHECK([ovs-ofctl add-flows br0 flows])
3317 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3318 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3320 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])