]> git.proxmox.com Git - mirror_ovs.git/blame - tests/pmd.at
ovn: Rename "nd" action to "nd_na".
[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], [
41 PATTERN="Created [[0-9]]* pmd threads on numa node $2"
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>:/"])
56m4_define([DUMMY_NUMA], [--dummy-numa="0,0,0,0,1,1,1,1"])
57
58AT_SETUP([PMD - creating a thread/add-port])
59OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
60
61CHECK_CPU_DISCOVERED()
62CHECK_PMD_THREADS_CREATED()
63
64AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
65pmd thread numa_id <cleared> core_id <cleared>:
3eb67853 66 isolated : false
589dd1d5
IM
67 port: p0 queue-id: 0
68])
69
70AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
71dummy@ovs-dummy: hit:0 missed:0
72 br0:
73 br0 65534/100: (dummy)
74 p0 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>)
75])
76
77OVS_VSWITCHD_STOP
78AT_CLEANUP
79
80AT_SETUP([PMD - multiqueue support])
81OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
82
83CHECK_CPU_DISCOVERED()
84CHECK_PMD_THREADS_CREATED()
85
86AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=8])
87
88AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
89dummy@ovs-dummy: hit:0 missed:0
90 br0:
91 br0 65534/100: (dummy)
92 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
93])
94
95AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
96pmd thread numa_id <cleared> core_id <cleared>:
3eb67853 97 isolated : false
589dd1d5
IM
98 port: p0 queue-id: 0 1 2 3 4 5 6 7
99])
100
101OVS_VSWITCHD_STOP
102AT_CLEANUP
103
104
105AT_SETUP([PMD - pmd-cpu-mask/distribution of rx queues])
106OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd options:n_rxq=8],
107 [], [], [DUMMY_NUMA])
108
109CHECK_CPU_DISCOVERED(2)
110CHECK_PMD_THREADS_CREATED()
111
112AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
113dummy@ovs-dummy: hit:0 missed:0
114 br0:
115 br0 65534/100: (dummy)
116 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
117])
118
119AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
120pmd thread numa_id <cleared> core_id <cleared>:
3eb67853 121 isolated : false
589dd1d5
IM
122 port: p0 queue-id: 0 1 2 3 4 5 6 7
123])
124
125TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
126AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=3])
127CHECK_PMD_THREADS_CREATED([2], [], [+$TMP])
128
129AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
130pmd thread numa_id <cleared> core_id <cleared>:
3eb67853 131 isolated : false
589dd1d5
IM
132 port: p0 queue-id: 0 2 4 6
133pmd thread numa_id <cleared> core_id <cleared>:
3eb67853 134 isolated : false
589dd1d5
IM
135 port: p0 queue-id: 1 3 5 7
136])
137
138TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
139AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=1])
140CHECK_PMD_THREADS_CREATED([1], [], [+$TMP])
141
142AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
143pmd thread numa_id <cleared> core_id <cleared>:
3eb67853 144 isolated : false
589dd1d5
IM
145 port: p0 queue-id: 0 1 2 3 4 5 6 7
146])
147
148OVS_VSWITCHD_STOP
149AT_CLEANUP
150
151
152AT_SETUP([PMD - stats])
153OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 ofport_request=7 type=dummy-pmd options:n_rxq=4],
154 [], [], [DUMMY_NUMA])
155
156CHECK_CPU_DISCOVERED()
157CHECK_PMD_THREADS_CREATED()
158
159AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg])
160AT_CHECK([ovs-ofctl add-flow br0 action=normal])
161
162sleep 1
163
164AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
165dummy@ovs-dummy: hit:0 missed:0
166 br0:
167 br0 65534/100: (dummy)
168 p0 7/1: (dummy-pmd: configured_rx_queues=4, configured_tx_queues=<cleared>, requested_rx_queues=4, requested_tx_queues=<cleared>)
169])
170
171AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl
172pmd thread numa_id <cleared> core_id <cleared>:
173 emc hits:0
174 megaflow hits:0
175 miss:0
176 lost:0
177])
178
179ovs-appctl time/stop
180ovs-appctl time/warp 100
181(
182for i in `seq 0 19`;
183 do
184 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)"
185 AT_CHECK([ovs-appctl netdev-dummy/receive p0 $pkt])
186 done
187)
188ovs-appctl time/warp 100
189
190AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
5cf3edb3 191skb_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),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
192])
193AT_CHECK([cat ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
9044f2c1 194recirc_id(0),in_port(1),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
195])
196
197AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl
198pmd thread numa_id <cleared> core_id <cleared>:
199 emc hits:19
200 megaflow hits:0
201 miss:1
202 lost:0
203])
204
205OVS_VSWITCHD_STOP
206AT_CLEANUP
a12e2a88
DDP
207
208dnl Reconfigure the number of rx queues of a port, make sure that all the
209dnl queues are polled by the datapath and try to send a couple of packets.
210AT_SETUP([PMD - reconfigure n_rxq])
211OVS_VSWITCHD_START(
212 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
213 add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2
214], [], [], [--dummy-numa 0])
215AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
216
217AT_CHECK([ovs-ofctl add-flow br0 action=controller])
218
219AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
220p1 0 0 0
221p1 1 0 0
222p2 0 0 0
223])
224
225AT_CAPTURE_FILE([ofctl_monitor.log])
226AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
227
228AT_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)'])
229
230OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
231OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
232
233AT_CHECK([cat ofctl_monitor.log], [0], [dnl
efe179e0 234NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88
DDP
235icmp,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
236])
237
238AT_CHECK([ovs-vsctl set interface p1 options:n_rxq=4])
239
240AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
241p1 0 0 0
242p1 1 0 0
243p1 2 0 0
244p1 3 0 0
245p2 0 0 0
246])
247
248AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
249
250AT_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)'])
251
252OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
253OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
254
255AT_CHECK([cat ofctl_monitor.log], [0], [dnl
efe179e0 256NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88
DDP
257icmp,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
258])
259
260OVS_VSWITCHD_STOP
261AT_CLEANUP
262
263dnl There was a bug where OVS failed to create a ukey and install a megaflow
264dnl if a packet with the exact same flow was received by two different pmd
265dnl threads. This is a regression test for that bug.
266AT_SETUP([PMD - same flow multiple threads])
267OVS_VSWITCHD_START(
268 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
269 set Open_vSwitch . other_config:pmd-cpu-mask=3
270], [], [], [--dummy-numa 0,0])
271AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
272
273AT_CHECK([ovs-ofctl add-flow br0 action=controller])
274
275dnl Make sure that the queues are on different cores. There's no way to
276dnl control which queue is on which thread, we just need to make sure that
277dnl two threads (core_id) show up in pmd-rxq-show
278AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 4 -d ' ' | sort], [0], [dnl
2790
2801
281])
282
283AT_CAPTURE_FILE([ofctl_monitor.log])
284AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
285
286AT_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)'])
287
288AT_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)'])
289
290OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
291OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
292
293dnl Make sure that both flows have been installed
294AT_CHECK([ovs-appctl dpctl/dump-flows | flow_dump_prepend_pmd], [0], [dnl
2950 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
2961 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
297])
298
299AT_CHECK([cat ofctl_monitor.log], [0], [dnl
efe179e0 300NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88 301icmp,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 302NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88
DDP
303icmp,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
304])
305
306OVS_VSWITCHD_STOP
307AT_CLEANUP
308
309AT_SETUP([PMD - change numa node])
310OVS_VSWITCHD_START(
311 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
312 add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 options:n_rxq=2 -- \
313 set Open_vSwitch . other_config:pmd-cpu-mask=3
314], [], [], [--dummy-numa 0,1])
315AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
316
317AT_CHECK([ovs-ofctl add-flow br0 action=controller])
318
319AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
320p1 0 0 0
321p1 1 0 0
322p2 0 0 0
323p2 1 0 0
324])
325
326AT_CAPTURE_FILE([ofctl_monitor.log])
327AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
328
329AT_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)'])
330
331AT_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)'])
332
333OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
334OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
335
336AT_CHECK([cat ofctl_monitor.log], [0], [dnl
efe179e0 337NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88 338icmp,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 339NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
a12e2a88
DDP
340icmp,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
341])
342
343AT_CHECK([ovs-vsctl set Interface p2 options:numa_id=1])
344
345AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
346p1 0 0 0
347p1 1 0 0
348p2 0 1 1
349p2 1 1 1
350])
351
352AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
353
354AT_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)'])
355
356AT_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)'])
357
358OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
359OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
360
361AT_CHECK([cat ofctl_monitor.log], [0], [dnl
efe179e0 362NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88 363icmp,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 364NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
a12e2a88
DDP
365icmp,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
366])
367
368OVS_VSWITCHD_STOP
369AT_CLEANUP
370
371AT_SETUP([PMD - non pmd device])
372OVS_VSWITCHD_START(
373 [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1 -- \
374 add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 -- \
375 set Interface br0 options:tx_pcap=br0.pcap -- \
376 set Open_vSwitch . other_config:pmd-cpu-mask=1
377], [], [], [--dummy-numa 0,0])
378AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
379
380AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL])
381
382AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
383p1 0 0 0
384])
385
386AT_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)'])
387
388AT_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)'])
389
390OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 2])
391
392AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
efe179e0
DDP
39350540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
39450540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
a12e2a88
DDP
395])
396
397AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=2])
398
399AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
400p1 0 0 1
401])
402
403AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
404
405AT_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)'])
406
407AT_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)'])
408
409OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 4])
410
411AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
efe179e0
DDP
41250540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
41350540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
41450540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
41550540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000
a12e2a88
DDP
416])
417
418OVS_VSWITCHD_STOP
419AT_CLEANUP
420
421AT_SETUP([PMD - add remove ports])
422OVS_VSWITCHD_START(
423 [], [], [], [--dummy-numa 0,0])
424AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
425
426AT_CHECK([ovs-ofctl add-flow br0 actions=controller])
427
428AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1])
429
430AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
431p1 0 0 0
432])
433
434AT_CAPTURE_FILE([ofctl_monitor.log])
435AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
436
437AT_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)'])
438
439OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
440OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
441
442AT_CHECK([cat ofctl_monitor.log], [0], [dnl
efe179e0 443NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88
DDP
444icmp,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
445])
446
447AT_CHECK([ovs-vsctl del-port br0 p1])
448AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1])
449
450AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
451
452AT_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)'])
453
454OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
455OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
456
457AT_CHECK([cat ofctl_monitor.log], [0], [dnl
efe179e0 458NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
a12e2a88
DDP
459icmp,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
460])
461
462OVS_VSWITCHD_STOP
463AT_CLEANUP
5e512845
DDP
464
465AT_SETUP([PMD - rxq affinity])
466OVS_VSWITCHD_START(
467 [], [], [], [--dummy-numa 0,0,0,0,0,0,0,0,0])
468AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
469
470AT_CHECK([ovs-ofctl add-flow br0 actions=controller])
471
472AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=1fe])
473
474AT_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"])
475
476dnl The rxqs should be on the requested cores.
477AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
478p1 0 0 3
479p1 1 0 7
480p1 2 0 2
481p1 3 0 8
482])
483
484AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=6])
485
486dnl We removed the cores requested by some queues from pmd-cpu-mask.
487dnl Those queues will not be polled.
488AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
489p1 2 0 2
490])
491
492AT_CHECK([ovs-vsctl remove Interface p1 other_config pmd-rxq-affinity])
493
494dnl We removed the rxq-affinity request. dpif-netdev should assign queues
495dnl in a round robin fashion. We just make sure that every rxq is being
496dnl polled again.
497AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 1,2 -d ' ' | sort], [0], [dnl
498p1 0
499p1 1
500p1 2
501p1 3
502])
503
504AT_CHECK([ovs-vsctl set Interface p1 other_config:pmd-rxq-affinity='0:1'])
505
506dnl We explicitly requested core 1 for queue 0. Core 1 becomes isolated and
507dnl every other queue goes to core 2.
508AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
509p1 0 0 1
510p1 1 0 2
511p1 2 0 2
512p1 3 0 2
513])
514
515OVS_VSWITCHD_STOP(["/dpif_netdev|WARN|There is no PMD thread on core/d"])
516AT_CLEANUP