Skip to content

Commit

Permalink
selftests/net: Adding test cases of replacing routes and route advert…
Browse files Browse the repository at this point in the history
…isements.

Add tests of changing permanent routes to temporary routes and the reversed
case to make sure GC working correctly in these cases.

Add tests for the temporary routes from RA.

Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com>
  • Loading branch information
ThinkerYzu1 committed Jan 29, 2024
1 parent fdc46f8 commit fb52af4
Showing 1 changed file with 116 additions and 9 deletions.
125 changes: 116 additions & 9 deletions tools/testing/selftests/net/fib_tests.sh
Expand Up @@ -768,39 +768,146 @@ fib6_gc_test()
$IP -6 route add 2001:20::$i \
via 2001:10::2 dev dummy_10 expires $EXPIRE
done
sleep $(($EXPIRE * 2))
sleep $(($EXPIRE * 2 + 1))
N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
if [ $N_EXP_SLEEP -ne 0 ]; then
echo "FAIL: expected 0 routes with expires, got $N_EXP_SLEEP"
ret=1
else
ret=0
# Permanent routes
for i in $(seq 1 5000); do
$IP -6 route add 2001:30::$i \
via 2001:10::2 dev dummy_10
done
# Temporary routes
for i in $(seq 1 1000); do
# Expire route after $EXPIRE seconds
$IP -6 route add 2001:20::$i \
via 2001:10::2 dev dummy_10 expires $EXPIRE
done
sleep $(($EXPIRE * 2 + 1))
N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
if [ $N_EXP_SLEEP -ne 0 ]; then
echo "FAIL: expected 0 routes with expires," \
"got $N_EXP_SLEEP (5000 permanent routes)"
ret=1
else
ret=0
fi
fi

$IP link del dev dummy_10
$IP link add dummy_10 type dummy
$IP link set dev dummy_10 up
$IP -6 address add 2001:10::1/64 dev dummy_10

log_test $ret 0 "ipv6 route garbage collection"

# Permanent routes
for i in $(seq 1 5000); do
$IP -6 route add 2001:30::$i \
for i in $(seq 1 100); do
# Expire route after $EXPIRE seconds
$IP -6 route add 2001:20::$i \
via 2001:10::2 dev dummy_10
done
# Replace with temporary routes
for i in $(seq 1 100); do
# Expire route after $EXPIRE seconds
$IP -6 route replace 2001:20::$i \
via 2001:10::2 dev dummy_10 expires $EXPIRE
done
N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
if [ $N_EXP_SLEEP -ne 100 ]; then
echo "FAIL: expected 100 routes with expires, got $N_EXP_SLEEP"
fi
sleep $(($EXPIRE * 2 + 1))
N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
if [ $N_EXP_SLEEP -ne 0 ]; then
echo "FAIL: expected 0 routes with expires," \
"got $N_EXP_SLEEP"
ret=1
else
ret=0
fi

$IP link del dev dummy_10
$IP link add dummy_10 type dummy
$IP link set dev dummy_10 up
$IP -6 address add 2001:10::1/64 dev dummy_10

log_test $ret 0 "ipv6 route garbage collection (replace with expires)"

PERM_BASE=$($IP -6 route list |grep -v expires|wc -l)
# Temporary routes
for i in $(seq 1 1000); do
for i in $(seq 1 100); do
# Expire route after $EXPIRE seconds
$IP -6 route add 2001:20::$i \
via 2001:10::2 dev dummy_10 expires $EXPIRE
done
sleep $(($EXPIRE * 2))
# Replace with permanent routes
for i in $(seq 1 100); do
# Expire route after $EXPIRE seconds
$IP -6 route replace 2001:20::$i \
via 2001:10::2 dev dummy_10
done
N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
if [ $N_EXP_SLEEP -ne 0 ]; then
echo "FAIL: expected 0 routes with expires," \
"got $N_EXP_SLEEP (5000 permanent routes)"
"got $N_EXP_SLEEP"
fi
sleep $(($EXPIRE * 2 + 1))
N_EXP_PERM=$($IP -6 route list |grep -v expires|wc -l)
N_EXP_PERM=$(($N_EXP_PERM - $PERM_BASE))
if [ $N_EXP_PERM -ne 100 ]; then
echo "FAIL: expected 100 permanent routes," \
"got $N_EXP_PERM"
ret=1
else
ret=0
fi

set +e
$IP link del dev dummy_10
$IP link add veth1 type veth peer name veth2
$IP link set dev veth1 up
$IP link set dev veth2 up
$IP -6 address add 2001:10::1/64 dev veth1 nodad
$IP -6 address add 2001:10::2/64 dev veth2 nodad

log_test $ret 0 "ipv6 route garbage collection (replace with permanent)"

# Routes received from RA
if ! which ra6 &>/dev/null; then
echo "SKIP: ra6 not found"
cleanup &> /dev/null
set +e
return 0
fi

log_test $ret 0 "ipv6 route garbage collection"
systemctl stop systemd-networkd.socket
systemctl stop systemd-networkd.service
$NS_EXEC sysctl -w net.ipv6.conf.veth1.accept_ra=2 &> /dev/null
$NS_EXEC sysctl -w net.ipv6.conf.veth1.accept_ra_rt_info_max_plen=127 &> /dev/null
RA6=$(which ra6)
$NS_EXEC $RA6 -i veth2 -d 2001:10::1 -R '2003:10::/64#1#$EXPIRE' -t $EXPIRE
N_EXP=$($IP -6 route list |grep expires|wc -l)
if [ $N_EXP -ne 1 ]; then
echo "FAIL: expected 1 routes with expires," \
"got $N_EXP"
ret=1
else
sleep $(($EXPIRE * 2 + 1))
N_EXP=$($IP -6 route list |grep expires|wc -l)
if [ $N_EXP -ne 0 ]; then
echo "FAIL: expected 0 routes with expires," \
"got $N_EXP"
ret=1
else
ret=0
fi
fi

log_test $ret 0 "ipv6 route garbage collection (ra6)"

set +e

cleanup &> /dev/null
}
Expand Down

0 comments on commit fb52af4

Please sign in to comment.