Commit 5a1b72ce authored by Stephen Worley's avatar Stephen Worley Committed by David S. Miller

net: add large ecmp group nexthop tests

Add a couple large ecmp group nexthop selftests to cover
the remnant fixed by d69100b8.

The tests create 100 x32 ecmp groups of ipv4 and ipv6 and then
dump them. On kernels without the fix, they will fail due
to data remnant during the dump.
Signed-off-by: default avatarStephen Worley <sworley@cumulusnetworks.com>
Reviewed-by: default avatarDavid Ahern <dsahern@gmail.com>
Reviewed-by: default avatarDavid Ahern <dsahern@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f99c0646
...@@ -19,8 +19,8 @@ ret=0 ...@@ -19,8 +19,8 @@ ret=0
ksft_skip=4 ksft_skip=4
# all tests in this script. Can be overridden with -t option # all tests in this script. Can be overridden with -t option
IPV4_TESTS="ipv4_fcnal ipv4_grp_fcnal ipv4_withv6_fcnal ipv4_fcnal_runtime ipv4_compat_mode ipv4_fdb_grp_fcnal" IPV4_TESTS="ipv4_fcnal ipv4_grp_fcnal ipv4_withv6_fcnal ipv4_fcnal_runtime ipv4_large_grp ipv4_compat_mode ipv4_fdb_grp_fcnal"
IPV6_TESTS="ipv6_fcnal ipv6_grp_fcnal ipv6_fcnal_runtime ipv6_compat_mode ipv6_fdb_grp_fcnal" IPV6_TESTS="ipv6_fcnal ipv6_grp_fcnal ipv6_fcnal_runtime ipv6_large_grp ipv6_compat_mode ipv6_fdb_grp_fcnal"
ALL_TESTS="basic ${IPV4_TESTS} ${IPV6_TESTS}" ALL_TESTS="basic ${IPV4_TESTS} ${IPV6_TESTS}"
TESTS="${ALL_TESTS}" TESTS="${ALL_TESTS}"
...@@ -254,6 +254,60 @@ check_route6() ...@@ -254,6 +254,60 @@ check_route6()
check_output "${out}" "${expected}" check_output "${out}" "${expected}"
} }
check_large_grp()
{
local ipv=$1
local ecmp=$2
local grpnum=100
local nhidstart=100
local grpidstart=1000
local iter=0
local nhidstr=""
local grpidstr=""
local grpstr=""
local ipstr=""
if [ $ipv -eq 4 ]; then
ipstr="172.16.1."
else
ipstr="2001:db8:91::"
fi
#
# Create $grpnum groups with specified $ecmp and dump them
#
# create nexthops with different gateways
iter=2
while [ $iter -le $(($ecmp + 1)) ]
do
nhidstr="$(($nhidstart + $iter))"
run_cmd "$IP nexthop add id $nhidstr via $ipstr$iter dev veth1"
check_nexthop "id $nhidstr" "id $nhidstr via $ipstr$iter dev veth1 scope link"
if [ $iter -le $ecmp ]; then
grpstr+="$nhidstr/"
else
grpstr+="$nhidstr"
fi
((iter++))
done
# create duplicate large ecmp groups
iter=0
while [ $iter -le $grpnum ]
do
grpidstr="$(($grpidstart + $iter))"
run_cmd "$IP nexthop add id $grpidstr group $grpstr"
check_nexthop "id $grpidstr" "id $grpidstr group $grpstr"
((iter++))
done
# dump large groups
run_cmd "$IP nexthop list"
log_test $? 0 "Dump large (x$ecmp) ecmp groups"
}
start_ip_monitor() start_ip_monitor()
{ {
local mtype=$1 local mtype=$1
...@@ -700,6 +754,19 @@ ipv6_fcnal_runtime() ...@@ -700,6 +754,19 @@ ipv6_fcnal_runtime()
# route with src address and using nexthop - not allowed # route with src address and using nexthop - not allowed
} }
ipv6_large_grp()
{
local ecmp=32
echo
echo "IPv6 large groups (x$ecmp)"
echo "---------------------"
check_large_grp 6 $ecmp
$IP nexthop flush >/dev/null 2>&1
}
ipv4_fcnal() ipv4_fcnal()
{ {
local rc local rc
...@@ -1066,6 +1133,19 @@ ipv4_fcnal_runtime() ...@@ -1066,6 +1133,19 @@ ipv4_fcnal_runtime()
log_test $? 0 "IPv4 route with MPLS encap, v6 gw - check" log_test $? 0 "IPv4 route with MPLS encap, v6 gw - check"
} }
ipv4_large_grp()
{
local ecmp=32
echo
echo "IPv4 large groups (x$ecmp)"
echo "---------------------"
check_large_grp 4 $ecmp
$IP nexthop flush >/dev/null 2>&1
}
sysctl_nexthop_compat_mode_check() sysctl_nexthop_compat_mode_check()
{ {
local sysctlname="net.ipv4.nexthop_compat_mode" local sysctlname="net.ipv4.nexthop_compat_mode"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment