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=111,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=111,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=111,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=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
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=111,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=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
276 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
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[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],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=16,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 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
493 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
494 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
496 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
497 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
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=16,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=16,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 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
533 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
534 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
536 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
537 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
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=16,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=16,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=16,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=16,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=16,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=128,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=128,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=128,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=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
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=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
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=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
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[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],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
932 AT_SETUP([ofproto-dpif - VLAN handling])
934 [set Bridge br0 fail-mode=standalone -- \
935 add-port br0 p1 trunks=10,12 -- \
936 add-port br0 p2 tag=10 -- \
937 add-port br0 p3 tag=12 \
938 other-config:priority-tags=true -- \
939 add-port br0 p4 tag=12 -- \
940 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
941 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
942 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
943 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
944 other-config:priority-tags=true -- \
945 set Interface p1 type=dummy -- \
946 set Interface p2 type=dummy -- \
947 set Interface p3 type=dummy -- \
948 set Interface p4 type=dummy -- \
949 set Interface p5 type=dummy -- \
950 set Interface p6 type=dummy -- \
951 set Interface p7 type=dummy -- \
952 set Interface p8 type=dummy --])
954 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
955 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
961 "100 10 0 1,5,6,7,8,pop_vlan,2" \
962 "100 10 1 1,5,6,7,8,pop_vlan,2" \
965 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
966 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
970 "1 10 0 5,6,7,8,100,pop_vlan,2" \
971 "1 10 1 5,6,7,8,100,pop_vlan,2" \
974 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
975 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
976 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
977 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
978 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
985 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
986 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
987 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
994 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
995 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
996 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1003 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1004 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1005 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1006 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1007 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1010 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1011 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1012 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1013 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1014 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1015 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1016 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1019 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1020 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1021 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1022 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1023 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1024 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1025 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1028 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1029 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1030 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1031 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1032 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1033 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1034 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1037 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1038 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1046 if test $vlan = none; then
1047 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1049 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))"
1052 echo "----------------------------------------------------------------------"
1053 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1055 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1056 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1058 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1060 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1066 AT_SETUP([ofproto-dpif - fragment handling])
1068 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1069 AT_DATA([flows.txt], [dnl
1070 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1071 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1072 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1073 priority=50 tcp ip_frag=no actions=output:4
1074 priority=50 tcp ip_frag=first actions=output:5
1075 priority=50 tcp ip_frag=later actions=output:6
1077 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1079 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"
1080 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1081 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1082 later_flow="$base_flow,frag=later)"
1084 # mode no first later
1087 'drop 1 drop drop' \
1096 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1097 for type in no first later; do
1098 eval flow=\$${type}_flow exp_output=\$$type
1099 printf "\n%s\n" "----$mode $type-----"
1100 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1102 if test $mode = drop && test $type != no; then
1103 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1105 echo "Datapath actions: $exp_output" >> expout
1106 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1112 AT_SETUP([ofproto-dpif - exit])
1114 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1115 AT_DATA([flows.txt], [dnl
1116 in_port=1 actions=output:10,exit,output:11
1117 in_port=2 actions=output:12,resubmit:1,output:12
1118 in_port=3 actions=output:13,resubmit:2,output:14
1120 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1121 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])
1122 AT_CHECK([tail -1 stdout], [0],
1123 [Datapath actions: 10
1125 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])
1126 AT_CHECK([tail -1 stdout], [0],
1127 [Datapath actions: 12,10
1129 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])
1130 AT_CHECK([tail -1 stdout], [0],
1131 [Datapath actions: 13,12,10
1137 AT_SETUP([ofproto-dpif - mirroring, select_all])
1139 ADD_OF_PORTS([br0], 1, 2, 3)
1141 set Bridge br0 mirrors=@m --\
1142 --id=@p3 get Port p3 --\
1143 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1145 AT_DATA([flows.txt], [dnl
1146 in_port=1 actions=output:2
1147 in_port=2 actions=output:1
1149 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1151 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)"
1152 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1153 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1154 [Datapath actions: 2,3
1157 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)"
1158 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1159 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1160 [Datapath actions: 1,3
1167 AT_SETUP([ofproto-dpif - mirroring, select_src])
1169 ADD_OF_PORTS([br0], 1, 2, 3)
1171 set Bridge br0 mirrors=@m --\
1172 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1173 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1175 AT_DATA([flows.txt], [dnl
1176 in_port=1 actions=output:2
1177 in_port=2 actions=output:1
1179 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1181 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)"
1182 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1183 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1184 [Datapath actions: 2,3
1187 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)"
1188 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1189 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1190 [Datapath actions: 1
1195 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1197 ADD_OF_PORTS([br0], 1, 2)
1199 set Bridge br0 mirrors=@m --\
1200 --id=@p2 get Port p2 --\
1201 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1203 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1205 # "in_port" defaults to OFPP_NONE if it's not specified.
1206 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"
1207 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1208 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1209 [Datapath actions: 1,2
1216 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1218 ADD_OF_PORTS([br0], 1, 2, 3)
1220 set Bridge br0 mirrors=@m --\
1221 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1222 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1224 AT_DATA([flows.txt], [dnl
1225 in_port=1 actions=output:2
1226 in_port=2 actions=output:1
1228 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1230 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)"
1231 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1232 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1233 [Datapath actions: 2,3
1236 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)"
1237 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1238 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1239 [Datapath actions: 1
1246 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1248 ADD_OF_PORTS([br0], 1, 2, 3)
1250 set Bridge br0 mirrors=@m --\
1251 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1252 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1254 AT_DATA([flows.txt], [dnl
1255 in_port=1, actions=output:2
1257 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1259 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)"
1260 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1261 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1262 [Datapath actions: 2
1265 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))"
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=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))"
1272 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1273 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1274 [Datapath actions: 2,3
1281 AT_SETUP([ofproto-dpif - mirroring, output_port])
1283 ADD_OF_PORTS([br0], 1, 2, 3)
1285 set Bridge br0 mirrors=@m --\
1286 --id=@p3 get Port p3 --\
1287 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1289 AT_DATA([flows.txt], [dnl
1290 in_port=1 actions=mod_vlan_vid:17,output:2
1291 in_port=2 actions=output:1
1293 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1295 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)"
1296 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1297 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1298 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1301 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)"
1302 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1303 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1304 [Datapath actions: 1,3
1310 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1312 ADD_OF_PORTS([br0], 1, 2)
1314 set Bridge br0 mirrors=@m --\
1315 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1317 AT_DATA([flows.txt], [dnl
1318 in_port=1 actions=output:2
1319 in_port=2 actions=mod_vlan_vid:17,output:1
1321 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1323 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)"
1324 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1325 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1327 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1328 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1330 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1332 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)"
1333 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1334 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1336 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1337 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1339 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1344 # Two testcases below are for the ofproto/trace command
1345 # The first one tests all correct syntax:
1346 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1347 # ofproto/trace br_name br_flow [-generate|packet]
1348 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1349 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1350 ADD_OF_PORTS([br0], 1, 2, 3)
1352 AT_DATA([flows.txt], [dnl
1353 in_port=1 actions=output:2
1354 in_port=2 actions=output:1
1356 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1358 odp_flow="in_port(p1)"
1360 # Test command: ofproto/trace odp_flow with in_port as a name.
1361 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1362 AT_CHECK([tail -1 stdout], [0], [dnl
1366 odp_flow="in_port(1)"
1367 # Test command: ofproto/trace odp_flow
1368 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1369 AT_CHECK([tail -1 stdout], [0], [dnl
1373 # Test command: ofproto/trace dp_name odp_flow
1374 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1375 AT_CHECK([tail -1 stdout], [0], [dnl
1378 # Test commmand: ofproto/trace br_name br_flow
1379 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1380 AT_CHECK([tail -1 stdout], [0], [dnl
1384 # Delete the inserted flows
1385 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1386 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1388 # This section beflow tests the [-generate] option
1389 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1390 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"
1392 # Test command: ofproto/trace odp_flow
1393 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1394 # Check for no MAC learning entry
1395 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1399 # Test command: ofproto/trace br_name br_flow
1400 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1401 # Check for no MAC learning entry
1402 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1406 # Test command: ofproto/trace odp_flow -generate
1407 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1408 # Check for the MAC learning entry
1409 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1411 3 0 50:54:00:00:00:05 ?
1414 # Test command: ofproto/trace dp_name odp_flow -generate
1415 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1416 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1417 -generate], [0], [stdout])
1418 # Check for both MAC learning entries
1419 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1421 3 0 50:54:00:00:00:05 ?
1422 1 0 50:54:00:00:00:06 ?
1425 # Test command: ofproto/trace br_name br_flow -generate
1426 AT_CHECK([ovs-appctl ofproto/trace br0 \
1427 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1428 -generate], [0], [stdout])
1429 # Check for both MAC learning entries.
1430 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1432 3 0 50:54:00:00:00:05 ?
1433 1 0 50:54:00:00:00:06 ?
1434 2 0 50:54:00:00:00:07 ?
1437 # This section beflow tests the [packet] option
1438 # The ovs-tcpundump of packets between port1 and port2
1439 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1440 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1442 # Construct the MAC learning table
1443 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1444 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1445 -generate], [0], [stdout])
1447 # Construct the MAC learning table
1448 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1449 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1450 -generate], [0], [stdout])
1452 # Test command: ofproto/trace odp_flow packet
1453 AT_CHECK([ovs-appctl ofproto/trace \
1454 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1455 AT_CHECK([tail -1 stdout], [0], [dnl
1458 AT_CHECK([head -n 2 stdout], [0], [dnl
1460 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
1463 # Test command: ofproto/trace dp_name odp_flow packet
1464 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1465 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1466 AT_CHECK([tail -1 stdout], [0], [dnl
1469 AT_CHECK([head -n 2 stdout], [0], [dnl
1471 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
1474 # Test command: ofproto/trace br_name br_flow packet
1475 AT_CHECK([ovs-appctl ofproto/trace br0 \
1476 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1477 AT_CHECK([tail -1 stdout], [0], [dnl
1480 AT_CHECK([head -n 2 stdout], [0], [dnl
1482 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
1488 # The second test tests the corner cases
1489 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1491 ADD_OF_PORTS([br0], 1, 2)
1494 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1495 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1497 generate="-generate"
1498 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1500 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1506 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1508 AT_CHECK([tail -2 stderr], [0], [dnl
1509 Cannot find the datapath
1510 ovs-appctl: ovs-vswitchd: server returned an error
1513 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1519 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1521 AT_CHECK([tail -2 stderr], [0], [dnl
1522 Cannot find the datapath
1523 ovs-appctl: ovs-vswitchd: server returned an error
1526 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1532 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1534 AT_CHECK([tail -2 stderr], [0], [dnl
1535 Cannot find the datapath
1536 ovs-appctl: ovs-vswitchd: server returned an error
1539 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1545 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1547 AT_CHECK([tail -2 stderr], [0], [dnl
1548 Cannot find the datapath
1549 ovs-appctl: ovs-vswitchd: server returned an error
1552 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1558 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1560 AT_CHECK([tail -2 stderr], [0], [dnl
1562 ovs-appctl: ovs-vswitchd: server returned an error
1565 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1571 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1573 AT_CHECK([tail -2 stderr], [0], [dnl
1574 Must specify bridge name
1575 ovs-appctl: ovs-vswitchd: server returned an error
1578 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1579 AT_CHECK([ovs-appctl ofproto/trace \
1580 ovs-dummy "$odp_flow" garbage_option],
1581 [2], [stdout],[stderr])
1582 AT_CHECK([tail -2 stderr], [0], [dnl
1583 Trailing garbage in packet data
1584 ovs-appctl: ovs-vswitchd: server returned an error
1587 # Test incorrect command: ofproto/trace with 4 arguments
1588 AT_CHECK([ovs-appctl ofproto/trace \
1589 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1590 AT_CHECK([tail -2 stderr], [0], [dnl
1591 "ofproto/trace" command takes at most 3 arguments
1592 ovs-appctl: ovs-vswitchd: server returned an error
1595 # Test incorrect command: ofproto/trace with 0 argument
1596 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1597 AT_CHECK([tail -2 stderr], [0], [dnl
1598 "ofproto/trace" command requires at least 1 arguments
1599 ovs-appctl: ovs-vswitchd: server returned an error
1605 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
1607 ADD_OF_PORTS([br0], 1, 2, 3)
1609 AT_DATA([flows.txt], [dnl
1610 in_port=1 actions=output:2
1611 in_port=2 actions=output:1
1613 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1615 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
1616 AT_CHECK([tail -1 stdout], [0], [dnl
1617 Datapath actions: push_vlan(vid=123,pcp=0),2
1624 m4_define([OFPROTO_TRACE],
1626 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1627 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1629 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1632 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1635 AT_SETUP([ofproto-dpif - MAC learning])
1636 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1637 ADD_OF_PORTS([br0], 1, 2, 3)
1639 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)'
1641 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1644 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1648 # Check for the MAC learning entry.
1649 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1651 3 0 50:54:00:00:00:05 ?
1654 # Trace a packet arrival destined for the learned MAC.
1655 # (This will also learn a MAC.)
1658 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1662 # Check for both MAC learning entries.
1663 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1665 3 0 50:54:00:00:00:05 ?
1666 1 0 50:54:00:00:00:06 ?
1669 # Trace a packet arrival that updates the first learned MAC entry.
1672 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1676 # Check that the MAC learning entry was updated.
1677 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1679 1 0 50:54:00:00:00:06 ?
1680 2 0 50:54:00:00:00:05 ?
1683 # Add another bridge.
1687 -- set bridge br1 datapath-type=dummy])
1688 ADD_OF_PORTS([br1], 4, 5)
1690 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1693 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1698 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1702 # Check that the MAC learning entries were added.
1703 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1705 4 0 50:54:00:00:00:06 ?
1706 5 0 50:54:00:00:00:07 ?
1709 # Delete port p1 and see that its MAC learning entry disappeared, and
1710 # that the MAC learning entry for the same MAC was also deleted from br1.
1711 AT_CHECK([ovs-vsctl del-port p1])
1712 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1714 2 0 50:54:00:00:00:05 ?
1716 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1718 5 0 50:54:00:00:00:07 ?
1724 AT_SETUP([ofproto-dpif - MAC table overflow])
1726 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1727 ADD_OF_PORTS([br0], 1, 2, 3)
1729 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)'
1731 AT_CHECK([ovs-appctl time/stop])
1733 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1734 for i in 0 1 2 3 4 5 6 7 8 9; do
1737 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1740 ovs-appctl time/warp 1000
1743 # Check for the MAC learning entries.
1744 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1746 3 0 50:54:00:00:00:00
1747 3 0 50:54:00:00:00:01
1748 3 0 50:54:00:00:00:02
1749 3 0 50:54:00:00:00:03
1750 3 0 50:54:00:00:00:04
1751 3 0 50:54:00:00:00:05
1752 3 0 50:54:00:00:00:06
1753 3 0 50:54:00:00:00:07
1754 3 0 50:54:00:00:00:08
1755 3 0 50:54:00:00:00:09
1759 # Trace another ARP packet on another MAC.
1762 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1766 # Check that the new one chased the oldest one out of the table.
1767 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1769 3 0 50:54:00:00:00:01 ?
1770 3 0 50:54:00:00:00:02 ?
1771 3 0 50:54:00:00:00:03 ?
1772 3 0 50:54:00:00:00:04 ?
1773 3 0 50:54:00:00:00:05 ?
1774 3 0 50:54:00:00:00:06 ?
1775 3 0 50:54:00:00:00:07 ?
1776 3 0 50:54:00:00:00:08 ?
1777 3 0 50:54:00:00:00:09 ?
1778 3 0 50:54:00:00:00:10 ?
1784 dnl Test that sFlow samples packets correctly.
1785 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1786 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1788 ON_EXIT([kill `cat test-sflow.pid`])
1789 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1790 AT_CAPTURE_FILE([sflow.log])
1791 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1793 ovs-appctl time/stop
1795 ADD_OF_PORTS([br0], 1, 2)
1797 set Interface br0 options:ifindex=1002 -- \
1798 set Interface p1 options:ifindex=1004 -- \
1799 set Interface p2 options:ifindex=1003 -- \
1800 set Bridge br0 sflow=@sf -- \
1801 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1802 header=128 sampling=1 polling=1
1804 dnl open with ARP packets to seed the bridge-learning. The output
1805 dnl ifIndex numbers should be reported predictably after that.
1806 dnl Since we set sampling=1 we should see all of these packets
1807 dnl reported. Sorting the output by data-source and seqNo makes
1808 dnl it deterministic. Ensuring that we send at least two packets
1809 dnl into each port means we get to check the seq nos are
1810 dnl incrementing correctly.
1812 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)'
1813 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)'
1814 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)'
1815 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)'
1816 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)'
1818 dnl sleep long enough to get more than one counter sample
1819 dnl from each datasource so we can check sequence numbers
1820 for i in `seq 1 30`; do
1821 ovs-appctl time/warp 100
1824 ovs-appctl -t test-sflow exit
1826 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1847 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
1867 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
1887 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
1907 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
1927 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-67-00-00-00-00-00-0A-80-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-01-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02-00-00-00-00-00-00
1930 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1944 in_broadcasts=4294967295
1947 in_unknownprotos=4294967295
1950 out_multicasts=4294967295
1951 out_broadcasts=4294967295
1967 in_broadcasts=4294967295
1970 in_unknownprotos=4294967295
1973 out_multicasts=4294967295
1974 out_broadcasts=4294967295
1990 in_broadcasts=4294967295
1993 in_unknownprotos=4294967295
1996 out_multicasts=4294967295
1997 out_broadcasts=4294967295
2013 in_broadcasts=4294967295
2016 in_unknownprotos=4294967295
2019 out_multicasts=4294967295
2020 out_broadcasts=4294967295
2036 in_broadcasts=4294967295
2039 in_unknownprotos=4294967295
2042 out_multicasts=4294967295
2043 out_broadcasts=4294967295
2059 in_broadcasts=4294967295
2062 in_unknownprotos=4294967295
2065 out_multicasts=4294967295
2066 out_broadcasts=4294967295
2075 dnl Test that basic NetFlow reports flow statistics correctly:
2076 dnl - The initial packet of a flow are correctly accounted.
2077 dnl - Later packets within a flow are correctly accounted.
2078 dnl - Flow actions changing (in this case, due to MAC learning)
2079 dnl cause a record to be sent.
2080 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
2082 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2083 ADD_OF_PORTS([br0], 1, 2)
2085 ovs-appctl time/stop
2086 ON_EXIT([kill `cat test-netflow.pid`])
2087 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2088 AT_CAPTURE_FILE([netflow.log])
2089 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2092 set Bridge br0 netflow=@nf -- \
2093 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2094 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2096 for delay in 1000 30000; do
2097 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)'
2098 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)'
2100 ovs-appctl time/warp $delay
2103 ovs-appctl time/warp 6000
2106 ovs-appctl -t test-netflow exit
2108 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
2110 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
2112 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
2113 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
2114 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
2118 dnl Test that basic NetFlow reports active expirations correctly.
2119 AT_SETUP([ofproto-dpif - NetFlow active expiration])
2121 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2122 ADD_OF_PORTS([br0], 1, 2)
2124 ON_EXIT([kill `cat test-netflow.pid`])
2125 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2126 AT_CAPTURE_FILE([netflow.log])
2127 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2130 set Bridge br0 netflow=@nf -- \
2131 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2132 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2134 AT_CHECK([ovs-appctl time/stop])
2136 while test $n -le 60; do
2139 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)'
2140 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)'
2142 ovs-appctl time/warp 1000
2145 ovs-appctl time/warp 10000
2149 ovs-appctl -t test-netflow exit
2151 # Count the number of reported packets:
2152 # - From source to destination before MAC learning kicks in (just one).
2153 # - From source to destination after that.
2154 # - From destination to source.
2162 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2169 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2172 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2175 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2182 eval $counter=\`expr \$$counter + \$pkts\`
2183 n_recs=`expr $n_recs + 1`
2186 # There should be exactly 1 MAC learning packet,
2187 # exactly 59 other packets in that direction,
2188 # and exactly 60 packets in the other direction.
2189 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2194 AT_SETUP([ofproto-dpif - flow stats])
2196 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
2197 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
2199 ovs-appctl time/stop
2201 for i in `seq 1 10`; do
2202 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)'
2205 ovs-appctl time/warp 1000
2207 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2208 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
2209 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
2210 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
2215 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
2217 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
2218 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
2220 ovs-appctl time/stop
2222 for i in `seq 1 10`; do
2223 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)'
2226 ovs-appctl time/warp 100
2227 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
2228 ovs-appctl time/warp 1000
2230 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2231 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
2232 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
2233 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
2238 AT_SETUP([idle_age and hard_age increase over time])
2241 # get_ages DURATION HARD IDLE
2243 # Fetch the flow duration, hard age, and idle age into the variables
2244 # whose names are given as arguments. Rounds DURATION down to the
2245 # nearest integer. If hard_age doesn't appear in the output, sets
2246 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2249 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2251 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2252 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2253 AS_VAR_COPY([$1], [duration])
2255 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2256 if test X"$hard" = X; then
2259 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2261 AS_VAR_COPY([$2], [hard])
2263 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2264 if test X"$idle" = X; then
2267 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2269 AS_VAR_COPY([$3], [idle])
2272 # Add a flow and get its initial hard and idle age.
2273 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2274 get_ages duration1 hard1 idle1
2276 ovs-appctl time/stop
2277 # Warp time forward by 10 seconds, then modify the flow's actions.
2278 ovs-appctl time/warp 10000
2279 get_ages duration2 hard2 idle2
2280 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2282 # Warp time forward by 10 seconds.
2283 ovs-appctl time/warp 10000
2284 get_ages duration3 hard3 idle3
2286 # Warp time forward 10 more seconds, then pass some packets through the flow,
2287 # then warp forward a few more times because idle times are only updated
2289 ovs-appctl time/warp 10000
2290 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)'
2291 ovs-appctl time/warp 1000
2292 ovs-appctl time/warp 1000
2293 ovs-appctl time/warp 1000
2294 get_ages duration4 hard4 idle4
2296 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2297 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2298 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2300 # Duration should increase steadily over time.
2301 AT_CHECK([test $duration1 -lt $duration2])
2302 AT_CHECK([test $duration2 -lt $duration3])
2303 AT_CHECK([test $duration3 -lt $duration4])
2305 # Hard age should be "none" initially because it's the same as flow_duration,
2306 # then it should increase.
2307 AT_CHECK([test $hard1 = none])
2308 AT_CHECK([test $hard2 = none])
2309 AT_CHECK([test $hard3 != none])
2310 AT_CHECK([test $hard4 != none])
2311 AT_CHECK([test $hard3 -lt $hard4])
2313 # Idle age should increase from 1 to 2 to 3, then decrease.
2314 AT_CHECK([test $idle1 -lt $idle2])
2315 AT_CHECK([test $idle2 -lt $idle3])
2316 AT_CHECK([test $idle3 -gt $idle4])
2318 # Check some invariant relationships.
2319 AT_CHECK([test $duration1 = $idle1])
2320 AT_CHECK([test $duration2 = $idle2])
2321 AT_CHECK([test $duration3 = $idle3])
2322 AT_CHECK([test $idle3 -gt $hard3])
2323 AT_CHECK([test $idle4 -lt $hard4])
2324 AT_CHECK([test $hard4 -lt $duration4])
2329 AT_SETUP([ofproto-dpif - fin_timeout])
2331 AT_DATA([flows.txt], [dnl
2332 in_port=1 actions=output:2
2333 in_port=2 actions=mod_vlan_vid:17,output:1
2335 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2336 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2338 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2341 ovs-appctl time/stop
2342 # Check that a TCP SYN packet does not change the timeout. (Because
2343 # flow stats updates are mainly what implements the fin_timeout
2344 # feature, we warp forward a couple of times to ensure that flow stats
2345 # run before re-checking the flow table.)
2346 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2347 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2350 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2352 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2354 # Check that a TCP FIN packet does change the timeout.
2355 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2356 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2359 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2361 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2366 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2367 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2368 ADD_OF_PORTS([br0], [1], [2])
2369 ADD_OF_PORTS([br1], [3])
2371 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2378 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2379 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2380 ADD_OF_PORTS([br0], [1], [2])
2381 ADD_OF_PORTS([br1], [3])
2383 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2384 dummy@ovs-dummy: hit:0 missed:0
2386 br0 65534/100: (dummy)
2390 br1 65534/101: (dummy)
2396 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2397 OVS_VSWITCHD_START([add-br br1 -- \
2398 set bridge br1 datapath-type=dummy fail-mode=secure])
2399 ADD_OF_PORTS([br0], [1], [2])
2400 ADD_OF_PORTS([br1], [3])
2402 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)'])
2403 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)'])
2404 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)'])
2406 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2407 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2408 skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2411 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2412 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2418 AT_SETUP([ofproto-dpif - patch ports])
2419 OVS_VSWITCHD_START([add-br br1 \
2420 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2421 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2422 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2424 ADD_OF_PORTS([br0], [2])
2425 ADD_OF_PORTS([br1], [3])
2427 AT_CHECK([ovs-appctl time/stop])
2429 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2430 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2432 for i in $(seq 1 10); do
2433 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)'
2436 for i in $(seq 1 5); do
2437 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)'
2440 AT_CHECK([ovs-appctl time/warp 500], [0],
2444 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2445 dummy@ovs-dummy: hit:13 missed:2
2447 br0 65534/100: (dummy)
2449 pbr0 1/none: (patch: peer=pbr1)
2451 br1 65534/101: (dummy)
2453 pbr1 1/none: (patch: peer=pbr0)
2456 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2457 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
2459 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2460 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
2463 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2464 OFPST_PORT reply (xid=0x4): 1 ports
2465 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2466 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2469 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2470 OFPST_PORT reply (xid=0x4): 1 ports
2471 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2472 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2478 AT_SETUP([ofproto-dpif - port duration])
2479 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2480 ADD_OF_PORTS([br0], 1, 2)
2482 ovs-appctl time/stop
2483 ovs-appctl time/warp 10000
2485 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2486 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2488 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2489 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2490 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2492 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2493 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2495 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2496 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2502 dnl ----------------------------------------------------------------------
2503 AT_BANNER([ofproto-dpif -- megaflows])
2505 # Strips out uninteresting parts of megaflow output, as well as parts
2506 # that vary from one run to another (e.g., timing and bond actions).
2507 m4_define([STRIP_USED], [[sed '
2508 s/used:[0-9]*\.[0-9]*/used:0.0/
2510 m4_define([STRIP_XOUT], [[sed '
2511 s/used:[0-9]*\.[0-9]*/used:0.0/
2512 s/actions:.*/actions: <del>/
2513 s/packets:[0-9]*/packets:0/
2514 s/bytes:[0-9]*/bytes:0/
2517 AT_SETUP([ofproto-dpif megaflow - port classification])
2519 ADD_OF_PORTS([br0], [1], [2])
2520 AT_DATA([flows.txt], [dnl
2521 table=0 in_port=1 actions=output(2)
2523 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2524 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)'])
2525 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)'])
2526 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2527 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
2532 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2534 ADD_OF_PORTS([br0], [1], [2])
2535 AT_DATA([flows.txt], [dnl
2536 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2538 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2539 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)'])
2540 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)'])
2541 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2542 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2543 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2548 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2550 ADD_OF_PORTS([br0], [1], [2])
2551 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
2552 AT_DATA([flows.txt], [dnl
2553 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2555 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2556 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)'])
2557 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)'])
2558 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2559 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2560 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2565 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
2567 ADD_OF_PORTS([br0], [1], [2])
2568 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
2569 AT_DATA([flows.txt], [dnl
2570 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
2572 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2573 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'])
2574 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
2575 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2576 skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2577 skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2582 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2584 ADD_OF_PORTS([br0], [1], [2])
2585 AT_DATA([flows.txt], [dnl
2586 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2588 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2589 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)'])
2590 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)'])
2591 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2592 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0), packets:0, bytes:0, used:0.0s, actions: <del>
2597 AT_SETUP([ofproto-dpif megaflow - normal])
2599 ADD_OF_PORTS([br0], [1], [2])
2600 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2601 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2602 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2603 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2604 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2605 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2610 AT_SETUP([ofproto-dpif megaflow - mpls])
2612 ADD_OF_PORTS([br0], [1], [2])
2613 AT_DATA([flows.txt], [dnl
2614 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2615 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2617 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2618 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2619 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2620 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2621 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), packets:0, bytes:0, used:never, actions: <del>
2622 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), packets:0, bytes:0, used:never, actions: <del>
2627 AT_SETUP([ofproto-dpif megaflow - netflow])
2629 ADD_OF_PORTS([br0], [1], [2])
2631 dnl NetFlow configuration disables wildcarding relevant fields
2632 ON_EXIT([kill `cat test-netflow.pid`])
2633 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2634 AT_CAPTURE_FILE([netflow.log])
2635 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2637 set Bridge br0 netflow=@nf -- \
2638 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2639 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2641 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2642 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)'])
2643 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)'])
2644 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2645 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
2646 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
2651 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2653 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2654 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2655 set interface p2 type=dummy ofport_request=2 -- \
2656 set interface p3 type=dummy ofport_request=3])
2657 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2660 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2661 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)'])
2662 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)'])
2663 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2664 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2665 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2670 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2672 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2673 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2674 set interface p2 type=dummy ofport_request=2 -- \
2675 set interface p3 type=dummy ofport_request=3])
2676 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2679 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2680 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(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)'])
2681 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00: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)'])
2682 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2683 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2684 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2689 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2690 # Create bond0 on br0 with interfaces p0 and p1
2691 # and bond1 on br1 with interfaces p2 and p3
2692 # with p0 patched to p2 and p1 patched to p3.
2694 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2695 other-config:lacp-time=fast \
2696 other-config:bond-rebalance-interval=0 -- \
2697 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2698 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2700 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2701 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2702 fail-mode=secure -- \
2703 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2704 other-config:lacp-time=fast \
2705 other-config:bond-rebalance-interval=0 -- \
2706 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2707 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2709 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2711 ADD_OF_PORTS([br0], [7])
2712 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2713 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2714 ovs-appctl time/stop
2715 ovs-appctl time/warp 5000
2716 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)'])
2717 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)'])
2719 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2720 skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
2721 skb_priority(0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
2726 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2728 ADD_OF_PORTS([br0], [1], [2])
2729 AT_DATA([flows.txt], [dnl
2730 table=0 in_port=1,ip actions=resubmit(90)
2731 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2733 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2734 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)'])
2735 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)'])
2736 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2737 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2738 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2743 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2745 ADD_OF_PORTS([br0], [1], [2])
2746 AT_DATA([flows.txt], [dnl
2747 table=0 in_port=1,ip actions=resubmit(,1)
2748 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2750 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2751 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)'])
2752 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=
2753 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2754 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2755 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2756 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2761 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2763 ADD_OF_PORTS([br0], [1], [2])
2764 AT_DATA([flows.txt], [dnl
2765 table=0 in_port=1,ip actions=goto_table(1)
2766 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2768 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2769 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)'])
2770 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)'])
2771 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2772 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2773 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2778 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2780 ADD_OF_PORTS([br0], [1], [2], [3])
2782 set Bridge br0 mirrors=@m --\
2783 --id=@p3 get Port p3 --\
2784 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2786 AT_DATA([flows.txt], [dnl
2787 in_port=1 actions=output:2
2789 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2790 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)'])
2791 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)'])
2792 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2793 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
2798 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2800 ADD_OF_PORTS([br0], [1], [2], [3])
2802 set Bridge br0 mirrors=@m --\
2803 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2804 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2806 AT_DATA([flows.txt], [dnl
2807 in_port=1 actions=output:2
2809 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2810 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))'])
2811 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)'])
2812 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2813 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2814 skb_priority(0),in_port(1),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff)), packets:0, bytes:0, used:never, actions: <del>
2819 AT_SETUP([ofproto-dpif megaflow - move action])
2821 ADD_OF_PORTS([br0], [1], [2])
2822 AT_DATA([flows.txt], [dnl
2823 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2824 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2825 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2827 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2828 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)'])
2829 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)'])
2830 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2831 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2832 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2837 AT_SETUP([ofproto-dpif megaflow - push action])
2839 ADD_OF_PORTS([br0], [1], [2])
2840 AT_DATA([flows.txt], [dnl
2841 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2843 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2844 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)'])
2845 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)'])
2846 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2847 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2848 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2853 AT_SETUP([ofproto-dpif megaflow - learning])
2855 ADD_OF_PORTS([br0], [1], [2])
2856 AT_DATA([flows.txt], [dnl
2857 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
2859 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2860 ovs-appctl time/stop
2861 # We send each packet twice because the first packet in each flow causes the
2862 # flow table to change and thus revalidations, which (depending on timing)
2863 # can keep a megaflow from being installed. The revalidations are done by
2864 # the second iteration, allowing the flows to be installed.
2866 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)'])
2867 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)'])
2868 ovs-appctl time/warp 100
2870 dnl The original flow is missing due to a revalidation.
2871 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2872 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
2873 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
2878 AT_SETUP([ofproto-dpif megaflow - tunnels])
2880 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
2881 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
2882 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
2883 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
2885 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
2886 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
2887 ofport_request=4 options:key=flow])
2888 AT_DATA([flows.txt], [dnl
2889 in_port=1,actions=output(2)
2890 in_port=3,actions=output(4)
2892 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2893 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2894 dnl will cause the packet to be dropped.
2895 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)'])
2896 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)'])
2897 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)'])
2898 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)'])
2899 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2900 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
2901 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2902 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2907 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2909 ADD_OF_PORTS([br0], [1], [2])
2910 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
2911 AT_DATA([flows.txt], [dnl
2912 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2914 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2915 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)'])
2916 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)'])
2917 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2918 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
2919 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no), packets:0, bytes:0, used:never, actions: <del>
2924 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2926 ADD_OF_PORTS([br0], [1], [2])
2927 AT_DATA([flows.txt], [dnl
2928 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2930 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2931 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)'])
2932 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)'])
2933 dnl The megaflows do not match the same fields, since the first packet
2934 dnl is essentially a no-op. (The new destination MAC is the same as the
2935 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2936 dnl so that a packet that doesn't need its MAC address changed doesn't
2937 dnl hide one that does. Since the first entry doesn't need to change,
2938 dnl only the destination MAC address is matched (as decided by
2939 dnl ofproto-dpif). The second entry actually updates the destination
2940 dnl MAC, so both the source and destination MAC addresses are
2941 dnl un-wildcarded, since the ODP commit functions update both the source
2942 dnl and destination MAC addresses.
2943 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2944 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:2
2945 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
2950 AT_SETUP([ofproto-dpif megaflow - disabled])
2952 ADD_OF_PORTS([br0], [1], [2])
2953 AT_DATA([flows.txt], [dnl
2954 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
2955 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
2957 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
2959 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
2960 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2961 for i in 1 2 3 4; do
2962 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)'])
2963 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)'])
2965 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2966 skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
2967 skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
2972 AT_SETUP([ofproto-dpif - datapath port number change])
2973 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2974 ADD_OF_PORTS([br0], 1)
2976 # Trace a flow that should output to p1.
2977 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2979 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2982 # Change p1's port number to 5.
2983 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2985 # Trace a flow that should output to p1 in its new location.
2986 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2988 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2993 # Tests the bundling with various bfd and cfm configurations.
2994 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2995 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2996 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2997 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2998 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2999 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
3000 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
3001 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
3002 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
3003 set Interface p0 cfm_mpid=1 -- \
3004 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
3006 ovs-appctl time/stop
3007 # advance the clock to stablize everything.
3008 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3009 # cfm/show should show 'recv' fault.
3010 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3013 # bfd/show should show 'up'.
3014 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3015 Local Session State: up
3016 Remote Session State: up
3017 Local Session State: up
3018 Remote Session State: up
3020 # bond/show should show 'may-enable: true' for all slaves.
3021 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3028 # now disable the bfd on p1.
3029 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3030 # advance the clock to stablize everything.
3031 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3032 # cfm/show should show 'recv' fault.
3033 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3036 # bfd/show should show 'down'.
3037 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3038 Local Session State: down
3039 Remote Session State: down
3041 # bond/show should show 'may-enable: false' for p0.
3042 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3049 # now enable the bfd on p1 and disable bfd on p0.
3050 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3051 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3052 # advance the clock to stablize everything.
3053 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3054 # cfm/show should show 'recv' fault.
3055 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3058 # bfd/show should show 'down'.
3059 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3060 Local Session State: down
3061 Remote Session State: down
3063 # bond/show should show 'may-enable: false' for p0 and p1.
3064 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3074 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3075 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3078 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3080 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3081 monitor thread created
3083 # disable bfd on p0.
3084 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3086 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3087 monitor thread terminated
3089 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3092 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3094 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3095 monitor thread created
3097 # disable cfm on p0.
3098 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3100 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3101 monitor thread terminated
3103 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3105 # enable both bfd and cfm on p0.
3106 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3108 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3109 monitor thread created
3111 # disable bfd on p0.
3112 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3113 # check log, there should not be the log of thread terminated.
3114 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3116 # reenable bfd on p0.
3117 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3118 # check log, should still be on log of thread created.
3119 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3120 monitor thread created
3122 # disable bfd and cfm together.
3123 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3125 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3126 monitor thread terminated
3132 # this test helps avoid the deadlock between the main thread and monitor thread.
3133 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3136 for i in `seq 1 199`
3138 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])
3144 AT_BANNER([ofproto-dpif - flow translation resource limits])
3146 AT_SETUP([ofproto-dpif - infinite resubmit])
3148 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3149 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3151 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3153 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3156 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3159 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3161 ADD_OF_PORTS([br0], 1)
3162 (for i in `seq 1 64`; do
3164 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3166 echo "in_port=65, actions=local") > flows
3167 AT_CHECK([ovs-ofctl add-flows br0 flows])
3168 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3169 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3171 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3174 AT_SETUP([ofproto-dpif - too many output actions])
3176 ADD_OF_PORTS([br0], 1)
3177 (for i in `seq 1 12`; do
3179 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3181 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3182 AT_CHECK([ovs-ofctl add-flows br0 flows])
3183 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3184 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3187 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3189 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3192 AT_SETUP([ofproto-dpif - stack too deep])
3194 ADD_OF_PORTS([br0], 1)
3195 (for i in `seq 1 12`; do
3197 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3199 push="push:NXM_NX_REG0[[]]"
3200 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3201 AT_CHECK([ovs-ofctl add-flows br0 flows])
3202 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3203 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3205 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])