Rename nbs/nbr port names to nbsp/nbrp.
[cascardo/ovs.git] / tests / pmd.at
1 AT_BANNER([PMD])
2
3 m4_divert_push([PREPARE_TESTS])
4
5 # Given the output of `ovs-appctl dpif-netdev/pmd-rxq-show`, prints a list
6 # of every rxq (one per line) in the form:
7 # port_name rxq_id numa_id core_id
8 parse_pmd_rxq_show () {
9     awk '/pmd/ {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
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"
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/')
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], [
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
55 m4_define([SED_NUMA_CORE_PATTERN], ["s/\(numa_id \)[[0-9]]*\( core_id \)[[0-9]]*:/\1<cleared>\2<cleared>:/"])
56 m4_define([DUMMY_NUMA], [--dummy-numa="0,0,0,0,1,1,1,1"])
57
58 AT_SETUP([PMD - creating a thread/add-port])
59 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
60
61 CHECK_CPU_DISCOVERED()
62 CHECK_PMD_THREADS_CREATED()
63
64 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
65 pmd thread numa_id <cleared> core_id <cleared>:
66         port: p0        queue-id: 0
67 ])
68
69 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
70 dummy@ovs-dummy: hit:0 missed:0
71         br0:
72                 br0 65534/100: (dummy)
73                 p0 1/1: (dummy-pmd: configured_rx_queues=1, configured_tx_queues=<cleared>, requested_rx_queues=1, requested_tx_queues=<cleared>)
74 ])
75
76 OVS_VSWITCHD_STOP
77 AT_CLEANUP
78
79 AT_SETUP([PMD - multiqueue support])
80 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd], [], [], [DUMMY_NUMA])
81
82 CHECK_CPU_DISCOVERED()
83 CHECK_PMD_THREADS_CREATED()
84
85 AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=8])
86
87 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
88 dummy@ovs-dummy: hit:0 missed:0
89         br0:
90                 br0 65534/100: (dummy)
91                 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
92 ])
93
94 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
95 pmd thread numa_id <cleared> core_id <cleared>:
96         port: p0        queue-id: 0 1 2 3 4 5 6 7
97 ])
98
99 OVS_VSWITCHD_STOP
100 AT_CLEANUP
101
102
103 AT_SETUP([PMD - pmd-cpu-mask/distribution of rx queues])
104 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd options:n_rxq=8],
105                    [], [], [DUMMY_NUMA])
106
107 CHECK_CPU_DISCOVERED(2)
108 CHECK_PMD_THREADS_CREATED()
109
110 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
111 dummy@ovs-dummy: hit:0 missed:0
112         br0:
113                 br0 65534/100: (dummy)
114                 p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>)
115 ])
116
117 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
118 pmd thread numa_id <cleared> core_id <cleared>:
119         port: p0        queue-id: 0 1 2 3 4 5 6 7
120 ])
121
122 TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
123 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=3])
124 CHECK_PMD_THREADS_CREATED([2], [], [+$TMP])
125
126 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
127 pmd thread numa_id <cleared> core_id <cleared>:
128         port: p0        queue-id: 0 2 4 6
129 pmd thread numa_id <cleared> core_id <cleared>:
130         port: p0        queue-id: 1 3 5 7
131 ])
132
133 TMP=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])
134 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=1])
135 CHECK_PMD_THREADS_CREATED([1], [], [+$TMP])
136
137 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl
138 pmd thread numa_id <cleared> core_id <cleared>:
139         port: p0        queue-id: 0 1 2 3 4 5 6 7
140 ])
141
142 OVS_VSWITCHD_STOP
143 AT_CLEANUP
144
145
146 AT_SETUP([PMD - stats])
147 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 ofport_request=7 type=dummy-pmd options:n_rxq=4],
148                    [], [], [DUMMY_NUMA])
149
150 CHECK_CPU_DISCOVERED()
151 CHECK_PMD_THREADS_CREATED()
152
153 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg])
154 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
155
156 sleep 1
157
158 AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl
159 dummy@ovs-dummy: hit:0 missed:0
160         br0:
161                 br0 65534/100: (dummy)
162                 p0 7/1: (dummy-pmd: configured_rx_queues=4, configured_tx_queues=<cleared>, requested_rx_queues=4, requested_tx_queues=<cleared>)
163 ])
164
165 AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl
166 pmd thread numa_id <cleared> core_id <cleared>:
167         emc hits:0
168         megaflow hits:0
169         miss:0
170         lost:0
171 ])
172
173 ovs-appctl time/stop
174 ovs-appctl time/warp 100
175 (
176 for i in `seq 0 19`;
177     do
178     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)"
179     AT_CHECK([ovs-appctl netdev-dummy/receive p0 $pkt])
180     done
181 )
182 ovs-appctl time/warp 100
183
184 AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
185 skb_priority(0),skb_mark(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)
186 ])
187 AT_CHECK([cat ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
188 recirc_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>
189 ])
190
191 AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 4], [0], [dnl
192 pmd thread numa_id <cleared> core_id <cleared>:
193         emc hits:19
194         megaflow hits:0
195         miss:1
196         lost:0
197 ])
198
199 OVS_VSWITCHD_STOP
200 AT_CLEANUP
201
202 dnl Reconfigure the number of rx queues of a port, make sure that all the
203 dnl queues are polled by the datapath and try to send a couple of packets.
204 AT_SETUP([PMD - reconfigure n_rxq])
205 OVS_VSWITCHD_START(
206   [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
207    add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2
208 ], [], [], [--dummy-numa 0])
209 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
210
211 AT_CHECK([ovs-ofctl add-flow br0 action=controller])
212
213 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
214 p1 0 0 0
215 p1 1 0 0
216 p2 0 0 0
217 ])
218
219 AT_CAPTURE_FILE([ofctl_monitor.log])
220 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
221
222 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)'])
223
224 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
225 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
226
227 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
228 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
229 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
230 ])
231
232 AT_CHECK([ovs-vsctl set interface p1 options:n_rxq=4])
233
234 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
235 p1 0 0 0
236 p1 1 0 0
237 p1 2 0 0
238 p1 3 0 0
239 p2 0 0 0
240 ])
241
242 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
243
244 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)'])
245
246 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
247 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
248
249 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
250 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
251 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
252 ])
253
254 OVS_VSWITCHD_STOP
255 AT_CLEANUP
256
257 dnl There was a bug where OVS failed to create a ukey and install a megaflow
258 dnl if a packet with the exact same flow was received by two different pmd
259 dnl threads.  This is a regression test for that bug.
260 AT_SETUP([PMD - same flow multiple threads])
261 OVS_VSWITCHD_START(
262   [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
263    set Open_vSwitch . other_config:pmd-cpu-mask=3
264 ], [], [], [--dummy-numa 0,0])
265 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
266
267 AT_CHECK([ovs-ofctl add-flow br0 action=controller])
268
269 dnl Make sure that the queues are on different cores.  There's no way to
270 dnl control which queue is on which thread, we just need to make sure that
271 dnl two threads (core_id) show up in pmd-rxq-show
272 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show | cut -f 4 -d ' ' | sort], [0], [dnl
273 0
274 1
275 ])
276
277 AT_CAPTURE_FILE([ofctl_monitor.log])
278 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
279
280 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)'])
281
282 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)'])
283
284 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
285 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
286
287 dnl Make sure that both flows have been installed
288 AT_CHECK([ovs-appctl dpctl/dump-flows | flow_dump_prepend_pmd], [0], [dnl
289 0 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))
290 1 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))
291 ])
292
293 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
294 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
295 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
296 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
297 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
298 ])
299
300 OVS_VSWITCHD_STOP
301 AT_CLEANUP
302
303 AT_SETUP([PMD - change numa node])
304 OVS_VSWITCHD_START(
305   [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=2 -- \
306    add-port br0 p2 -- set Interface p2 type=dummy-pmd ofport_request=2 options:n_rxq=2 -- \
307    set Open_vSwitch . other_config:pmd-cpu-mask=3
308 ], [], [], [--dummy-numa 0,1])
309 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
310
311 AT_CHECK([ovs-ofctl add-flow br0 action=controller])
312
313 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
314 p1 0 0 0
315 p1 1 0 0
316 p2 0 0 0
317 p2 1 0 0
318 ])
319
320 AT_CAPTURE_FILE([ofctl_monitor.log])
321 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
322
323 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)'])
324
325 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)'])
326
327 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
328 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
329
330 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
331 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
332 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
333 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=2 (via action) data_len=60 (unbuffered)
334 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
335 ])
336
337 AT_CHECK([ovs-vsctl set Interface p2 options:numa_id=1])
338
339 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
340 p1 0 0 0
341 p1 1 0 0
342 p2 0 1 1
343 p2 1 1 1
344 ])
345
346 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
347
348 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)'])
349
350 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)'])
351
352 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
353 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
354
355 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
356 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
357 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
358 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=2 (via action) data_len=60 (unbuffered)
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 OVS_VSWITCHD_STOP
363 AT_CLEANUP
364
365 AT_SETUP([PMD - non pmd device])
366 OVS_VSWITCHD_START(
367   [add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1 -- \
368    add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 -- \
369    set Interface br0 options:tx_pcap=br0.pcap -- \
370    set Open_vSwitch . other_config:pmd-cpu-mask=1
371 ], [], [], [--dummy-numa 0,0])
372 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
373
374 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL])
375
376 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
377 p1 0 0 0
378 ])
379
380 AT_CHECK([ovs-appctl netdev-dummy/receive p1 --qid 0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
381
382 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)'])
383
384 OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 2])
385
386 AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
387 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000000000000000000000000000000000000000
388 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000000000000000000000000000000000000000
389 ])
390
391 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=2])
392
393 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
394 p1 0 0 1
395 ])
396
397 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
398
399 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)'])
400
401 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)'])
402
403 OVS_WAIT_UNTIL([test `ovs-pcap br0.pcap | wc -l` -ge 4])
404
405 AT_CHECK([ovs-pcap br0.pcap], [0], [dnl
406 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000000000000000000000000000000000000000
407 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000000000000000000000000000000000000000
408 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000000000000000000000000000000000000000
409 50540000000a50540000000908004500001c00000000400166df0a0000020a0000010800f7ff00000000000000000000000000000000000000000000
410 ])
411
412 OVS_VSWITCHD_STOP
413 AT_CLEANUP
414
415 AT_SETUP([PMD - add remove ports])
416 OVS_VSWITCHD_START(
417   [], [], [], [--dummy-numa 0,0])
418 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
419
420 AT_CHECK([ovs-ofctl add-flow br0 actions=controller])
421
422 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1])
423
424 AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | parse_pmd_rxq_show], [0], [dnl
425 p1 0 0 0
426 ])
427
428 AT_CAPTURE_FILE([ofctl_monitor.log])
429 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
430
431 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)'])
432
433 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
434 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
435
436 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
437 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
438 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
439 ])
440
441 AT_CHECK([ovs-vsctl del-port br0 p1])
442 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd ofport_request=1 options:n_rxq=1])
443
444 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
445
446 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)'])
447
448 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
449 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
450
451 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
452 NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
453 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
454 ])
455
456 OVS_VSWITCHD_STOP
457 AT_CLEANUP