]> git.itanic.dy.fi Git - linux-stable/commitdiff
selftests: mlxsw: Add scale test for port ranges
authorIdo Schimmel <idosch@nvidia.com>
Tue, 11 Jul 2023 16:44:01 +0000 (18:44 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 12 Jul 2023 23:57:18 +0000 (16:57 -0700)
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>
tools/testing/selftests/drivers/net/mlxsw/port_range_scale.sh [new file with mode: 0644]
tools/testing/selftests/drivers/net/mlxsw/spectrum-2/port_range_scale.sh [new symlink]
tools/testing/selftests/drivers/net/mlxsw/spectrum-2/resource_scale.sh
tools/testing/selftests/drivers/net/mlxsw/spectrum/port_range_scale.sh [new file with mode: 0644]
tools/testing/selftests/drivers/net/mlxsw/spectrum/resource_scale.sh

diff --git a/tools/testing/selftests/drivers/net/mlxsw/port_range_scale.sh b/tools/testing/selftests/drivers/net/mlxsw/port_range_scale.sh
new file mode 100644 (file)
index 0000000..2a70840
--- /dev/null
@@ -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
+}
diff --git a/tools/testing/selftests/drivers/net/mlxsw/spectrum-2/port_range_scale.sh b/tools/testing/selftests/drivers/net/mlxsw/spectrum-2/port_range_scale.sh
new file mode 120000 (symlink)
index 0000000..bd670d9
--- /dev/null
@@ -0,0 +1 @@
+../spectrum/port_range_scale.sh
\ No newline at end of file
index 688338bbeb971e871dc4ea3484c2c8fbeac8c50d..a88d8a8c85f2e01f63a24ef1b8e272a05f1be9f5 100755 (executable)
@@ -33,6 +33,7 @@ ALL_TESTS="
        port
        rif_mac_profile
        rif_counter
+       port_range
 "
 
 for current_test in ${TESTS:-$ALL_TESTS}; do
diff --git a/tools/testing/selftests/drivers/net/mlxsw/spectrum/port_range_scale.sh b/tools/testing/selftests/drivers/net/mlxsw/spectrum/port_range_scale.sh
new file mode 100644 (file)
index 0000000..d0847e8
--- /dev/null
@@ -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
+}
index 95d9f710a6308d9b6d533b7f12c9c745d9837d6d..f981c957f09759996d030d51284aed495b45b9c8 100755 (executable)
@@ -30,6 +30,7 @@ ALL_TESTS="
        port
        rif_mac_profile
        rif_counter
+       port_range
 "
 
 for current_test in ${TESTS:-$ALL_TESTS}; do