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