]> git.proxmox.com Git - ovs.git/blob - tests/pmd.at
Fix ovs-dpctl-top by removing 3 wrong hunks in py3-compat.patch.
[ovs.git] / tests / pmd.at
1 AT_BANNER([PMD])
2
3 m4_divert_push([PREPARE_TESTS])
4
5 # Given the output of `ovs-appctl dpif-netdev/pmd-rxq-show`, prints a list
6 # of every rxq (one per line) in the form:
7 # port_name rxq_id numa_id core_id
8 parse_pmd_rxq_show () {
9 awk '/pmd thread/ {numa=$4; core=substr($6, 1, length($6) - 1)} /^ port:/ {print $2, $4, numa, core}' | sort
10 }
11
12 # Given the output of `ovs-appctl dpif-netdev/pmd-rxq-show`,
13 # and with queues for each core on one line, prints the rxqs
14 # of the core on one line
15 # 'port:' port_name 'queue_id:' rxq_id rxq_id rxq_id rxq_id
16 parse_pmd_rxq_show_group () {
17 awk '/port:/ {print $1, $2, $3, $4, $13, $22, $31}'
18 }
19
20 # Given the output of `ovs-appctl dpctl/dump-flows`, prints a list of flows
21 # (one per line), with the pmd_id at the beginning of the line
22 #
23 flow_dump_prepend_pmd () {
24 awk '/flow-dump from the main/ {pmd_id=-1; next} /flow-dump from pmd/ {pmd_id=$7; next} {print pmd_id, $0}' | sort
25 }
26
27 m4_divert_pop([PREPARE_TESTS])
28
29 dnl CHECK_CPU_DISCOVERED([n_cpu])
30 dnl
31 dnl Waits until CPUs discovered and checks if number of discovered CPUs
32 dnl is greater or equal to 'n_cpu'. Without parameters checks that at
33 dnl least one CPU discovered.
34 m4_define([CHECK_CPU_DISCOVERED], [
35 PATTERN="Discovered [[0-9]]* NUMA nodes and [[0-9]]* CPU cores"
36 OVS_WAIT_UNTIL([grep "$PATTERN" ovs-vswitchd.log])
37 N_CPU=$(grep "$PATTERN" ovs-vswitchd.log | sed -e 's/.* \([[0-9]]*\) CPU cores/\1/')
38 if [[ -z "$1" ]]
39 then AT_CHECK([test "$N_CPU" -gt "0"])
40 else AT_SKIP_IF([test "$N_CPU" -lt "$1"])
41 fi
42 ])
43
44 dnl CHECK_PMD_THREADS_CREATED([n_threads], [numa_id], [+line])
45 dnl
46 dnl Whaits for creation of 'n_threads' or at least 1 thread if $1 not
47 dnl passed. Checking starts from line number 'line' in ovs-vswithd.log .
48 m4_define([CHECK_PMD_THREADS_CREATED], [
49 PATTERN="There are [[0-9]]* pmd threads on numa node $2"
50 line_st=$3
51 if [[ -z "$line_st" ]]
52 then
53 line_st="+0"
54 fi
55 OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "$PATTERN"])
56 N_THREADS=$(tail -n $line_st ovs-vswitchd.log | grep "$PATTERN" | tail -1 | sed -e 's/.* \([[0-9]]*\) pmd .*/\1/')
57 if [[ -z "$1" ]]
58 then AT_CHECK([test "$N_THREADS" -gt 0])
59 else AT_CHECK([test "$N_THREADS" -eq "$1"])
60 fi
61 ])
62
63 m4_define([SED_NUMA_CORE_PATTERN], ["s/\(numa_id \)[[0-9]]*\( core_id \)[[0-9]]*:/\1<cleared>\2<cleared>:/"])
64 m4_define([DUMMY_NUMA], [--dummy-numa="0,0,0,0"])
65
66 AT_SETUP([PMD - creating a thread/add-port])
67 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
68
69 CHECK_CPU_DISCOVERED()
70 CHECK_PMD_THREADS_CREATED()
71
72 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
73 pmd thread numa_id <cleared> core_id <cleared>:
74 isolated : false
75 port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL
76 ])
77
78 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
79 dummy@ovs-dummy: hit:0 missed:0
80 br0:
81 br0 65534/100: (dummy-internal)
82 p0 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>)
83 ])
84
85 OVS_VSWITCHD_STOP
86 AT_CLEANUP
87
88 AT_SETUP([PMD - multiqueue support])
89 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
90
91 CHECK_CPU_DISCOVERED()
92 CHECK_PMD_THREADS_CREATED()
93
94 AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=8])
95
96 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
97 dummy@ovs-dummy: hit:0 missed:0
98 br0:
99 br0 65534/100: (dummy-internal)
100 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
101 ])
102
103 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
104 pmd thread numa_id <cleared> core_id <cleared>:
105 isolated : false
106 port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL
107 port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL
108 port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL
109 port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL
110 port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL
111 port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL
112 port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL
113 port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL
114 ])
115
116 OVS_VSWITCHD_STOP
117 AT_CLEANUP
118
119
120 AT_SETUP([PMD - pmd-cpu-mask/distribution of rx queues])
121 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd options:n_rxq=8],
122 [], [], [DUMMY_NUMA])
123
124 CHECK_CPU_DISCOVERED(2)
125 CHECK_PMD_THREADS_CREATED()
126
127 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
128 dummy@ovs-dummy: hit:0 missed:0
129 br0:
130 br0 65534/100: (dummy-internal)
131 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
132 ])
133
134 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
135 pmd thread numa_id <cleared> core_id <cleared>:
136 isolated : false
137 port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL
138 port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL
139 port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL
140 port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL
141 port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL
142 port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL
143 port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL
144 port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL
145 ])
146
147 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles])
148 TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
149 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3])
150 CHECK_PMD_THREADS_CREATED([2], [], [+$TMP])
151
152 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl
153 port: p0 queue-id: 0 3 4 7
154 port: p0 queue-id: 1 2 5 6
155 ])
156
157 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin])
158 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl
159 port: p0 queue-id: 0 2 4 6
160 port: p0 queue-id: 1 3 5 7
161 ])
162
163 TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
164 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1])
165 CHECK_PMD_THREADS_CREATED([1], [], [+$TMP])
166
167 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
168 pmd thread numa_id <cleared> core_id <cleared>:
169 isolated : false
170 port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL
171 port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL
172 port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL
173 port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL
174 port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL
175 port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL
176 port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL
177 port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL
178 ])
179
180 OVS_VSWITCHD_STOP
181 AT_CLEANUP
182
183
184 AT_SETUP([PMD - stats])
185 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 ofport_request=7 type=dummy-pmd options:n_rxq=4],
186 [], [], [DUMMY_NUMA])
187
188 CHECK_CPU_DISCOVERED()
189 CHECK_PMD_THREADS_CREATED()
190
191 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg])
192 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
193 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:emc-insert-inv-prob=1])
194 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:smc-enable=true])
195
196 sleep 1
197
198 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
199 dummy@ovs-dummy: hit:0 missed:0
200 br0:
201 br0 65534/100: (dummy-internal)
202 p0 7/1: (dummy-pmd: configured_rx_queues=4, configured_tx_queues=<cleared>, requested_rx_queues=4, requested_tx_queues=<cleared>)
203 ])
204
205 AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 9], [0], [dnl
206 pmd thread numa_id <cleared> core_id <cleared>:
207 packets received: 0
208 packet recirculations: 0
209 avg. datapath passes per packet: 0.00
210 emc hits: 0
211 smc hits: 0
212 megaflow hits: 0
213 avg. subtable lookups per megaflow hit: 0.00
214 miss with success upcall: 0
215 miss with failed upcall: 0
216 ])
217
218 ovs-appctl time/stop
219 ovs-appctl time/warp 100
220 (
221 for i in `seq 0 19`;
222 do
223 pkt="in_port(7),eth(src=50:54:00:00:00:77,dst=50:54:00:00:01:78),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)"
224 AT_CHECK([ovs-appctl netdev-dummy/receive p0 $pkt])
225 done
226 )
227 ovs-appctl time/warp 100
228
229 AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
230 skb_priority(0),skb_mark(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:77,dst=50:54:00:00:01:78),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)
231 ])
232 AT_CHECK([cat ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
233 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:77,dst=50:54:00:00:01:78),eth_type(0x0800),ipv4(frag=no), actions: <del>
234 ])
235
236 AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 9], [0], [dnl
237 pmd thread numa_id <cleared> core_id <cleared>:
238 packets received: 20
239 packet recirculations: 0
240 avg. datapath passes per packet: 1.00
241 emc hits: 19
242 smc hits: 0
243 megaflow hits: 0
244 avg. subtable lookups per megaflow hit: 0.00
245 miss with success upcall: 1
246 miss with failed upcall: 0
247 ])
248
249 OVS_VSWITCHD_STOP
250 AT_CLEANUP
251
252 dnl Reconfigure the number of rx queues of a port, make sure that all the
253 dnl queues are polled by the datapath and try to send a couple of packets.
254 AT_SETUP([PMD - reconfigure n_rxq])
255 OVS_VSWITCHD_START(
256 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
257 add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2
258 ], [], [], [--dummy-numa 0])
259 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
260
261 AT_CHECK([ovs-ofctl add-flow br0 action=controller])
262
263 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
264 p1 0 0 0
265 p1 1 0 0
266 p2 0 0 0
267 ])
268
269 AT_CAPTURE_FILE([ofctl_monitor.log])
270 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
271
272 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 1 '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)'])
273
274 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
275 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
276
277 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
278 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
279 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
280 ])
281
282 AT_CHECK([ovs-vsctl set interface p1 options:n_rxq=4])
283
284 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
285 p1 0 0 0
286 p1 1 0 0
287 p1 2 0 0
288 p1 3 0 0
289 p2 0 0 0
290 ])
291
292 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
293
294 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 3 '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)'])
295
296 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
297 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
298
299 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
300 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
301 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
302 ])
303
304 dnl Check resetting to default number of rx queues after removal from the db.
305 AT_CHECK([ovs-vsctl remove interface p1 options n_rxq])
306
307 AT_CHECK([ovs-appctl dpif/show | grep p1 | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
308 p1 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>)
309 ])
310
311 OVS_VSWITCHD_STOP
312 AT_CLEANUP
313
314 dnl There was a bug where OVS failed to create a ukey and install a megaflow
315 dnl if a packet with the exact same flow was received by two different pmd
316 dnl threads. This is a regression test for that bug.
317 AT_SETUP([PMD - same flow multiple threads])
318 OVS_VSWITCHD_START(
319 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
320 set Open_vSwitch . other_config:pmd-cpu-mask=3
321 ], [], [], [--dummy-numa 0,0])
322 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
323
324 AT_CHECK([ovs-ofctl add-flow br0 action=controller])
325
326 dnl Make sure that the queues are on different cores. There's no way to
327 dnl control which queue is on which thread, we just need to make sure that
328 dnl two threads (core_id) show up in pmd-rxq-show
329 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 4 -d ' ' | sort], [0], [dnl
330 0
331 1
332 ])
333
334 AT_CAPTURE_FILE([ofctl_monitor.log])
335 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
336
337 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 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)'])
338
339 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 1 '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)'])
340
341 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
342 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
343
344 dnl Make sure that both flows have been installed
345 AT_CHECK([ovs-appctl dpctl/dump-flows | flow_dump_prepend_pmd], [0], [dnl
346 0 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,controller(reason=1,dont_send=0,continuation=0,recirc_id=1,rule_cookie=0,controller_id=0,max_len=65535))
347 1 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,controller(reason=1,dont_send=0,continuation=0,recirc_id=1,rule_cookie=0,controller_id=0,max_len=65535))
348 ])
349
350 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
351 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
352 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
353 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
354 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
355 ])
356
357 OVS_VSWITCHD_STOP
358 AT_CLEANUP
359
360 AT_SETUP([PMD - change numa node])
361 OVS_VSWITCHD_START(
362 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
363 add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 options:n_rxq=2 -- \
364 set Open_vSwitch . other_config:pmd-cpu-mask=3
365 ], [], [], [--dummy-numa 0,1])
366 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
367
368 AT_CHECK([ovs-ofctl add-flow br0 action=controller])
369
370 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
371 p1 0 0 0
372 p1 1 0 0
373 p2 0 0 0
374 p2 1 0 0
375 ])
376
377 AT_CAPTURE_FILE([ofctl_monitor.log])
378 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
379
380 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 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)'])
381
382 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
383 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
384
385 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
386 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
387 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
388 ])
389
390 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
391
392 AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 1 '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)'])
393
394 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
395 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
396
397 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
398 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered)
399 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
400 ])
401
402 AT_CHECK([ovs-vsctl set Interface p2 options:numa_id=1])
403
404 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
405 p1 0 0 0
406 p1 1 0 0
407 p2 0 1 1
408 p2 1 1 1
409 ])
410
411 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
412
413 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 1 '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)'])
414
415 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
416 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
417
418 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
419 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
420 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
421 ])
422
423 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
424
425 AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 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)'])
426
427 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
428 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
429
430 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
431 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=2 (via action) data_len=106 (unbuffered)
432 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
433 ])
434
435 OVS_VSWITCHD_STOP
436 AT_CLEANUP
437
438 AT_SETUP([PMD - non pmd device])
439 OVS_VSWITCHD_START(
440 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1 -- \
441 add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 -- \
442 set Interface br0 options:tx_pcap=br0.pcap -- \
443 set Open_vSwitch . other_config:pmd-cpu-mask=1
444 ], [], [], [--dummy-numa 0,0])
445 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
446
447 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL])
448
449 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
450 p1 0 0 0
451 ])
452
453 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 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)'])
454
455 AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 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)'])
456
457 OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 2])
458
459 AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
460 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
461 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
462 ])
463
464 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=2])
465
466 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
467 p1 0 0 1
468 ])
469
470 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
471
472 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 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)'])
473
474 AT_CHECK([ovs-appctl netdev-dummy/receive p2 --qid 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)'])
475
476 OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 4])
477
478 AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
479 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
480 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
481 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
482 50540000000a50540000000908004500005c000000004001669f0a0000020a000001080013fc00000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
483 ])
484
485 OVS_VSWITCHD_STOP
486 AT_CLEANUP
487
488 AT_SETUP([PMD - add remove ports])
489 OVS_VSWITCHD_START(
490 [], [], [], [--dummy-numa 0,0])
491 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
492
493 AT_CHECK([ovs-ofctl add-flow br0 actions=controller])
494
495 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1])
496
497 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
498 p1 0 0 0
499 ])
500
501 AT_CAPTURE_FILE([ofctl_monitor.log])
502 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
503
504 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 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)'])
505
506 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
507 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
508
509 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
510 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
511 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
512 ])
513
514 AT_CHECK([ovs-vsctl del-port br0 p1])
515 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1])
516
517 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
518
519 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 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)'])
520
521 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
522 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
523
524 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
525 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered)
526 icmp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 icmp_csum:13fc
527 ])
528
529 OVS_VSWITCHD_STOP
530 AT_CLEANUP
531
532 AT_SETUP([PMD - rxq affinity])
533 OVS_VSWITCHD_START(
534 [], [], [], [--dummy-numa 0,0,0,0,0,0,0,0,0])
535 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
536
537 AT_CHECK([ovs-ofctl add-flow br0 actions=controller])
538
539 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1fe])
540
541 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=4 other_config:pmd-rxq-affinity="0:3,1:7,2:2,3:8"])
542
543 dnl The rxqs should be on the requested cores.
544 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
545 p1 0 0 3
546 p1 1 0 7
547 p1 2 0 2
548 p1 3 0 8
549 ])
550
551 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=6])
552
553 dnl We removed the cores requested by some queues from pmd-cpu-mask.
554 dnl Those queues will not be polled.
555 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
556 p1 2 0 2
557 ])
558
559 AT_CHECK([ovs-vsctl remove Interface p1 other_config pmd-rxq-affinity])
560
561 dnl We removed the rxq-affinity request. dpif-netdev should assign queues
562 dnl in a round robin fashion. We just make sure that every rxq is being
563 dnl polled again.
564 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2 -d ' ' | sort], [0], [dnl
565 p1 0
566 p1 1
567 p1 2
568 p1 3
569 ])
570
571 AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity='0:1'])
572
573 dnl We explicitly requested core 1 for queue 0. Core 1 becomes isolated and
574 dnl every other queue goes to core 2.
575 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
576 p1 0 0 1
577 p1 1 0 2
578 p1 2 0 2
579 p1 3 0 2
580 ])
581
582 OVS_VSWITCHD_STOP(["/dpif_netdev|WARN|There is no PMD thread on core/d"])
583 AT_CLEANUP
584
585 AT_SETUP([PMD - rxq affinity - NUMA])
586 OVS_VSWITCHD_START(
587 [], [], [], [--dummy-numa 0,0,0,1,1])
588 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
589
590 AT_CHECK([ovs-ofctl add-flow br0 actions=controller])
591
592 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=7e])
593
594 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 options:numa_id=0 other_config:pmd-rxq-affinity="0:1,1:2"])
595
596 dnl The rxqs should be on the requested cores.
597 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
598 p1 0 0 1
599 p1 1 0 2
600 ])
601
602 AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity="0:3,1:4"])
603
604 dnl We moved the queues to different numa node. Expecting threads on
605 dnl NUMA node 1 to be created.
606 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
607 p1 0 1 3
608 p1 1 1 4
609 ])
610
611 AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity="0:3,1:1"])
612
613 dnl Queues splitted between NUMA nodes.
614 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
615 p1 0 1 3
616 p1 1 0 1
617 ])
618
619 AT_CHECK([ovs-vsctl remove Interface p1 other_config pmd-rxq-affinity])
620
621 dnl We removed the rxq-affinity request. dpif-netdev should assign queues
622 dnl in a round robin fashion. We just make sure that every rxq is being
623 dnl polled again.
624 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2 -d ' ' | sort], [0], [dnl
625 p1 0
626 p1 1
627 ])
628
629 AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity='0:3'])
630
631 dnl We explicitly requesting NUMA node 1 for queue 0.
632 dnl Queue 1 should be polled by thread from NUMA node 0.
633 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2,3 -d ' '], [0], [dnl
634 p1 0 1
635 p1 1 0
636 ])
637
638 OVS_VSWITCHD_STOP
639 AT_CLEANUP
640
641 AT_SETUP([PMD - monitor threads])
642 OVS_VSWITCHD_START(
643 [], [], [], [--dummy-numa 0,0])
644 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
645
646 dnl The two devices are connected together externally using net.sock
647 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1 options:pstream=punix:$OVS_RUNDIR/net.sock])
648 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 options:n_rxq=1 options:stream=unix:$OVS_RUNDIR/net.sock])
649
650 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
651 p1 0 0 0
652 p2 0 0 0
653 ])
654
655 dnl Enable bfd with a very aggressive interval. This will make the monitor very
656 dnl busy, and uncover race conditions with the main thread.
657 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true bfd:min_rx=1 bfd:min_tx=1])
658 AT_CHECK([ovs-vsctl set Interface p2 bfd:enable=true bfd:min_rx=1 bfd:min_tx=1])
659
660 AT_CHECK([ovs-vsctl wait-until Interface p1 bfd_status:forwarding=true \
661 -- wait-until Interface p2 bfd_status:forwarding=true])
662
663 dnl Trigger reconfiguration of the datapath
664 AT_CHECK([ovs-vsctl set Interface p1 options:n_rxq=2])
665 AT_CHECK([ovs-vsctl set Interface p2 options:n_rxq=2])
666
667 dnl Make sure that reconfiguration succeded
668 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
669 p1 0 0 0
670 p1 1 0 0
671 p2 0 0 0
672 p2 1 0 0
673 ])
674
675 OVS_VSWITCHD_STOP
676 AT_CLEANUP
677
678 AT_SETUP([PMD - dpctl])
679 OVS_VSWITCHD_START(
680 [del-br br0], [], [], [--dummy-numa 0,0])
681 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
682
683 AT_CHECK([ovs-appctl dpctl/add-dp dummy@dp0])
684 AT_CHECK([ovs-appctl dpctl/add-if dummy@dp0 p1,type=dummy-pmd])
685 AT_CHECK([ovs-appctl dpctl/add-if dummy@dp0 p2,type=dummy])
686
687 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show dp0 | parse_pmd_rxq_show], [0], [dnl
688 p1 0 0 0
689 ])
690
691 AT_CHECK([ovs-appctl dpctl/show dummy@dp0], [0], [dnl
692 dummy@dp0:
693 lookups: hit:0 missed:0 lost:0
694 flows: 0
695 port 0: dp0 (dummy-internal)
696 port 1: p1 (dummy-pmd: configured_rx_queues=1, configured_tx_queues=1, requested_rx_queues=1, requested_tx_queues=1)
697 port 2: p2 (dummy)
698 ])
699
700 AT_CHECK([ovs-appctl dpctl/add-flow dummy@dp0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234)' 2], [0], [dnl
701 ])
702
703 AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0 | sort], [0], [dnl
704 flow-dump from pmd on cpu core: 0
705 flow-dump from the main thread:
706 recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2
707 recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2
708 ])
709
710 dnl Check pmd filtering option.
711 AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0 pmd=0], [0], [dnl
712 recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2
713 ])
714
715 AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0 pmd=-1], [0], [dnl
716 recirc_id(0),in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234), packets:0, bytes:0, used:never, actions:2
717 ])
718
719 AT_CHECK([ovs-appctl dpctl/del-flow dummy@dp0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x1234)'], [0], [dnl
720 ])
721
722 AT_CHECK([ovs-appctl dpctl/dump-flows dummy@dp0], [0], [dnl
723 ])
724
725 AT_CHECK([ovs-appctl dpctl/del-dp dummy@dp0], [0], [dnl
726 ])
727
728 OVS_VSWITCHD_STOP
729 AT_CLEANUP