1 AT_BANNER([ofproto-dpif])
3 AT_SETUP([ofproto-dpif - resubmit])
5 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
6 [16], [17], [18], [19], [20], [21])
7 AT_DATA([flows.txt], [dnl
8 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
9 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
10 table=0 in_port=3 priority=2000 icmp actions=output(20)
11 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
12 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
13 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
15 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
16 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])
17 AT_CHECK([tail -1 stdout], [0],
18 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
23 AT_SETUP([ofproto-dpif - goto table])
25 ADD_OF_PORTS([br0], [1], [10], [11])
26 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
27 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
28 echo "table=64 actions=output(11)" >> flows.txt
29 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
30 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])
31 AT_CHECK([tail -1 stdout], [0],
32 [Datapath actions: 10,11
37 AT_SETUP([ofproto-dpif - write actions])
39 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
40 AT_DATA([flows.txt], [dnl
41 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
42 table=1 ip actions=write_actions(output(13)),goto_table(2)
43 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
45 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
46 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])
47 AT_CHECK([tail -1 stdout], [0],
48 [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
53 AT_SETUP([ofproto-dpif - clear actions])
55 ADD_OF_PORTS([br0], [1], [10], [11], [12])
56 AT_DATA([flows.txt], [dnl
57 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
58 table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
60 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
61 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])
62 AT_CHECK([tail -1 stdout], [0],
63 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
68 AT_SETUP([ofproto-dpif - all group in action list])
70 ADD_OF_PORTS([br0], [1], [10], [11])
71 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'])
72 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
73 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])
74 AT_CHECK([tail -1 stdout], [0],
75 [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
80 AT_SETUP([ofproto-dpif - indirect group in action list])
82 ADD_OF_PORTS([br0], [1], [10])
83 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
84 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
85 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])
86 AT_CHECK([tail -1 stdout], [0],
92 AT_SETUP([ofproto-dpif - all group in action set])
94 ADD_OF_PORTS([br0], [1], [10], [11])
95 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'])
96 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
97 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])
98 AT_CHECK([tail -1 stdout], [0],
99 [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
104 AT_SETUP([ofproto-dpif - indirect group in action set])
106 ADD_OF_PORTS([br0], [1], [10])
107 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
108 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
109 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])
110 AT_CHECK([tail -1 stdout], [0],
111 [Datapath actions: 10
116 AT_SETUP([ofproto-dpif - select group])
118 ADD_OF_PORTS([br0], [1], [10], [11])
119 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
120 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
122 # Try a bunch of different flows and make sure that they get distributed
124 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
125 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])
126 tail -1 stdout >> results
128 sort results | uniq -c
129 AT_CHECK([sort results | uniq], [0],
130 [Datapath actions: 10
136 AT_SETUP([ofproto-dpif - select group with watch port])
138 ADD_OF_PORTS([br0], [1], [10], [11])
139 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
140 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
141 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])
142 AT_CHECK([tail -1 stdout], [0],
143 [Datapath actions: 11
148 AT_SETUP([ofproto-dpif - select group with weight])
150 ADD_OF_PORTS([br0], [1], [10], [11], [12])
151 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2,bucket=output:12,weight=0'])
152 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
153 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])
154 AT_CHECK([tail -1 stdout], [0],
155 [Datapath actions: 11
160 AT_SETUP([ofproto-dpif - fast failover group])
162 ADD_OF_PORTS([br0], [1], [10], [11])
163 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'])
164 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
165 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])
166 AT_CHECK([tail -1 stdout], [0],
167 [Datapath actions: drop
172 AT_SETUP([ofproto-dpif - registers])
174 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
175 AT_DATA([flows.txt], [dnl
176 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
177 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
178 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
179 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
181 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
182 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
183 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
184 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
185 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
186 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
187 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
188 in_port=9,reg0=0xdeadbeef actions=output:20
189 in_port=10,reg1=0xdeadbeef actions=output:21
190 in_port=11,reg2=0xeef22dea actions=output:22
192 dnl Sanilty check all registers
193 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
194 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
195 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
196 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
199 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
200 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])
201 AT_CHECK([tail -1 stdout], [0],
202 [Datapath actions: 20,21,22,33
207 AT_SETUP([ofproto-dpif - push-pop])
209 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
210 AT_DATA([flows.txt], [dnl
211 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
212 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
213 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
214 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
215 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
218 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
219 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])
220 AT_CHECK([tail -1 stdout], [0],
221 [Datapath actions: 33,22,21,20
226 AT_SETUP([ofproto-dpif - output])
228 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
229 AT_DATA([flows.txt], [dnl
230 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
231 in_port=2 actions=output:9
232 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
233 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
234 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
235 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
236 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
237 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
239 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
240 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])
241 AT_CHECK([tail -1 stdout], [0],
242 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
247 AT_SETUP([ofproto-dpif - dec_ttl])
249 ADD_OF_PORTS([br0], [1], [2], [3], [4])
250 AT_DATA([flows.txt], [dnl
251 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
252 table=1 in_port=1 action=dec_ttl,output:3
254 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
255 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=2,frag=no)' -generate], [0], [stdout])
256 AT_CHECK([tail -3 stdout], [0],
257 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
258 This flow is handled by the userspace slow path because it:
259 - Sends "packet-in" messages to the OpenFlow controller.
261 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=3,frag=no)'], [0], [stdout])
262 AT_CHECK([tail -1 stdout], [0],
263 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),3,4
265 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])
266 AT_CHECK([tail -1 stdout], [0],
267 [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
270 AT_CAPTURE_FILE([ofctl_monitor.log])
271 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
272 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=2,frag=no)' -generate], [0], [stdout])
273 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
274 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
275 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
276 icmp,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=1,icmp_type=0,icmp_code=0
282 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
284 ADD_OF_PORTS([br0], [1], [2])
286 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
288 # "in_port" defaults to OFPP_NONE if it's not specified.
289 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"
290 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
291 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
300 AT_SETUP([ofproto-dpif - DSCP])
301 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
302 ADD_OF_PORTS([br0], [9])
303 AT_DATA([flows.txt], [dnl
304 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
306 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
307 AT_CHECK([ovs-vsctl -- \
308 set Port p1 qos=@newqos --\
309 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
310 --id=@q1 create Queue dscp=1 --\
311 --id=@q2 create Queue dscp=2], [0], [ignore])
312 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])
313 AT_CHECK([tail -1 stdout], [0],
314 [Datapath actions: dnl
316 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
317 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
319 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
320 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
321 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
327 AT_SETUP([ofproto-dpif - output/flood flags])
329 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
331 AT_DATA([flows.txt], [dnl
332 in_port=local actions=local,flood
333 in_port=1 actions=flood
334 in_port=2 actions=all
335 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
336 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
338 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
339 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
340 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
342 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])
343 AT_CHECK([tail -1 stdout \
344 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
352 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])
353 AT_CHECK([tail -1 stdout \
354 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
362 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])
363 AT_CHECK([tail -1 stdout \
364 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
373 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])
374 AT_CHECK([tail -1 stdout], [0],
375 [Datapath actions: 100,1,2,4,6,7
378 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])
379 AT_CHECK([tail -1 stdout], [0],
380 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
385 AT_SETUP([ofproto-dpif - controller])
386 OVS_VSWITCHD_START([dnl
387 add-port br0 p1 -- set Interface p1 type=dummy
389 ON_EXIT([kill `cat ovs-ofctl.pid`])
391 AT_CAPTURE_FILE([ofctl_monitor.log])
392 AT_DATA([flows.txt], [dnl
393 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
394 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
395 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
397 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
398 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)
399 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)
400 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
401 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)
402 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
403 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
404 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
405 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
406 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
407 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
408 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
409 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
410 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
411 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
412 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
413 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
414 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
415 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
416 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[[]],controller
418 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
421 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
424 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)'
426 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
427 ovs-appctl -t ovs-ofctl exit
429 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
430 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
431 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
433 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
434 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
436 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
437 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
440 dnl Singleton controller action.
441 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
444 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)'
446 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
447 ovs-appctl -t ovs-ofctl exit
449 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
450 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
451 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
453 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
454 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
456 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
457 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
460 dnl Modified controller action.
461 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
464 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)'
466 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
467 ovs-appctl -t ovs-ofctl exit
469 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
470 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
471 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
473 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
474 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
476 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
477 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
480 dnl Modified VLAN controller action.
481 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
484 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=6,tos=0,ttl=64,frag=no)'
486 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
487 ovs-appctl -t ovs-ofctl exit
489 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
490 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
491 tcp,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_tos=0,nw_ecn=0,nw_ttl=64,tcp_flags=0x000 tcp_csum:0
493 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
494 tcp,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_tos=0,nw_ecn=0,nw_ttl=64,tcp_flags=0x000 tcp_csum:0
496 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
497 tcp,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_tos=0,nw_ecn=0,nw_ttl=64,tcp_flags=0x000 tcp_csum:0
500 dnl Modified MPLS controller action.
501 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
504 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=6,tos=0,ttl=64,frag=no)'
506 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
507 ovs-appctl -t ovs-ofctl exit
509 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
510 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
511 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
513 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
514 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
516 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
517 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
520 dnl Modified MPLS controller action.
521 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
524 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=6,tos=0,ttl=64,frag=no)'
526 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
527 ovs-appctl -t ovs-ofctl exit
529 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
530 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
531 tcp,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_tos=0,nw_ecn=0,nw_ttl=64,tcp_flags=0x000 tcp_csum:0
533 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
534 tcp,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_tos=0,nw_ecn=0,nw_ttl=64,tcp_flags=0x000 tcp_csum:0
536 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
537 tcp,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_tos=0,nw_ecn=0,nw_ttl=64,tcp_flags=0x000 tcp_csum:0
540 dnl Modified MPLS controller action.
541 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
543 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)
546 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)'
549 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
550 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
551 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
552 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
554 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
555 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
557 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
558 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
561 dnl Modified MPLS controller action.
562 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
565 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=6,tos=0,ttl=64,frag=no))'
567 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
568 ovs-appctl -t ovs-ofctl exit
570 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
571 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
572 mpls,metadata=0,in_port=0,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
574 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
575 mpls,metadata=0,in_port=0,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
577 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
578 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
581 dnl Modified MPLS controller action.
582 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
585 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=6,tos=0,ttl=64,frag=no)'
587 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
588 ovs-appctl -t ovs-ofctl exit
590 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
591 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
592 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
594 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
595 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
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:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
601 dnl Modified MPLS controller action.
602 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
605 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=6,tos=0,ttl=64,frag=no)'
607 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
608 ovs-appctl -t ovs-ofctl exit
610 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
611 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
612 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
614 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
615 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
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,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
621 dnl Modified MPLS controller action.
622 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
625 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=6,tos=0,ttl=64,frag=no)'
627 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
628 ovs-appctl -t ovs-ofctl exit
630 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
631 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
632 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
634 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
635 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
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:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
641 dnl Modified MPLS controller action.
642 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
645 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=6,tos=0,ttl=64,frag=no)'
647 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
648 ovs-appctl -t ovs-ofctl exit
650 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
651 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
652 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
654 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
655 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
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:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
661 dnl Modified MPLS actions.
662 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
665 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)'
667 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
668 ovs-appctl -t ovs-ofctl exit
670 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
671 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
672 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
674 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
675 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
677 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
678 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
681 dnl Modified MPLS ipv6 controller action.
682 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
685 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)'
687 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
688 ovs-appctl -t ovs-ofctl exit
690 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
691 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
692 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=64,mpls_bos=1
694 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
695 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=64,mpls_bos=1
697 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
698 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=64,mpls_bos=1
702 dnl Modified MPLS pop action.
703 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
704 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)
705 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
707 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
710 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'
713 # 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)'
715 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
716 ovs-appctl -t ovs-ofctl exit
718 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
719 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
720 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
722 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
723 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
725 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
726 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
730 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
733 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)'
735 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
736 ovs-appctl -t ovs-ofctl exit
738 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
739 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
740 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
742 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
743 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
745 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)
746 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
748 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)
749 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
751 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)
752 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
754 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)
755 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
757 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)
758 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
760 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)
761 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
763 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)
764 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
768 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
771 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'
773 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
774 ovs-appctl -t ovs-ofctl exit
776 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
777 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
778 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
780 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
781 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
783 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)
784 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
786 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)
787 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
789 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)
790 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
792 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)
793 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
795 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)
796 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
798 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)
799 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
801 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)
802 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
805 dnl Modified ARP controller action.
806 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
809 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)'
812 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
813 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
814 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
815 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
816 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
817 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
818 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
819 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
820 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
821 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
822 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
823 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
824 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
825 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
826 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
827 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
828 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
829 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
830 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
831 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
834 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
837 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
840 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'
843 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
844 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
845 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
846 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
848 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
849 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
851 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)
852 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
854 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)
855 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
857 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)
858 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
860 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)
861 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
863 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)
864 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
866 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)
867 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
869 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)
870 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
873 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
874 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
875 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
876 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)
877 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)
878 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)
879 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)
880 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)
881 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
882 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
883 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
884 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
885 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
886 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
887 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
888 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
889 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
890 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
891 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
892 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
893 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
894 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[[]],CONTROLLER:65535
895 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
896 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
903 AT_SETUP([ofproto-dpif - ARP modification slow-path])
905 ADD_OF_PORTS([br0], [1], [2])
907 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
908 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'
910 # Input some packets that should follow the arp modification slow-path.
912 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)'
914 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
916 # Check the packets that were output.
917 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
918 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
919 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
920 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
921 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
922 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
923 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
924 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
925 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
926 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
929 # Check that each of the packets actually passed through the slow-path.
930 AT_CHECK([ovs-appctl coverage/show], [0], [stdout])
931 AT_CHECK([sed -n 's/[[ ]]\{2,\}/ /g
932 s/^dpif_execute_with_help.*total: //p' stdout], [0], [3
938 AT_SETUP([ofproto-dpif - VLAN handling])
940 [set Bridge br0 fail-mode=standalone -- \
941 add-port br0 p1 trunks=10,12 -- \
942 add-port br0 p2 tag=10 -- \
943 add-port br0 p3 tag=12 \
944 other-config:priority-tags=true -- \
945 add-port br0 p4 tag=12 -- \
946 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
947 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
948 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
949 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
950 other-config:priority-tags=true -- \
951 set Interface p1 type=dummy -- \
952 set Interface p2 type=dummy -- \
953 set Interface p3 type=dummy -- \
954 set Interface p4 type=dummy -- \
955 set Interface p5 type=dummy -- \
956 set Interface p6 type=dummy -- \
957 set Interface p7 type=dummy -- \
958 set Interface p8 type=dummy --])
960 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
961 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
967 "100 10 0 1,5,6,7,8,pop_vlan,2" \
968 "100 10 1 1,5,6,7,8,pop_vlan,2" \
971 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
972 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
976 "1 10 0 5,6,7,8,100,pop_vlan,2" \
977 "1 10 1 5,6,7,8,100,pop_vlan,2" \
980 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
981 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
982 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
983 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
984 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
991 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
992 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
993 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1000 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1001 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1002 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1009 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1010 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1011 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1012 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1013 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1016 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1017 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1018 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1019 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1020 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1021 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1022 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1025 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1026 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1027 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1028 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1029 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1030 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1031 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1034 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1035 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1036 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1037 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1038 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1039 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1040 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1043 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1044 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1052 if test $vlan = none; then
1053 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1055 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))"
1058 echo "----------------------------------------------------------------------"
1059 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1061 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1062 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1064 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1066 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1072 AT_SETUP([ofproto-dpif - fragment handling])
1074 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1075 AT_DATA([flows.txt], [dnl
1076 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1077 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1078 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1079 priority=50 tcp ip_frag=no actions=output:4
1080 priority=50 tcp ip_frag=first actions=output:5
1081 priority=50 tcp ip_frag=later actions=output:6
1083 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1085 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"
1086 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1087 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1088 later_flow="$base_flow,frag=later)"
1090 # mode no first later
1093 'drop 1 drop drop' \
1102 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1103 for type in no first later; do
1104 eval flow=\$${type}_flow exp_output=\$$type
1105 printf "\n%s\n" "----$mode $type-----"
1106 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1108 if test $mode = drop && test $type != no; then
1109 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1111 echo "Datapath actions: $exp_output" >> expout
1112 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1118 AT_SETUP([ofproto-dpif - exit])
1120 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1121 AT_DATA([flows.txt], [dnl
1122 in_port=1 actions=output:10,exit,output:11
1123 in_port=2 actions=output:12,resubmit:1,output:12
1124 in_port=3 actions=output:13,resubmit:2,output:14
1126 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1127 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])
1128 AT_CHECK([tail -1 stdout], [0],
1129 [Datapath actions: 10
1131 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])
1132 AT_CHECK([tail -1 stdout], [0],
1133 [Datapath actions: 12,10
1135 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])
1136 AT_CHECK([tail -1 stdout], [0],
1137 [Datapath actions: 13,12,10
1143 AT_SETUP([ofproto-dpif - mirroring, select_all])
1145 ADD_OF_PORTS([br0], 1, 2, 3)
1147 set Bridge br0 mirrors=@m --\
1148 --id=@p3 get Port p3 --\
1149 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1151 AT_DATA([flows.txt], [dnl
1152 in_port=1 actions=output:2
1153 in_port=2 actions=output:1
1155 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1157 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)"
1158 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1159 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1160 [Datapath actions: 2,3
1163 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)"
1164 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1165 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1166 [Datapath actions: 1,3
1173 AT_SETUP([ofproto-dpif - mirroring, select_src])
1175 ADD_OF_PORTS([br0], 1, 2, 3)
1177 set Bridge br0 mirrors=@m --\
1178 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1179 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1181 AT_DATA([flows.txt], [dnl
1182 in_port=1 actions=output:2
1183 in_port=2 actions=output:1
1185 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1187 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)"
1188 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1189 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1190 [Datapath actions: 2,3
1193 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)"
1194 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1195 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1196 [Datapath actions: 1
1201 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1203 ADD_OF_PORTS([br0], 1, 2)
1205 set Bridge br0 mirrors=@m --\
1206 --id=@p2 get Port p2 --\
1207 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1209 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1211 # "in_port" defaults to OFPP_NONE if it's not specified.
1212 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"
1213 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1214 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1215 [Datapath actions: 1,2
1222 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1224 ADD_OF_PORTS([br0], 1, 2, 3)
1226 set Bridge br0 mirrors=@m --\
1227 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1228 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1230 AT_DATA([flows.txt], [dnl
1231 in_port=1 actions=output:2
1232 in_port=2 actions=output:1
1234 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1236 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)"
1237 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1238 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1239 [Datapath actions: 2,3
1242 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)"
1243 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1244 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1245 [Datapath actions: 1
1252 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1254 ADD_OF_PORTS([br0], 1, 2, 3)
1256 set Bridge br0 mirrors=@m --\
1257 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1258 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1260 AT_DATA([flows.txt], [dnl
1261 in_port=1, actions=output:2
1263 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1265 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)"
1266 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1267 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1268 [Datapath actions: 2
1271 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))"
1272 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1273 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1274 [Datapath actions: 2
1277 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))"
1278 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1279 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1280 [Datapath actions: 2,3
1287 AT_SETUP([ofproto-dpif - mirroring, output_port])
1289 ADD_OF_PORTS([br0], 1, 2, 3)
1291 set Bridge br0 mirrors=@m --\
1292 --id=@p3 get Port p3 --\
1293 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1295 AT_DATA([flows.txt], [dnl
1296 in_port=1 actions=mod_vlan_vid:17,output:2
1297 in_port=2 actions=output:1
1299 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1301 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)"
1302 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1303 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1304 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1307 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)"
1308 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1309 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1310 [Datapath actions: 1,3
1316 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1318 ADD_OF_PORTS([br0], 1, 2)
1320 set Bridge br0 mirrors=@m --\
1321 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1323 AT_DATA([flows.txt], [dnl
1324 in_port=1 actions=output:2
1325 in_port=2 actions=mod_vlan_vid:17,output:1
1327 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1329 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)"
1330 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1331 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1333 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1334 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1336 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1338 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)"
1339 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1340 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1342 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1343 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1345 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1350 # Two testcases below are for the ofproto/trace command
1351 # The first one tests all correct syntax:
1352 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1353 # ofproto/trace br_name br_flow [-generate|packet]
1354 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1355 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1356 ADD_OF_PORTS([br0], 1, 2, 3)
1358 AT_DATA([flows.txt], [dnl
1359 in_port=1 actions=output:2
1360 in_port=2 actions=output:1
1362 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1364 odp_flow="in_port(p1)"
1366 # Test command: ofproto/trace odp_flow with in_port as a name.
1367 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1368 AT_CHECK([tail -1 stdout], [0], [dnl
1372 odp_flow="in_port(1)"
1373 # Test command: ofproto/trace odp_flow
1374 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1375 AT_CHECK([tail -1 stdout], [0], [dnl
1379 # Test command: ofproto/trace dp_name odp_flow
1380 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1381 AT_CHECK([tail -1 stdout], [0], [dnl
1384 # Test commmand: ofproto/trace br_name br_flow
1385 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1386 AT_CHECK([tail -1 stdout], [0], [dnl
1390 # Delete the inserted flows
1391 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1392 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1394 # This section beflow tests the [-generate] option
1395 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1396 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"
1398 # Test command: ofproto/trace odp_flow
1399 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1400 # Check for no MAC learning entry
1401 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1405 # Test command: ofproto/trace br_name br_flow
1406 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1407 # Check for no MAC learning entry
1408 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1412 # Test command: ofproto/trace odp_flow -generate
1413 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1414 # Check for the MAC learning entry
1415 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1417 3 0 50:54:00:00:00:05 ?
1420 # Test command: ofproto/trace dp_name odp_flow -generate
1421 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1422 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1423 -generate], [0], [stdout])
1424 # Check for both MAC learning entries
1425 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1427 3 0 50:54:00:00:00:05 ?
1428 1 0 50:54:00:00:00:06 ?
1431 # Test command: ofproto/trace br_name br_flow -generate
1432 AT_CHECK([ovs-appctl ofproto/trace br0 \
1433 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1434 -generate], [0], [stdout])
1435 # Check for both MAC learning entries.
1436 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1438 3 0 50:54:00:00:00:05 ?
1439 1 0 50:54:00:00:00:06 ?
1440 2 0 50:54:00:00:00:07 ?
1443 # This section beflow tests the [packet] option
1444 # The ovs-tcpundump of packets between port1 and port2
1445 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1446 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1448 # Construct the MAC learning table
1449 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1450 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1451 -generate], [0], [stdout])
1453 # Construct the MAC learning table
1454 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1455 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1456 -generate], [0], [stdout])
1458 # Test command: ofproto/trace odp_flow packet
1459 AT_CHECK([ovs-appctl ofproto/trace \
1460 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1461 AT_CHECK([tail -1 stdout], [0], [dnl
1464 AT_CHECK([head -n 2 stdout], [0], [dnl
1466 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
1469 # Test command: ofproto/trace dp_name odp_flow packet
1470 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1471 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1472 AT_CHECK([tail -1 stdout], [0], [dnl
1475 AT_CHECK([head -n 2 stdout], [0], [dnl
1477 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
1480 # Test command: ofproto/trace br_name br_flow packet
1481 AT_CHECK([ovs-appctl ofproto/trace br0 \
1482 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1483 AT_CHECK([tail -1 stdout], [0], [dnl
1486 AT_CHECK([head -n 2 stdout], [0], [dnl
1488 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
1494 # The second test tests the corner cases
1495 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1497 ADD_OF_PORTS([br0], 1, 2)
1500 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1501 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1503 generate="-generate"
1504 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1506 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1512 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1514 AT_CHECK([tail -2 stderr], [0], [dnl
1515 Cannot find the datapath
1516 ovs-appctl: ovs-vswitchd: server returned an error
1519 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1525 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1527 AT_CHECK([tail -2 stderr], [0], [dnl
1528 Cannot find the datapath
1529 ovs-appctl: ovs-vswitchd: server returned an error
1532 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1538 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1540 AT_CHECK([tail -2 stderr], [0], [dnl
1541 Cannot find the datapath
1542 ovs-appctl: ovs-vswitchd: server returned an error
1545 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1551 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1553 AT_CHECK([tail -2 stderr], [0], [dnl
1554 Cannot find the datapath
1555 ovs-appctl: ovs-vswitchd: server returned an error
1558 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1564 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1566 AT_CHECK([tail -2 stderr], [0], [dnl
1568 ovs-appctl: ovs-vswitchd: server returned an error
1571 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1577 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1579 AT_CHECK([tail -2 stderr], [0], [dnl
1580 Must specify bridge name
1581 ovs-appctl: ovs-vswitchd: server returned an error
1584 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1585 AT_CHECK([ovs-appctl ofproto/trace \
1586 ovs-dummy "$odp_flow" garbage_option],
1587 [2], [stdout],[stderr])
1588 AT_CHECK([tail -2 stderr], [0], [dnl
1589 Trailing garbage in packet data
1590 ovs-appctl: ovs-vswitchd: server returned an error
1593 # Test incorrect command: ofproto/trace with 4 arguments
1594 AT_CHECK([ovs-appctl ofproto/trace \
1595 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1596 AT_CHECK([tail -2 stderr], [0], [dnl
1597 "ofproto/trace" command takes at most 3 arguments
1598 ovs-appctl: ovs-vswitchd: server returned an error
1601 # Test incorrect command: ofproto/trace with 0 argument
1602 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1603 AT_CHECK([tail -2 stderr], [0], [dnl
1604 "ofproto/trace" command requires at least 1 arguments
1605 ovs-appctl: ovs-vswitchd: server returned an error
1611 m4_define([OFPROTO_TRACE],
1613 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1614 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1616 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1619 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1622 AT_SETUP([ofproto-dpif - MAC learning])
1623 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1624 ADD_OF_PORTS([br0], 1, 2, 3)
1626 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)'
1628 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1631 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1635 # Check for the MAC learning entry.
1636 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1638 3 0 50:54:00:00:00:05 ?
1641 # Trace a packet arrival destined for the learned MAC.
1642 # (This will also learn a MAC.)
1645 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1649 # Check for both MAC learning entries.
1650 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1652 3 0 50:54:00:00:00:05 ?
1653 1 0 50:54:00:00:00:06 ?
1656 # Trace a packet arrival that updates the first learned MAC entry.
1659 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1663 # Check that the MAC learning entry was updated.
1664 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1666 1 0 50:54:00:00:00:06 ?
1667 2 0 50:54:00:00:00:05 ?
1670 # Add another bridge.
1674 -- set bridge br1 datapath-type=dummy])
1675 ADD_OF_PORTS([br1], 4, 5)
1677 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1680 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1685 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1689 # Check that the MAC learning entries were added.
1690 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1692 4 0 50:54:00:00:00:06 ?
1693 5 0 50:54:00:00:00:07 ?
1696 # Delete port p1 and see that its MAC learning entry disappeared, and
1697 # that the MAC learning entry for the same MAC was also deleted from br1.
1698 AT_CHECK([ovs-vsctl del-port p1])
1699 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1701 2 0 50:54:00:00:00:05 ?
1703 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1705 5 0 50:54:00:00:00:07 ?
1711 AT_SETUP([ofproto-dpif - MAC table overflow])
1713 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1714 ADD_OF_PORTS([br0], 1, 2, 3)
1716 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)'
1718 AT_CHECK([ovs-appctl time/stop])
1720 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1721 for i in 0 1 2 3 4 5 6 7 8 9; do
1724 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1727 ovs-appctl time/warp 1000
1730 # Check for the MAC learning entries.
1731 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1733 3 0 50:54:00:00:00:00
1734 3 0 50:54:00:00:00:01
1735 3 0 50:54:00:00:00:02
1736 3 0 50:54:00:00:00:03
1737 3 0 50:54:00:00:00:04
1738 3 0 50:54:00:00:00:05
1739 3 0 50:54:00:00:00:06
1740 3 0 50:54:00:00:00:07
1741 3 0 50:54:00:00:00:08
1742 3 0 50:54:00:00:00:09
1746 # Trace another ARP packet on another MAC.
1749 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1753 # Check that the new one chased the oldest one out of the table.
1754 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1756 3 0 50:54:00:00:00:01 ?
1757 3 0 50:54:00:00:00:02 ?
1758 3 0 50:54:00:00:00:03 ?
1759 3 0 50:54:00:00:00:04 ?
1760 3 0 50:54:00:00:00:05 ?
1761 3 0 50:54:00:00:00:06 ?
1762 3 0 50:54:00:00:00:07 ?
1763 3 0 50:54:00:00:00:08 ?
1764 3 0 50:54:00:00:00:09 ?
1765 3 0 50:54:00:00:00:10 ?
1771 dnl Test that sFlow samples packets correctly.
1772 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1773 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1775 ON_EXIT([kill `cat test-sflow.pid`])
1776 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1777 AT_CAPTURE_FILE([sflow.log])
1778 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1780 ovs-appctl time/stop
1782 ADD_OF_PORTS([br0], 1, 2)
1784 set Interface br0 options:ifindex=1002 -- \
1785 set Interface p1 options:ifindex=1004 -- \
1786 set Interface p2 options:ifindex=1003 -- \
1787 set Bridge br0 sflow=@sf -- \
1788 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1789 header=128 sampling=1 polling=1
1791 dnl open with ARP packets to seed the bridge-learning. The output
1792 dnl ifIndex numbers should be reported predictably after that.
1793 dnl Since we set sampling=1 we should see all of these packets
1794 dnl reported. Sorting the output by data-source and seqNo makes
1795 dnl it deterministic. Ensuring that we send at least two packets
1796 dnl into each port means we get to check the seq nos are
1797 dnl incrementing correctly.
1799 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)'
1800 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)'
1801 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)'
1802 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)'
1803 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)'
1805 dnl sleep long enough to get more than one counter sample
1806 dnl from each datasource so we can check sequence numbers
1807 for i in `seq 1 30`; do
1808 ovs-appctl time/warp 100
1811 ovs-appctl -t test-sflow exit
1813 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1834 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
1854 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
1874 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
1894 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
1914 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1917 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1931 in_broadcasts=4294967295
1934 in_unknownprotos=4294967295
1937 out_multicasts=4294967295
1938 out_broadcasts=4294967295
1954 in_broadcasts=4294967295
1957 in_unknownprotos=4294967295
1960 out_multicasts=4294967295
1961 out_broadcasts=4294967295
1977 in_broadcasts=4294967295
1980 in_unknownprotos=4294967295
1983 out_multicasts=4294967295
1984 out_broadcasts=4294967295
2000 in_broadcasts=4294967295
2003 in_unknownprotos=4294967295
2006 out_multicasts=4294967295
2007 out_broadcasts=4294967295
2023 in_broadcasts=4294967295
2026 in_unknownprotos=4294967295
2029 out_multicasts=4294967295
2030 out_broadcasts=4294967295
2046 in_broadcasts=4294967295
2049 in_unknownprotos=4294967295
2052 out_multicasts=4294967295
2053 out_broadcasts=4294967295
2062 dnl Test that basic NetFlow reports flow statistics correctly:
2063 dnl - The initial packet of a flow are correctly accounted.
2064 dnl - Later packets within a flow are correctly accounted.
2065 dnl - Flow actions changing (in this case, due to MAC learning)
2066 dnl cause a record to be sent.
2067 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
2069 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2070 ADD_OF_PORTS([br0], 1, 2)
2072 ovs-appctl time/stop
2073 ON_EXIT([kill `cat test-netflow.pid`])
2074 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2075 AT_CAPTURE_FILE([netflow.log])
2076 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2079 set Bridge br0 netflow=@nf -- \
2080 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2081 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2083 for delay in 1000 30000; do
2084 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)'
2085 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)'
2087 ovs-appctl time/warp $delay
2092 ovs-appctl -t test-netflow exit
2094 AT_CHECK([[sed -e 's/, uptime [0-9]*//
2096 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
2097 s/time [0-9]*\.\.\.[0-9]*/time <range>/
2098 ' netflow.log | sort]], [0],
2100 header: v5, seq 0, engine 2,1
2101 header: v5, seq 1, engine 2,1
2102 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2103 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2104 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
2108 dnl Test that basic NetFlow reports active expirations correctly.
2109 AT_SETUP([ofproto-dpif - NetFlow active expiration])
2111 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2112 ADD_OF_PORTS([br0], 1, 2)
2114 ON_EXIT([kill `cat test-netflow.pid`])
2115 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2116 AT_CAPTURE_FILE([netflow.log])
2117 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2120 set Bridge br0 netflow=@nf -- \
2121 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2122 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2124 AT_CHECK([ovs-appctl time/stop])
2126 while test $n -le 60; do
2129 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)'
2130 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)'
2132 ovs-appctl time/warp 1000
2135 ovs-appctl time/warp 10000
2139 ovs-appctl -t test-netflow exit
2141 # Count the number of reported packets:
2142 # - From source to destination before MAC learning kicks in (just one).
2143 # - From source to destination after that.
2144 # - From destination to source.
2152 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2159 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2162 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2165 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2172 eval $counter=\`expr \$$counter + \$pkts\`
2173 n_recs=`expr $n_recs + 1`
2176 # There should be exactly 1 MAC learning packet,
2177 # exactly 59 other packets in that direction,
2178 # and exactly 60 packets in the other direction.
2179 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2182 # There should be 1 expiration for MAC learning,
2183 # at least 5 active and a final expiration in one direction,
2184 # and at least 5 active and a final expiration in the other direction.
2186 AT_CHECK([test $n_recs -ge 13])
2190 AT_SETUP([idle_age and hard_age increase over time])
2193 # get_ages DURATION HARD IDLE
2195 # Fetch the flow duration, hard age, and idle age into the variables
2196 # whose names are given as arguments. Rounds DURATION down to the
2197 # nearest integer. If hard_age doesn't appear in the output, sets
2198 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2201 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2203 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2204 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2205 AS_VAR_COPY([$1], [duration])
2207 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2208 if test X"$hard" = X; then
2211 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2213 AS_VAR_COPY([$2], [hard])
2215 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2216 if test X"$idle" = X; then
2219 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2221 AS_VAR_COPY([$3], [idle])
2224 # Add a flow and get its initial hard and idle age.
2225 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2226 get_ages duration1 hard1 idle1
2228 ovs-appctl time/stop
2229 # Warp time forward by 10 seconds, then modify the flow's actions.
2230 ovs-appctl time/warp 10000
2231 get_ages duration2 hard2 idle2
2232 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2234 # Warp time forward by 10 seconds.
2235 ovs-appctl time/warp 10000
2236 get_ages duration3 hard3 idle3
2238 # Warp time forward 10 more seconds, then pass some packets through the flow,
2239 # then warp forward a few more times because idle times are only updated
2241 ovs-appctl time/warp 10000
2242 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)'
2243 ovs-appctl time/warp 1000
2244 ovs-appctl time/warp 1000
2245 ovs-appctl time/warp 1000
2246 get_ages duration4 hard4 idle4
2248 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2249 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2250 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2252 # Duration should increase steadily over time.
2253 AT_CHECK([test $duration1 -lt $duration2])
2254 AT_CHECK([test $duration2 -lt $duration3])
2255 AT_CHECK([test $duration3 -lt $duration4])
2257 # Hard age should be "none" initially because it's the same as flow_duration,
2258 # then it should increase.
2259 AT_CHECK([test $hard1 = none])
2260 AT_CHECK([test $hard2 = none])
2261 AT_CHECK([test $hard3 != none])
2262 AT_CHECK([test $hard4 != none])
2263 AT_CHECK([test $hard3 -lt $hard4])
2265 # Idle age should increase from 1 to 2 to 3, then decrease.
2266 AT_CHECK([test $idle1 -lt $idle2])
2267 AT_CHECK([test $idle2 -lt $idle3])
2268 AT_CHECK([test $idle3 -gt $idle4])
2270 # Check some invariant relationships.
2271 AT_CHECK([test $duration1 = $idle1])
2272 AT_CHECK([test $duration2 = $idle2])
2273 AT_CHECK([test $duration3 = $idle3])
2274 AT_CHECK([test $idle3 -gt $hard3])
2275 AT_CHECK([test $idle4 -lt $hard4])
2276 AT_CHECK([test $hard4 -lt $duration4])
2281 AT_SETUP([ofproto-dpif - fin_timeout])
2283 AT_DATA([flows.txt], [dnl
2284 in_port=1 actions=output:2
2285 in_port=2 actions=mod_vlan_vid:17,output:1
2287 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2288 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2290 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2293 ovs-appctl time/stop
2294 # Check that a TCP SYN packet does not change the timeout. (Because
2295 # flow stats updates are mainly what implements the fin_timeout
2296 # feature, we warp forward a couple of times to ensure that flow stats
2297 # run before re-checking the flow table.)
2298 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2299 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2302 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2304 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2306 # Check that a TCP FIN packet does change the timeout.
2307 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2308 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2311 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2313 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2318 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2319 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2320 ADD_OF_PORTS([br0], [1], [2])
2321 ADD_OF_PORTS([br1], [3])
2323 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2330 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2331 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2332 ADD_OF_PORTS([br0], [1], [2])
2333 ADD_OF_PORTS([br1], [3])
2335 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2336 dummy@ovs-dummy: hit:0 missed:0
2337 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2339 br0 65534/100: (dummy)
2343 br1 65534/101: (dummy)
2349 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2350 OVS_VSWITCHD_START([add-br br1 -- \
2351 set bridge br1 datapath-type=dummy fail-mode=secure])
2352 ADD_OF_PORTS([br0], [1], [2])
2353 ADD_OF_PORTS([br1], [3])
2355 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)'])
2356 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)'])
2357 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)'])
2359 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2360 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:0.0s, actions:userspace(pid=0,slow_path(controller))
2361 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:0.0s, actions:userspace(pid=0,slow_path(controller))
2364 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2365 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:0.0s, actions:userspace(pid=0,slow_path(controller))
2371 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2372 OVS_VSWITCHD_START([add-br br1 -- \
2373 set bridge br1 datapath-type=dummy fail-mode=secure])
2374 ADD_OF_PORTS([br0], [1], [2])
2375 ADD_OF_PORTS([br1], [3])
2377 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)'])
2378 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)'])
2379 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)'])
2381 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2382 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:0.0s, actions:userspace(pid=0,slow_path(controller))
2383 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:0.0s, actions:userspace(pid=0,slow_path(controller))
2386 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2387 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:0.0s, actions:userspace(pid=0,slow_path(controller))
2390 AT_CHECK([ovs-appctl dpif/del-flows br0])
2391 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2394 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2395 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:0.0s, actions:userspace(pid=0,slow_path(controller))
2401 AT_SETUP([ofproto-dpif - patch ports])
2402 OVS_VSWITCHD_START([add-br br1 \
2403 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2404 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2405 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2407 ADD_OF_PORTS([br0], [2])
2408 ADD_OF_PORTS([br1], [3])
2410 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2412 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2413 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2415 for i in $(seq 1 10); do
2416 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)'
2419 for i in $(seq 1 5); do
2420 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)'
2423 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2427 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2428 dummy@ovs-dummy: hit:13 missed:2
2429 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2431 br0 65534/100: (dummy)
2433 pbr0 1/none: (patch: peer=pbr1)
2435 br1 65534/101: (dummy)
2437 pbr1 1/none: (patch: peer=pbr0)
2440 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2441 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
2443 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2444 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
2447 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2448 OFPST_PORT reply (xid=0x4): 1 ports
2449 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2450 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2453 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2454 OFPST_PORT reply (xid=0x4): 1 ports
2455 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2456 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2462 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2463 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2464 ADD_OF_PORTS([br0], 1, 2)
2466 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2467 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2469 for i in $(seq 1 61); do
2470 ovs-appctl netdev-dummy/receive br0 '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)'
2471 ovs-appctl time/warp 10000
2472 ovs-appctl time/warp 50000
2475 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2478 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2479 dummy@ovs-dummy: hit:0 missed:61
2480 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2481 br0: hit:0 missed:61
2482 br0 65534/100: (dummy)
2490 AT_SETUP([ofproto-dpif - port duration])
2491 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2492 ADD_OF_PORTS([br0], 1, 2)
2494 ovs-appctl time/stop
2495 ovs-appctl time/warp 10000
2497 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2498 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2500 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2501 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2502 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2504 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2505 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2507 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2508 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2514 dnl ----------------------------------------------------------------------
2515 AT_BANNER([ofproto-dpif -- megaflows])
2517 # Strips out uninteresting parts of megaflow output, as well as parts
2518 # that vary from one run to another (e.g., timing and bond actions).
2519 m4_define([STRIP_USED], [[sed '
2520 s/used:[0-9]*\.[0-9]*/used:0.0/
2522 m4_define([STRIP_XOUT], [[sed '
2523 s/used:[0-9]*\.[0-9]*/used:0.0/
2524 s/Datapath actions:.*/Datapath actions: <del>/
2527 AT_SETUP([ofproto-dpif megaflow - port classification])
2529 ADD_OF_PORTS([br0], [1], [2])
2530 AT_DATA([flows.txt], [dnl
2531 table=0 in_port=1 actions=output(2)
2533 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2534 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)'])
2535 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)'])
2536 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2537 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2542 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2544 ADD_OF_PORTS([br0], [1], [2])
2545 AT_DATA([flows.txt], [dnl
2546 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2548 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2549 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)'])
2550 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)'])
2551 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2552 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2553 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2558 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2560 ADD_OF_PORTS([br0], [1], [2])
2561 AT_DATA([flows.txt], [dnl
2562 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2564 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2565 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)'])
2566 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)'])
2567 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2568 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2569 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2574 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2576 ADD_OF_PORTS([br0], [1], [2])
2577 AT_DATA([flows.txt], [dnl
2578 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2580 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2581 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)'])
2582 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)'])
2583 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2584 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2589 AT_SETUP([ofproto-dpif megaflow - normal])
2591 ADD_OF_PORTS([br0], [1], [2])
2592 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2593 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)'])
2594 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)'])
2595 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2596 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2597 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2602 AT_SETUP([ofproto-dpif megaflow - mpls])
2604 ADD_OF_PORTS([br0], [1], [2])
2605 AT_DATA([flows.txt], [dnl
2606 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2607 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2609 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2610 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)'])
2611 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)'])
2612 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2613 skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2614 skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2619 AT_SETUP([ofproto-dpif megaflow - netflow])
2621 ADD_OF_PORTS([br0], [1], [2])
2623 dnl NetFlow configuration disables wildcarding relevant fields
2624 ON_EXIT([kill `cat test-netflow.pid`])
2625 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2626 AT_CAPTURE_FILE([netflow.log])
2627 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2629 set Bridge br0 netflow=@nf -- \
2630 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2631 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2633 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2634 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)'])
2635 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)'])
2636 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2637 skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2638 skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2643 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2645 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2646 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2647 set interface p2 type=dummy ofport_request=2 -- \
2648 set interface p3 type=dummy ofport_request=3])
2649 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2652 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2653 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)'])
2654 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)'])
2655 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2656 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2657 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2662 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2664 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2665 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2666 set interface p2 type=dummy ofport_request=2 -- \
2667 set interface p3 type=dummy ofport_request=3])
2668 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2671 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2672 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)'])
2673 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)'])
2674 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2675 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2676 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2681 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2682 # Create bond0 on br0 with interfaces p0 and p1
2683 # and bond1 on br1 with interfaces p2 and p3
2684 # with p0 patched to p2 and p1 patched to p3.
2686 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2687 other-config:lacp-time=fast \
2688 other-config:bond-rebalance-interval=0 -- \
2689 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2690 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2692 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2693 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2694 fail-mode=secure -- \
2695 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2696 other-config:lacp-time=fast \
2697 other-config:bond-rebalance-interval=0 -- \
2698 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2699 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2701 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2703 ADD_OF_PORTS([br0], [7])
2704 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2705 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2706 ovs-appctl time/stop
2707 ovs-appctl time/warp 5000
2708 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)'])
2709 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)'])
2711 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2712 skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2713 skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2718 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2720 ADD_OF_PORTS([br0], [1], [2])
2721 AT_DATA([flows.txt], [dnl
2722 table=0 in_port=1,ip actions=resubmit(90)
2723 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2725 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2726 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)'])
2727 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)'])
2728 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2729 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2730 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2735 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2737 ADD_OF_PORTS([br0], [1], [2])
2738 AT_DATA([flows.txt], [dnl
2739 table=0 in_port=1,ip actions=resubmit(,1)
2740 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2742 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2743 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)'])
2744 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=
2745 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2746 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2747 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2748 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2753 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2755 ADD_OF_PORTS([br0], [1], [2])
2756 AT_DATA([flows.txt], [dnl
2757 table=0 in_port=1,ip actions=goto_table(1)
2758 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2760 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2761 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)'])
2762 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)'])
2763 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2764 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2765 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2770 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2772 ADD_OF_PORTS([br0], [1], [2], [3])
2774 set Bridge br0 mirrors=@m --\
2775 --id=@p3 get Port p3 --\
2776 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2778 AT_DATA([flows.txt], [dnl
2779 in_port=1 actions=output:2
2781 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2782 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)'])
2783 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)'])
2784 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2785 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2790 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2792 ADD_OF_PORTS([br0], [1], [2], [3])
2794 set Bridge br0 mirrors=@m --\
2795 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2796 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2798 AT_DATA([flows.txt], [dnl
2799 in_port=1 actions=output:2
2801 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2802 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))'])
2803 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)'])
2804 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2805 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2806 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2811 AT_SETUP([ofproto-dpif megaflow - move action])
2813 ADD_OF_PORTS([br0], [1], [2])
2814 AT_DATA([flows.txt], [dnl
2815 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2816 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2817 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2819 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2820 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)'])
2821 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)'])
2822 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2823 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2824 skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2829 AT_SETUP([ofproto-dpif megaflow - push action])
2831 ADD_OF_PORTS([br0], [1], [2])
2832 AT_DATA([flows.txt], [dnl
2833 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2835 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2836 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)'])
2837 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)'])
2838 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2839 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2840 skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2845 AT_SETUP([ofproto-dpif megaflow - learning])
2847 ADD_OF_PORTS([br0], [1], [2])
2848 AT_DATA([flows.txt], [dnl
2849 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
2851 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2852 ovs-appctl time/stop
2853 # We send each packet twice because the first packet in each flow causes the
2854 # flow table to change and thus revalidations, which (depending on timing)
2855 # can keep a megaflow from being installed. The revalidations are done by
2856 # the second iteration, allowing the flows to be installed.
2858 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)'])
2859 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)'])
2860 ovs-appctl time/warp 100
2862 dnl The original flow is missing due to a revalidation.
2863 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2864 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2865 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2870 AT_SETUP([ofproto-dpif megaflow - tunnels])
2872 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2873 ofport_request=1 -- \
2874 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2875 ofport_request=2 options:key=flow -- \
2876 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2877 ofport_request=3 -- \
2878 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2879 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2880 AT_DATA([flows.txt], [dnl
2881 in_port=1,actions=output(2)
2882 in_port=3,actions=output(4)
2884 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2885 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2886 dnl will cause the packet to be dropped.
2887 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)'])
2888 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)'])
2889 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)'])
2890 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)'])
2891 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2892 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2893 skb_priority=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2894 skb_priority=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2899 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2901 ADD_OF_PORTS([br0], [1], [2])
2902 AT_DATA([flows.txt], [dnl
2903 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2905 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2906 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2907 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2908 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2909 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2910 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_ecn=0,nw_ttl=64, n_subfacets:1, used:0.0s, Datapath actions: <del>
2915 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2917 ADD_OF_PORTS([br0], [1], [2])
2918 AT_DATA([flows.txt], [dnl
2919 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2921 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2922 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)'])
2923 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)'])
2924 dnl The megaflows do not match the same fields, since the first packet
2925 dnl is essentially a no-op. (The new destination MAC is the same as the
2926 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2927 dnl so that a packet that doesn't need its MAC address changed doesn't
2928 dnl hide one that does. Since the first entry doesn't need to change,
2929 dnl only the destination MAC address is matched (as decided by
2930 dnl ofproto-dpif). The second entry actually updates the destination
2931 dnl MAC, so both the source and destination MAC addresses are
2932 dnl un-wildcarded, since the ODP commit functions update both the source
2933 dnl and destination MAC addresses.
2934 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2935 skb_priority=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: 2
2936 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
2941 AT_SETUP([ofproto-dpif - datapath port number change])
2942 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2943 ADD_OF_PORTS([br0], 1)
2945 # Trace a flow that should output to p1.
2946 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2948 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2951 # Change p1's port number to 5.
2952 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2954 # Trace a flow that should output to p1 in its new location.
2955 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2957 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2962 # Tests the bundling with various bfd and cfm configurations.
2963 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2964 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2965 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2966 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2967 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2968 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2969 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2970 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2971 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2972 set Interface p0 cfm_mpid=1 -- \
2973 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2975 ovs-appctl time/stop
2976 # advance the clock to stablize everything.
2977 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2978 # cfm/show should show 'recv' fault.
2979 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2982 # bfd/show should show 'up'.
2983 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2984 Local Session State: up
2985 Remote Session State: up
2986 Local Session State: up
2987 Remote Session State: up
2989 # bond/show should show 'may-enable: true' for all slaves.
2990 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2997 # now disable the bfd on p1.
2998 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
2999 # advance the clock to stablize everything.
3000 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3001 # cfm/show should show 'recv' fault.
3002 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3005 # bfd/show should show 'down'.
3006 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3007 Local Session State: down
3008 Remote Session State: down
3010 # bond/show should show 'may-enable: false' for p0.
3011 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3018 # now enable the bfd on p1 and disable bfd on p0.
3019 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3020 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3021 # advance the clock to stablize everything.
3022 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3023 # cfm/show should show 'recv' fault.
3024 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3027 # bfd/show should show 'down'.
3028 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3029 Local Session State: down
3030 Remote Session State: down
3032 # bond/show should show 'may-enable: false' for p0 and p1.
3033 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3043 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3044 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3047 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3049 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3050 monitor thread created
3052 # disable bfd on p0.
3053 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3055 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3056 monitor thread terminated
3058 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3061 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3063 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3064 monitor thread created
3066 # disable cfm on p0.
3067 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3069 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3070 monitor thread terminated
3072 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3074 # enable both bfd and cfm on p0.
3075 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3077 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3078 monitor thread created
3080 # disable bfd on p0.
3081 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3082 # check log, there should not be the log of thread terminated.
3083 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3085 # reenable bfd on p0.
3086 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3087 # check log, should still be on log of thread created.
3088 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3089 monitor thread created
3091 # disable bfd and cfm together.
3092 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3094 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3095 monitor thread terminated
3101 # this test helps avoid the deadlock between the main thread and monitor thread.
3102 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3105 for i in `seq 1 199`
3107 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])
3113 AT_BANNER([ofproto-dpif - flow translation resource limits])
3115 AT_SETUP([ofproto-dpif - infinite resubmit])
3117 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3118 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3120 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3122 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3125 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3128 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3130 ADD_OF_PORTS([br0], 1)
3131 (for i in `seq 1 64`; do
3133 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3135 echo "in_port=65, actions=local") > flows
3136 AT_CHECK([ovs-ofctl add-flows br0 flows])
3137 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3138 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3140 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3143 AT_SETUP([ofproto-dpif - too many output actions])
3145 ADD_OF_PORTS([br0], 1)
3146 (for i in `seq 1 12`; do
3148 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3150 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3151 AT_CHECK([ovs-ofctl add-flows br0 flows])
3152 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3153 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3156 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3158 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3161 AT_SETUP([ofproto-dpif - stack too deep])
3163 ADD_OF_PORTS([br0], 1)
3164 (for i in `seq 1 12`; do
3166 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3168 push="push:NXM_NX_REG0[[]]"
3169 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3170 AT_CHECK([ovs-ofctl add-flows br0 flows])
3171 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3172 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3174 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])