Commit 45c5a384 authored by Ido Schimmel's avatar Ido Schimmel Committed by Jakub Kicinski
Browse files

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: default avatarIdo Schimmel <idosch@nvidia.com>
Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Link: https://lore.kernel.org/r/48eee181270d9f291e09d1858c7b26a3f7fcc164.1689092769.git.petrm@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent fe22f741
Loading
Loading
Loading
Loading
+95 −0
Original line number Diff line number Diff line
# 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
}
+1 −0
Original line number Diff line number Diff line
../spectrum/port_range_scale.sh
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ ALL_TESTS="
	port
	rif_mac_profile
	rif_counter
	port_range
"

for current_test in ${TESTS:-$ALL_TESTS}; do
+16 −0
Original line number Diff line number Diff line
# 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
}
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ ALL_TESTS="
	port
	rif_mac_profile
	rif_counter
	port_range
"

for current_test in ${TESTS:-$ALL_TESTS}; do