This tests creates as many RIFs as possible, ideally more than there can be RIF counters (though that is currently only possible on Spectrum-1). It then tries to enable L3 HW stats on each of the RIFs. It also contains the traffic test, which tries to run traffic through a log2 of those counters and checks that the traffic is shown in the counter values. Like with tc_flower traffic test, take a log2 subset of rules. The logic behind picking log2 rules is that then every bit of the instantiated item's number is exercised. This should catch issues whether they happen at the high end, low end, or somewhere in between. Signed-off-by: Petr Machata <petrm@nvidia.com> Reviewed-by: Amit Cohen <amcohen@nvidia.com> Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
85 lines
1.8 KiB
Bash
Executable File
85 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
lib_dir=$(dirname $0)/../../../../net/forwarding
|
|
|
|
NUM_NETIFS=6
|
|
source $lib_dir/lib.sh
|
|
source $lib_dir/tc_common.sh
|
|
source devlink_lib_spectrum.sh
|
|
|
|
current_test=""
|
|
|
|
cleanup()
|
|
{
|
|
pre_cleanup
|
|
if [ ! -z $current_test ]; then
|
|
${current_test}_cleanup
|
|
fi
|
|
devlink_sp_size_kvd_to_default
|
|
}
|
|
|
|
devlink_sp_read_kvd_defaults
|
|
trap cleanup EXIT
|
|
|
|
ALL_TESTS="
|
|
router
|
|
tc_flower
|
|
mirror_gre
|
|
tc_police
|
|
port
|
|
rif_mac_profile
|
|
rif_counter
|
|
"
|
|
|
|
for current_test in ${TESTS:-$ALL_TESTS}; do
|
|
RET_FIN=0
|
|
source ${current_test}_scale.sh
|
|
|
|
num_netifs_var=${current_test^^}_NUM_NETIFS
|
|
num_netifs=${!num_netifs_var:-$NUM_NETIFS}
|
|
|
|
for profile in $KVD_PROFILES; do
|
|
RET=0
|
|
devlink_sp_resource_kvd_profile_set $profile
|
|
if [[ $RET -gt 0 ]]; then
|
|
log_test "'$current_test' [$profile] setting"
|
|
continue
|
|
fi
|
|
|
|
for should_fail in 0 1; do
|
|
RET=0
|
|
target=$(${current_test}_get_target "$should_fail")
|
|
if ((target == 0)); then
|
|
log_test_skip "'$current_test' [$profile] should_fail=$should_fail test"
|
|
continue
|
|
fi
|
|
${current_test}_setup_prepare
|
|
setup_wait $num_netifs
|
|
# Update target in case occupancy of a certain resource
|
|
# changed following the test setup.
|
|
target=$(${current_test}_get_target "$should_fail")
|
|
${current_test}_test "$target" "$should_fail"
|
|
if [[ "$should_fail" -eq 0 ]]; then
|
|
log_test "'$current_test' [$profile] $target"
|
|
|
|
if ((!RET)); then
|
|
tt=${current_test}_traffic_test
|
|
if [[ $(type -t $tt) == "function" ]]
|
|
then
|
|
$tt "$target"
|
|
log_test "'$current_test' [$profile] $target traffic test"
|
|
fi
|
|
fi
|
|
else
|
|
log_test "'$current_test' [$profile] overflow $target"
|
|
fi
|
|
${current_test}_cleanup $target
|
|
RET_FIN=$(( RET_FIN || RET ))
|
|
done
|
|
done
|
|
done
|
|
current_test=""
|
|
|
|
exit "$RET_FIN"
|