selftests: mlxsw: Add router test
This test aims for both stand alone and internal usage by the resource infra. The test receives the number routes to offload and checks: - The routes were offloaded correctly - Traffic for each route. Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com> Signed-off-by: Yuval Mintz <yuvalm@mellanox.com> Reviewed-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Petr Machata <petrm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

vanhempi
b030c33811
commit
d98307c52b
167
tools/testing/selftests/drivers/net/mlxsw/router_scale.sh
Normal file
167
tools/testing/selftests/drivers/net/mlxsw/router_scale.sh
Normal file
@@ -0,0 +1,167 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
ROUTER_NUM_NETIFS=4
|
||||
|
||||
router_h1_create()
|
||||
{
|
||||
simple_if_init $h1 192.0.1.1/24
|
||||
ip route add 193.0.0.0/8 via 192.0.1.2 dev $h1
|
||||
}
|
||||
|
||||
router_h1_destroy()
|
||||
{
|
||||
ip route del 193.0.0.0/8 via 192.0.1.2 dev $h1
|
||||
simple_if_fini $h1 192.0.1.1/24
|
||||
}
|
||||
|
||||
router_h2_create()
|
||||
{
|
||||
simple_if_init $h2 192.0.2.1/24
|
||||
tc qdisc add dev $h2 handle ffff: ingress
|
||||
}
|
||||
|
||||
router_h2_destroy()
|
||||
{
|
||||
tc qdisc del dev $h2 handle ffff: ingress
|
||||
simple_if_fini $h2 192.0.2.1/24
|
||||
}
|
||||
|
||||
router_create()
|
||||
{
|
||||
ip link set dev $rp1 up
|
||||
ip link set dev $rp2 up
|
||||
|
||||
ip address add 192.0.1.2/24 dev $rp1
|
||||
ip address add 192.0.2.2/24 dev $rp2
|
||||
}
|
||||
|
||||
router_destroy()
|
||||
{
|
||||
ip address del 192.0.2.2/24 dev $rp2
|
||||
ip address del 192.0.1.2/24 dev $rp1
|
||||
|
||||
ip link set dev $rp2 down
|
||||
ip link set dev $rp1 down
|
||||
}
|
||||
|
||||
router_setup_prepare()
|
||||
{
|
||||
h1=${NETIFS[p1]}
|
||||
rp1=${NETIFS[p2]}
|
||||
|
||||
rp2=${NETIFS[p3]}
|
||||
h2=${NETIFS[p4]}
|
||||
|
||||
h1mac=$(mac_get $h1)
|
||||
rp1mac=$(mac_get $rp1)
|
||||
|
||||
vrf_prepare
|
||||
|
||||
router_h1_create
|
||||
router_h2_create
|
||||
|
||||
router_create
|
||||
}
|
||||
|
||||
router_offload_validate()
|
||||
{
|
||||
local route_count=$1
|
||||
local offloaded_count
|
||||
|
||||
offloaded_count=$(ip route | grep -o 'offload' | wc -l)
|
||||
[[ $offloaded_count -ge $route_count ]]
|
||||
}
|
||||
|
||||
router_routes_create()
|
||||
{
|
||||
local route_count=$1
|
||||
local count=0
|
||||
|
||||
ROUTE_FILE="$(mktemp)"
|
||||
|
||||
for i in {0..255}
|
||||
do
|
||||
for j in {0..255}
|
||||
do
|
||||
for k in {0..255}
|
||||
do
|
||||
if [[ $count -eq $route_count ]]; then
|
||||
break 3
|
||||
fi
|
||||
|
||||
echo route add 193.${i}.${j}.${k}/32 via \
|
||||
192.0.2.1 dev $rp2 >> $ROUTE_FILE
|
||||
((count++))
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
ip -b $ROUTE_FILE &> /dev/null
|
||||
}
|
||||
|
||||
router_routes_destroy()
|
||||
{
|
||||
if [[ -v ROUTE_FILE ]]; then
|
||||
rm -f $ROUTE_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
router_test()
|
||||
{
|
||||
local route_count=$1
|
||||
local should_fail=$2
|
||||
local count=0
|
||||
|
||||
RET=0
|
||||
|
||||
router_routes_create $route_count
|
||||
|
||||
router_offload_validate $route_count
|
||||
check_err_fail $should_fail $? "Offload of $route_count routes"
|
||||
if [[ $RET -ne 0 ]] || [[ $should_fail -eq 1 ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
tc filter add dev $h2 ingress protocol ip pref 1 flower \
|
||||
skip_sw dst_ip 193.0.0.0/8 action drop
|
||||
|
||||
for i in {0..255}
|
||||
do
|
||||
for j in {0..255}
|
||||
do
|
||||
for k in {0..255}
|
||||
do
|
||||
if [[ $count -eq $route_count ]]; then
|
||||
break 3
|
||||
fi
|
||||
|
||||
$MZ $h1 -c 1 -p 64 -a $h1mac -b $rp1mac \
|
||||
-A 192.0.1.1 -B 193.${i}.${j}.${k} \
|
||||
-t ip -q
|
||||
((count++))
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
tc_check_packets "dev $h2 ingress" 1 $route_count
|
||||
check_err $? "Offload mismatch"
|
||||
|
||||
tc filter del dev $h2 ingress protocol ip pref 1 flower \
|
||||
skip_sw dst_ip 193.0.0.0/8 action drop
|
||||
|
||||
router_routes_destroy
|
||||
}
|
||||
|
||||
router_cleanup()
|
||||
{
|
||||
pre_cleanup
|
||||
|
||||
router_routes_destroy
|
||||
router_destroy
|
||||
|
||||
router_h2_destroy
|
||||
router_h1_destroy
|
||||
|
||||
vrf_cleanup
|
||||
}
|
Viittaa uudesa ongelmassa
Block a user