~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/drivers/net/mlxsw/tc_sample.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0
  3 #
  4 # Test that packets are sampled when tc-sample is used and that reported
  5 # metadata is correct. Two sets of hosts (with and without LAG) are used, since
  6 # metadata extraction in mlxsw is a bit different when LAG is involved.
  7 #
  8 # +---------------------------------+       +---------------------------------+
  9 # | H1 (vrf)                        |       | H3 (vrf)                        |
 10 # |    + $h1                        |       |    + $h3_lag                    |
 11 # |    | 192.0.2.1/28               |       |    | 192.0.2.17/28              |
 12 # |    |                            |       |    |                            |
 13 # |    |  default via 192.0.2.2     |       |    |  default via 192.0.2.18    |
 14 # +----|----------------------------+       +----|----------------------------+
 15 #      |                                         |
 16 # +----|-----------------------------------------|----------------------------+
 17 # |    | 192.0.2.2/28                            | 192.0.2.18/28              |
 18 # |    + $rp1                                    + $rp3_lag                   |
 19 # |                                                                           |
 20 # |    + $rp2                                    + $rp4_lag                   |
 21 # |    | 198.51.100.2/28                         | 198.51.100.18/28           |
 22 # +----|-----------------------------------------|----------------------------+
 23 #      |                                         |
 24 # +----|----------------------------+       +----|----------------------------+
 25 # |    |  default via 198.51.100.2  |       |    |  default via 198.51.100.18 |
 26 # |    |                            |       |    |                            |
 27 # |    | 198.51.100.1/28            |       |    | 198.51.100.17/28           |
 28 # |    + $h2                        |       |    + $h4_lag                    |
 29 # | H2 (vrf)                        |       | H4 (vrf)                        |
 30 # +---------------------------------+       +---------------------------------+
 31 
 32 lib_dir=$(dirname $0)/../../../net/forwarding
 33 
 34 ALL_TESTS="
 35         tc_sample_rate_test
 36         tc_sample_max_rate_test
 37         tc_sample_conflict_test
 38         tc_sample_group_conflict_test
 39         tc_sample_md_iif_test
 40         tc_sample_md_lag_iif_test
 41         tc_sample_md_oif_test
 42         tc_sample_md_lag_oif_test
 43         tc_sample_md_out_tc_test
 44         tc_sample_md_out_tc_occ_test
 45         tc_sample_md_latency_test
 46         tc_sample_acl_group_conflict_test
 47         tc_sample_acl_rate_test
 48         tc_sample_acl_max_rate_test
 49 "
 50 NUM_NETIFS=8
 51 CAPTURE_FILE=$(mktemp)
 52 source $lib_dir/lib.sh
 53 source $lib_dir/devlink_lib.sh
 54 source mlxsw_lib.sh
 55 
 56 # Available at https://github.com/Mellanox/libpsample
 57 require_command psample
 58 
 59 h1_create()
 60 {
 61         simple_if_init $h1 192.0.2.1/28
 62 
 63         ip -4 route add default vrf v$h1 nexthop via 192.0.2.2
 64 }
 65 
 66 h1_destroy()
 67 {
 68         ip -4 route del default vrf v$h1 nexthop via 192.0.2.2
 69 
 70         simple_if_fini $h1 192.0.2.1/28
 71 }
 72 
 73 h2_create()
 74 {
 75         simple_if_init $h2 198.51.100.1/28
 76 
 77         ip -4 route add default vrf v$h2 nexthop via 198.51.100.2
 78 }
 79 
 80 h2_destroy()
 81 {
 82         ip -4 route del default vrf v$h2 nexthop via 198.51.100.2
 83 
 84         simple_if_fini $h2 198.51.100.1/28
 85 }
 86 
 87 h3_create()
 88 {
 89         ip link set dev $h3 down
 90         ip link add name ${h3}_bond type bond mode 802.3ad
 91         ip link set dev $h3 master ${h3}_bond
 92 
 93         simple_if_init ${h3}_bond 192.0.2.17/28
 94 
 95         ip -4 route add default vrf v${h3}_bond nexthop via 192.0.2.18
 96 }
 97 
 98 h3_destroy()
 99 {
100         ip -4 route del default vrf v${h3}_bond nexthop via 192.0.2.18
101 
102         simple_if_fini ${h3}_bond 192.0.2.17/28
103 
104         ip link set dev $h3 nomaster
105         ip link del dev ${h3}_bond
106 }
107 
108 h4_create()
109 {
110         ip link set dev $h4 down
111         ip link add name ${h4}_bond type bond mode 802.3ad
112         ip link set dev $h4 master ${h4}_bond
113 
114         simple_if_init ${h4}_bond 198.51.100.17/28
115 
116         ip -4 route add default vrf v${h4}_bond nexthop via 198.51.100.18
117 }
118 
119 h4_destroy()
120 {
121         ip -4 route del default vrf v${h4}_bond nexthop via 198.51.100.18
122 
123         simple_if_fini ${h4}_bond 198.51.100.17/28
124 
125         ip link set dev $h4 nomaster
126         ip link del dev ${h4}_bond
127 }
128 
129 router_create()
130 {
131         ip link set dev $rp1 up
132         __addr_add_del $rp1 add 192.0.2.2/28
133         tc qdisc add dev $rp1 clsact
134 
135         ip link set dev $rp2 up
136         __addr_add_del $rp2 add 198.51.100.2/28
137         tc qdisc add dev $rp2 clsact
138 
139         ip link add name ${rp3}_bond type bond mode 802.3ad
140         ip link set dev $rp3 master ${rp3}_bond
141         __addr_add_del ${rp3}_bond add 192.0.2.18/28
142         tc qdisc add dev $rp3 clsact
143         ip link set dev ${rp3}_bond up
144 
145         ip link add name ${rp4}_bond type bond mode 802.3ad
146         ip link set dev $rp4 master ${rp4}_bond
147         __addr_add_del ${rp4}_bond add 198.51.100.18/28
148         tc qdisc add dev $rp4 clsact
149         ip link set dev ${rp4}_bond up
150 }
151 
152 router_destroy()
153 {
154         ip link set dev ${rp4}_bond down
155         tc qdisc del dev $rp4 clsact
156         __addr_add_del ${rp4}_bond del 198.51.100.18/28
157         ip link set dev $rp4 nomaster
158         ip link del dev ${rp4}_bond
159 
160         ip link set dev ${rp3}_bond down
161         tc qdisc del dev $rp3 clsact
162         __addr_add_del ${rp3}_bond del 192.0.2.18/28
163         ip link set dev $rp3 nomaster
164         ip link del dev ${rp3}_bond
165 
166         tc qdisc del dev $rp2 clsact
167         __addr_add_del $rp2 del 198.51.100.2/28
168         ip link set dev $rp2 down
169 
170         tc qdisc del dev $rp1 clsact
171         __addr_add_del $rp1 del 192.0.2.2/28
172         ip link set dev $rp1 down
173 }
174 
175 setup_prepare()
176 {
177         h1=${NETIFS[p1]}
178         rp1=${NETIFS[p2]}
179         rp2=${NETIFS[p3]}
180         h2=${NETIFS[p4]}
181         h3=${NETIFS[p5]}
182         rp3=${NETIFS[p6]}
183         h4=${NETIFS[p7]}
184         rp4=${NETIFS[p8]}
185 
186         vrf_prepare
187 
188         h1_create
189         h2_create
190         h3_create
191         h4_create
192         router_create
193 }
194 
195 cleanup()
196 {
197         pre_cleanup
198 
199         rm -f $CAPTURE_FILE
200 
201         router_destroy
202         h4_destroy
203         h3_destroy
204         h2_destroy
205         h1_destroy
206 
207         vrf_cleanup
208 }
209 
210 psample_capture_start()
211 {
212         rm -f $CAPTURE_FILE
213 
214         psample &> $CAPTURE_FILE &
215 
216         sleep 1
217 }
218 
219 psample_capture_stop()
220 {
221         { kill %% && wait %%; } 2>/dev/null
222 }
223 
224 __tc_sample_rate_test()
225 {
226         local desc=$1; shift
227         local dip=$1; shift
228         local pkts pct
229 
230         RET=0
231 
232         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
233                 skip_sw action sample rate 32 group 1
234         check_err $? "Failed to configure sampling rule"
235 
236         psample_capture_start
237 
238         ip vrf exec v$h1 $MZ $h1 -c 320000 -d 100usec -p 64 -A 192.0.2.1 \
239                 -B $dip -t udp dp=52768,sp=42768 -q
240 
241         psample_capture_stop
242 
243         pkts=$(grep -e "group 1 " $CAPTURE_FILE | wc -l)
244         pct=$((100 * (pkts - 10000) / 10000))
245         (( -25 <= pct && pct <= 25))
246         check_err $? "Expected 10000 packets, got $pkts packets, which is $pct% off. Required accuracy is +-25%"
247 
248         log_test "tc sample rate ($desc)"
249 
250         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
251 }
252 
253 tc_sample_rate_test()
254 {
255         __tc_sample_rate_test "forward" 198.51.100.1
256         __tc_sample_rate_test "local receive" 192.0.2.2
257 }
258 
259 tc_sample_max_rate_test()
260 {
261         RET=0
262 
263         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
264                 skip_sw action sample rate $((35 * 10 ** 8)) group 1
265         check_err $? "Failed to configure sampling rule with max rate"
266 
267         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
268 
269         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
270                 skip_sw action sample rate $((35 * 10 ** 8 + 1)) \
271                 group 1 &> /dev/null
272         check_fail $? "Managed to configure sampling rate above maximum"
273 
274         log_test "tc sample maximum rate"
275 }
276 
277 tc_sample_conflict_test()
278 {
279         RET=0
280 
281         # Test that two sampling rules cannot be configured on the same port,
282         # even when they share the same parameters.
283 
284         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
285                 skip_sw action sample rate 1024 group 1
286         check_err $? "Failed to configure sampling rule"
287 
288         tc filter add dev $rp1 ingress protocol all pref 2 handle 102 matchall \
289                 skip_sw action sample rate 1024 group 1 &> /dev/null
290         check_fail $? "Managed to configure second sampling rule"
291 
292         # Delete the first rule and make sure the second rule can now be
293         # configured.
294 
295         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
296 
297         tc filter add dev $rp1 ingress protocol all pref 2 handle 102 matchall \
298                 skip_sw action sample rate 1024 group 1
299         check_err $? "Failed to configure sampling rule after deletion"
300 
301         log_test "tc sample conflict test"
302 
303         tc filter del dev $rp1 ingress protocol all pref 2 handle 102 matchall
304 }
305 
306 tc_sample_group_conflict_test()
307 {
308         RET=0
309 
310         # Test that two sampling rules cannot be configured on the same port
311         # with different groups.
312 
313         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
314                 skip_sw action sample rate 1024 group 1
315         check_err $? "Failed to configure sampling rule"
316 
317         tc filter add dev $rp1 ingress protocol all pref 2 handle 102 matchall \
318                 skip_sw action sample rate 1024 group 2 &> /dev/null
319         check_fail $? "Managed to configure sampling rule with conflicting group"
320 
321         log_test "tc sample group conflict test"
322 
323         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
324 }
325 
326 tc_sample_md_iif_test()
327 {
328         local rp1_ifindex
329 
330         RET=0
331 
332         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
333                 skip_sw action sample rate 5 group 1
334         check_err $? "Failed to configure sampling rule"
335 
336         psample_capture_start
337 
338         ip vrf exec v$h1 $MZ $h1 -c 3200 -d 1msec -p 64 -A 192.0.2.1 \
339                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q
340 
341         psample_capture_stop
342 
343         rp1_ifindex=$(ip -j -p link show dev $rp1 | jq '.[]["ifindex"]')
344         grep -q -e "in-ifindex $rp1_ifindex " $CAPTURE_FILE
345         check_err $? "Sampled packets do not have expected in-ifindex"
346 
347         log_test "tc sample iif"
348 
349         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
350 }
351 
352 tc_sample_md_lag_iif_test()
353 {
354         local rp3_ifindex
355 
356         RET=0
357 
358         tc filter add dev $rp3 ingress protocol all pref 1 handle 101 matchall \
359                 skip_sw action sample rate 5 group 1
360         check_err $? "Failed to configure sampling rule"
361 
362         psample_capture_start
363 
364         ip vrf exec v${h3}_bond $MZ ${h3}_bond -c 3200 -d 1msec -p 64 \
365                 -A 192.0.2.17 -B 198.51.100.17 -t udp dp=52768,sp=42768 -q
366 
367         psample_capture_stop
368 
369         rp3_ifindex=$(ip -j -p link show dev $rp3 | jq '.[]["ifindex"]')
370         grep -q -e "in-ifindex $rp3_ifindex " $CAPTURE_FILE
371         check_err $? "Sampled packets do not have expected in-ifindex"
372 
373         log_test "tc sample lag iif"
374 
375         tc filter del dev $rp3 ingress protocol all pref 1 handle 101 matchall
376 }
377 
378 tc_sample_md_oif_test()
379 {
380         local rp2_ifindex
381 
382         RET=0
383 
384         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
385                 skip_sw action sample rate 5 group 1
386         check_err $? "Failed to configure sampling rule"
387 
388         psample_capture_start
389 
390         ip vrf exec v$h1 $MZ $h1 -c 3200 -d 1msec -p 64 -A 192.0.2.1 \
391                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q
392 
393         psample_capture_stop
394 
395         rp2_ifindex=$(ip -j -p link show dev $rp2 | jq '.[]["ifindex"]')
396         grep -q -e "out-ifindex $rp2_ifindex " $CAPTURE_FILE
397         check_err $? "Sampled packets do not have expected out-ifindex"
398 
399         log_test "tc sample oif"
400 
401         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
402 }
403 
404 tc_sample_md_lag_oif_test()
405 {
406         local rp4_ifindex
407 
408         RET=0
409 
410         tc filter add dev $rp3 ingress protocol all pref 1 handle 101 matchall \
411                 skip_sw action sample rate 5 group 1
412         check_err $? "Failed to configure sampling rule"
413 
414         psample_capture_start
415 
416         ip vrf exec v${h3}_bond $MZ ${h3}_bond -c 3200 -d 1msec -p 64 \
417                 -A 192.0.2.17 -B 198.51.100.17 -t udp dp=52768,sp=42768 -q
418 
419         psample_capture_stop
420 
421         rp4_ifindex=$(ip -j -p link show dev $rp4 | jq '.[]["ifindex"]')
422         grep -q -e "out-ifindex $rp4_ifindex " $CAPTURE_FILE
423         check_err $? "Sampled packets do not have expected out-ifindex"
424 
425         log_test "tc sample lag oif"
426 
427         tc filter del dev $rp3 ingress protocol all pref 1 handle 101 matchall
428 }
429 
430 tc_sample_md_out_tc_test()
431 {
432         RET=0
433 
434         # Output traffic class is not supported on Spectrum-1.
435         mlxsw_only_on_spectrum 2+ || return
436 
437         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
438                 skip_sw action sample rate 5 group 1
439         check_err $? "Failed to configure sampling rule"
440 
441         # By default, all the packets should go to the same traffic class (0).
442 
443         psample_capture_start
444 
445         ip vrf exec v$h1 $MZ $h1 -c 3200 -d 1msec -p 64 -A 192.0.2.1 \
446                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q
447 
448         psample_capture_stop
449 
450         grep -q -e "out-tc 0 " $CAPTURE_FILE
451         check_err $? "Sampled packets do not have expected out-tc (0)"
452 
453         # Map all priorities to highest traffic class (7) and check reported
454         # out-tc.
455         tc qdisc replace dev $rp2 root handle 1: \
456                 prio bands 3 priomap 0 0 0 0 0 0 0 0
457 
458         psample_capture_start
459 
460         ip vrf exec v$h1 $MZ $h1 -c 3200 -d 1msec -p 64 -A 192.0.2.1 \
461                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q
462 
463         psample_capture_stop
464 
465         grep -q -e "out-tc 7 " $CAPTURE_FILE
466         check_err $? "Sampled packets do not have expected out-tc (7)"
467 
468         log_test "tc sample out-tc"
469 
470         tc qdisc del dev $rp2 root handle 1:
471         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
472 }
473 
474 tc_sample_md_out_tc_occ_test()
475 {
476         local backlog pct occ
477 
478         RET=0
479 
480         # Output traffic class occupancy is not supported on Spectrum-1.
481         mlxsw_only_on_spectrum 2+ || return
482 
483         tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
484                 skip_sw action sample rate 1024 group 1
485         check_err $? "Failed to configure sampling rule"
486 
487         # Configure a shaper on egress to create congestion.
488         tc qdisc replace dev $rp2 root handle 1: \
489                 tbf rate 1Mbit burst 256k limit 1M
490 
491         psample_capture_start
492 
493         ip vrf exec v$h1 $MZ $h1 -c 0 -d 1usec -p 1400 -A 192.0.2.1 \
494                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q &
495 
496         # Allow congestion to reach steady state.
497         sleep 10
498 
499         backlog=$(tc -j -p -s qdisc show dev $rp2 | jq '.[0]["backlog"]')
500 
501         # Kill mausezahn.
502         { kill %% && wait %%; } 2>/dev/null
503 
504         psample_capture_stop
505 
506         # Record last congestion sample.
507         occ=$(grep -e "out-tc-occ " $CAPTURE_FILE | tail -n 1 | \
508                 cut -d ' ' -f 16)
509 
510         pct=$((100 * (occ - backlog) / backlog))
511         (( -1 <= pct && pct <= 1))
512         check_err $? "Recorded a congestion of $backlog bytes, but sampled congestion is $occ bytes, which is $pct% off. Required accuracy is +-5%"
513 
514         log_test "tc sample out-tc-occ"
515 
516         tc qdisc del dev $rp2 root handle 1:
517         tc filter del dev $rp1 ingress protocol all pref 1 handle 101 matchall
518 }
519 
520 tc_sample_md_latency_test()
521 {
522         RET=0
523 
524         # Egress sampling not supported on Spectrum-1.
525         mlxsw_only_on_spectrum 2+ || return
526 
527         tc filter add dev $rp2 egress protocol all pref 1 handle 101 matchall \
528                 skip_sw action sample rate 5 group 1
529         check_err $? "Failed to configure sampling rule"
530 
531         psample_capture_start
532 
533         ip vrf exec v$h1 $MZ $h1 -c 3200 -d 1msec -p 64 -A 192.0.2.1 \
534                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q
535 
536         psample_capture_stop
537 
538         grep -q -e "latency " $CAPTURE_FILE
539         check_err $? "Sampled packets do not have latency attribute"
540 
541         log_test "tc sample latency"
542 
543         tc filter del dev $rp2 egress protocol all pref 1 handle 101 matchall
544 }
545 
546 tc_sample_acl_group_conflict_test()
547 {
548         RET=0
549 
550         # Test that two flower sampling rules cannot be configured on the same
551         # port with different groups.
552 
553         # Policy-based sampling is not supported on Spectrum-1.
554         mlxsw_only_on_spectrum 2+ || return
555 
556         tc filter add dev $rp1 ingress protocol ip pref 1 handle 101 flower \
557                 skip_sw action sample rate 1024 group 1
558         check_err $? "Failed to configure sampling rule"
559 
560         tc filter add dev $rp1 ingress protocol ip pref 2 handle 102 flower \
561                 skip_sw action sample rate 1024 group 1
562         check_err $? "Failed to configure sampling rule with same group"
563 
564         tc filter add dev $rp1 ingress protocol ip pref 3 handle 103 flower \
565                 skip_sw action sample rate 1024 group 2 &> /dev/null
566         check_fail $? "Managed to configure sampling rule with conflicting group"
567 
568         log_test "tc sample (w/ flower) group conflict test"
569 
570         tc filter del dev $rp1 ingress protocol ip pref 2 handle 102 flower
571         tc filter del dev $rp1 ingress protocol ip pref 1 handle 101 flower
572 }
573 
574 __tc_sample_acl_rate_test()
575 {
576         local bind=$1; shift
577         local port=$1; shift
578         local pkts pct
579 
580         RET=0
581 
582         # Policy-based sampling is not supported on Spectrum-1.
583         mlxsw_only_on_spectrum 2+ || return
584 
585         tc filter add dev $port $bind protocol ip pref 1 handle 101 flower \
586                 skip_sw dst_ip 198.51.100.1 action sample rate 32 group 1
587         check_err $? "Failed to configure sampling rule"
588 
589         psample_capture_start
590 
591         ip vrf exec v$h1 $MZ $h1 -c 320000 -d 100usec -p 64 -A 192.0.2.1 \
592                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q
593 
594         psample_capture_stop
595 
596         pkts=$(grep -e "group 1 " $CAPTURE_FILE | wc -l)
597         pct=$((100 * (pkts - 10000) / 10000))
598         (( -25 <= pct && pct <= 25))
599         check_err $? "Expected 10000 packets, got $pkts packets, which is $pct% off. Required accuracy is +-25%"
600 
601         # Setup a filter that should not match any packet and make sure packets
602         # are not sampled.
603         tc filter del dev $port $bind protocol ip pref 1 handle 101 flower
604 
605         tc filter add dev $port $bind protocol ip pref 1 handle 101 flower \
606                 skip_sw dst_ip 198.51.100.10 action sample rate 32 group 1
607         check_err $? "Failed to configure sampling rule"
608 
609         psample_capture_start
610 
611         ip vrf exec v$h1 $MZ $h1 -c 3200 -d 1msec -p 64 -A 192.0.2.1 \
612                 -B 198.51.100.1 -t udp dp=52768,sp=42768 -q
613 
614         psample_capture_stop
615 
616         grep -q -e "group 1 " $CAPTURE_FILE
617         check_fail $? "Sampled packets when should not"
618 
619         log_test "tc sample (w/ flower) rate ($bind)"
620 
621         tc filter del dev $port $bind protocol ip pref 1 handle 101 flower
622 }
623 
624 tc_sample_acl_rate_test()
625 {
626         __tc_sample_acl_rate_test ingress $rp1
627         __tc_sample_acl_rate_test egress $rp2
628 }
629 
630 tc_sample_acl_max_rate_test()
631 {
632         RET=0
633 
634         # Policy-based sampling is not supported on Spectrum-1.
635         mlxsw_only_on_spectrum 2+ || return
636 
637         tc filter add dev $rp1 ingress protocol ip pref 1 handle 101 flower \
638                 skip_sw action sample rate $((2 ** 24 - 1)) group 1
639         check_err $? "Failed to configure sampling rule with max rate"
640 
641         tc filter del dev $rp1 ingress protocol ip pref 1 handle 101 flower
642 
643         tc filter add dev $rp1 ingress protocol ip pref 1 handle 101 flower \
644                 skip_sw action sample rate $((2 ** 24)) \
645                 group 1 &> /dev/null
646         check_fail $? "Managed to configure sampling rate above maximum"
647 
648         log_test "tc sample (w/ flower) maximum rate"
649 }
650 
651 trap cleanup EXIT
652 
653 setup_prepare
654 setup_wait
655 
656 tests_run
657 
658 exit $EXIT_STATUS

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php