selftests: mlxsw: Add scale test for port ranges

Query the maximum number of supported port range registers using
devlink-resource and test that this number can be reached by configuring
tc filters with different port ranges. Test that an error is returned in
case the maximum number is exceeded.

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Link: https://lore.kernel.org/r/48eee181270d9f291e09d1858c7b26a3f7fcc164.1689092769.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Ido Schimmel 2023-07-11 18:44:01 +02:00 committed by Jakub Kicinski
parent fe22f74105
commit 45c5a38476
5 changed files with 114 additions and 0 deletions

View file

@ -0,0 +1,95 @@
# SPDX-License-Identifier: GPL-2.0
PORT_RANGE_NUM_NETIFS=2
port_range_h1_create()
{
simple_if_init $h1
}
port_range_h1_destroy()
{
simple_if_fini $h1
}
port_range_switch_create()
{
simple_if_init $swp1
tc qdisc add dev $swp1 clsact
}
port_range_switch_destroy()
{
tc qdisc del dev $swp1 clsact
simple_if_fini $swp1
}
port_range_rules_create()
{
local count=$1; shift
local should_fail=$1; shift
local batch_file="$(mktemp)"
for ((i = 0; i < count; ++i)); do
cat >> $batch_file <<-EOF
filter add dev $swp1 ingress \
prot ipv4 \
pref 1000 \
flower skip_sw \
ip_proto udp dst_port 1-$((100 + i)) \
action pass
EOF
done
tc -b $batch_file
check_err_fail $should_fail $? "Rule insertion"
rm -f $batch_file
}
__port_range_test()
{
local count=$1; shift
local should_fail=$1; shift
port_range_rules_create $count $should_fail
offload_count=$(tc -j filter show dev $swp1 ingress |
jq "[.[] | select(.options.in_hw == true)] | length")
((offload_count == count))
check_err_fail $should_fail $? "port range offload count"
}
port_range_test()
{
local count=$1; shift
local should_fail=$1; shift
if ! tc_offload_check $PORT_RANGE_NUM_NETIFS; then
check_err 1 "Could not test offloaded functionality"
return
fi
__port_range_test $count $should_fail
}
port_range_setup_prepare()
{
h1=${NETIFS[p1]}
swp1=${NETIFS[p2]}
vrf_prepare
port_range_h1_create
port_range_switch_create
}
port_range_cleanup()
{
pre_cleanup
port_range_switch_destroy
port_range_h1_destroy
vrf_cleanup
}

View file

@ -0,0 +1 @@
../spectrum/port_range_scale.sh

View file

@ -33,6 +33,7 @@ ALL_TESTS="
port
rif_mac_profile
rif_counter
port_range
"
for current_test in ${TESTS:-$ALL_TESTS}; do

View file

@ -0,0 +1,16 @@
# SPDX-License-Identifier: GPL-2.0
source ../port_range_scale.sh
port_range_get_target()
{
local should_fail=$1; shift
local target
target=$(devlink_resource_size_get port_range_registers)
if ((! should_fail)); then
echo $target
else
echo $((target + 1))
fi
}

View file

@ -30,6 +30,7 @@ ALL_TESTS="
port
rif_mac_profile
rif_counter
port_range
"
for current_test in ${TESTS:-$ALL_TESTS}; do