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