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