selftests: fib_tests: Add IPv6 nexthop spec tests
Add series of tests for valid and invalid nexthop specs for IPv6. $ TEST=fib_nexthop_test ./fib_tests.sh ... IPv6 nexthop tests TEST: Directly connected nexthop, unicast address [ OK ] TEST: Directly connected nexthop, unicast address with device [ OK ] TEST: Gateway is linklocal address [ OK ] TEST: Gateway is linklocal address, no device [ OK ] TEST: Gateway can not be local unicast address [ OK ] TEST: Gateway can not be local unicast address, with device [ OK ] TEST: Gateway can not be a local linklocal address [ OK ] TEST: Gateway can be local address in a VRF [ OK ] TEST: Gateway can be local address in a VRF, with device [ OK ] TEST: Gateway can be local linklocal address in a VRF [ OK ] TEST: Redirect to VRF lookup [ OK ] TEST: VRF route, gateway can be local address in default VRF [ OK ] TEST: VRF route, gateway can not be a local address [ OK ] TEST: VRF route, gateway can not be a local addr with device [ OK ] Signed-off-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a511858c75
commit
654d3a7821
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
ret=0
|
ret=0
|
||||||
|
|
||||||
|
VERBOSE=${VERBOSE:=0}
|
||||||
PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
|
PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
|
||||||
IP="ip -netns testns"
|
IP="ip -netns testns"
|
||||||
|
|
||||||
@ -16,10 +17,10 @@ log_test()
|
|||||||
local msg="$3"
|
local msg="$3"
|
||||||
|
|
||||||
if [ ${rc} -eq ${expected} ]; then
|
if [ ${rc} -eq ${expected} ]; then
|
||||||
printf " %-60s [ OK ]\n" "${msg}"
|
printf " TEST: %-60s [ OK ]\n" "${msg}"
|
||||||
else
|
else
|
||||||
ret=1
|
ret=1
|
||||||
printf " %-60s [FAIL]\n" "${msg}"
|
printf " TEST: %-60s [FAIL]\n" "${msg}"
|
||||||
if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
|
if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
|
||||||
echo
|
echo
|
||||||
echo "hit enter to continue, 'q' to quit"
|
echo "hit enter to continue, 'q' to quit"
|
||||||
@ -49,6 +50,28 @@ cleanup()
|
|||||||
ip netns del testns
|
ip netns del testns
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_linklocal()
|
||||||
|
{
|
||||||
|
local dev=$1
|
||||||
|
local addr
|
||||||
|
|
||||||
|
addr=$($IP -6 -br addr show dev ${dev} | \
|
||||||
|
awk '{
|
||||||
|
for (i = 3; i <= NF; ++i) {
|
||||||
|
if ($i ~ /^fe80/)
|
||||||
|
print $i
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
)
|
||||||
|
addr=${addr/\/*}
|
||||||
|
|
||||||
|
[ -z "$addr" ] && return 1
|
||||||
|
|
||||||
|
echo $addr
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
fib_unreg_unicast_test()
|
fib_unreg_unicast_test()
|
||||||
{
|
{
|
||||||
echo
|
echo
|
||||||
@ -390,6 +413,158 @@ fib_carrier_test()
|
|||||||
fib_carrier_unicast_test
|
fib_carrier_unicast_test
|
||||||
}
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Tests on nexthop spec
|
||||||
|
|
||||||
|
# run 'ip route add' with given spec
|
||||||
|
add_rt()
|
||||||
|
{
|
||||||
|
local desc="$1"
|
||||||
|
local erc=$2
|
||||||
|
local vrf=$3
|
||||||
|
local pfx=$4
|
||||||
|
local gw=$5
|
||||||
|
local dev=$6
|
||||||
|
local cmd out rc
|
||||||
|
|
||||||
|
[ "$vrf" = "-" ] && vrf="default"
|
||||||
|
[ -n "$gw" ] && gw="via $gw"
|
||||||
|
[ -n "$dev" ] && dev="dev $dev"
|
||||||
|
|
||||||
|
cmd="$IP route add vrf $vrf $pfx $gw $dev"
|
||||||
|
if [ "$VERBOSE" = "1" ]; then
|
||||||
|
printf "\n COMMAND: $cmd\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
out=$(eval $cmd 2>&1)
|
||||||
|
rc=$?
|
||||||
|
if [ "$VERBOSE" = "1" -a -n "$out" ]; then
|
||||||
|
echo " $out"
|
||||||
|
fi
|
||||||
|
log_test $rc $erc "$desc"
|
||||||
|
}
|
||||||
|
|
||||||
|
fib4_nexthop()
|
||||||
|
{
|
||||||
|
echo
|
||||||
|
echo "IPv4 nexthop tests"
|
||||||
|
|
||||||
|
echo "<<< write me >>>"
|
||||||
|
}
|
||||||
|
|
||||||
|
fib6_nexthop()
|
||||||
|
{
|
||||||
|
local lldummy=$(get_linklocal dummy0)
|
||||||
|
local llv1=$(get_linklocal dummy0)
|
||||||
|
|
||||||
|
if [ -z "$lldummy" ]; then
|
||||||
|
echo "Failed to get linklocal address for dummy0"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [ -z "$llv1" ]; then
|
||||||
|
echo "Failed to get linklocal address for veth1"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "IPv6 nexthop tests"
|
||||||
|
|
||||||
|
add_rt "Directly connected nexthop, unicast address" 0 \
|
||||||
|
- 2001:db8:101::/64 2001:db8:1::2
|
||||||
|
add_rt "Directly connected nexthop, unicast address with device" 0 \
|
||||||
|
- 2001:db8:102::/64 2001:db8:1::2 "dummy0"
|
||||||
|
add_rt "Gateway is linklocal address" 0 \
|
||||||
|
- 2001:db8:103::1/64 $llv1 "veth0"
|
||||||
|
|
||||||
|
# fails because LL address requires a device
|
||||||
|
add_rt "Gateway is linklocal address, no device" 2 \
|
||||||
|
- 2001:db8:104::1/64 $llv1
|
||||||
|
|
||||||
|
# local address can not be a gateway
|
||||||
|
add_rt "Gateway can not be local unicast address" 2 \
|
||||||
|
- 2001:db8:105::/64 2001:db8:1::1
|
||||||
|
add_rt "Gateway can not be local unicast address, with device" 2 \
|
||||||
|
- 2001:db8:106::/64 2001:db8:1::1 "dummy0"
|
||||||
|
add_rt "Gateway can not be a local linklocal address" 2 \
|
||||||
|
- 2001:db8:107::1/64 $lldummy "dummy0"
|
||||||
|
|
||||||
|
# VRF tests
|
||||||
|
add_rt "Gateway can be local address in a VRF" 0 \
|
||||||
|
- 2001:db8:108::/64 2001:db8:51::2
|
||||||
|
add_rt "Gateway can be local address in a VRF, with device" 0 \
|
||||||
|
- 2001:db8:109::/64 2001:db8:51::2 "veth0"
|
||||||
|
add_rt "Gateway can be local linklocal address in a VRF" 0 \
|
||||||
|
- 2001:db8:110::1/64 $llv1 "veth0"
|
||||||
|
|
||||||
|
add_rt "Redirect to VRF lookup" 0 \
|
||||||
|
- 2001:db8:111::/64 "" "red"
|
||||||
|
|
||||||
|
add_rt "VRF route, gateway can be local address in default VRF" 0 \
|
||||||
|
red 2001:db8:112::/64 2001:db8:51::1
|
||||||
|
|
||||||
|
# local address in same VRF fails
|
||||||
|
add_rt "VRF route, gateway can not be a local address" 2 \
|
||||||
|
red 2001:db8:113::1/64 2001:db8:2::1
|
||||||
|
add_rt "VRF route, gateway can not be a local addr with device" 2 \
|
||||||
|
red 2001:db8:114::1/64 2001:db8:2::1 "dummy1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default VRF:
|
||||||
|
# dummy0 - 198.51.100.1/24 2001:db8:1::1/64
|
||||||
|
# veth0 - 192.0.2.1/24 2001:db8:51::1/64
|
||||||
|
#
|
||||||
|
# VRF red:
|
||||||
|
# dummy1 - 192.168.2.1/24 2001:db8:2::1/64
|
||||||
|
# veth1 - 192.0.2.2/24 2001:db8:51::2/64
|
||||||
|
#
|
||||||
|
# [ dummy0 veth0 ]--[ veth1 dummy1 ]
|
||||||
|
|
||||||
|
fib_nexthop_test()
|
||||||
|
{
|
||||||
|
setup
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
$IP -4 rule add pref 32765 table local
|
||||||
|
$IP -4 rule del pref 0
|
||||||
|
$IP -6 rule add pref 32765 table local
|
||||||
|
$IP -6 rule del pref 0
|
||||||
|
|
||||||
|
$IP link add red type vrf table 1
|
||||||
|
$IP link set red up
|
||||||
|
$IP -4 route add vrf red unreachable default metric 4278198272
|
||||||
|
$IP -6 route add vrf red unreachable default metric 4278198272
|
||||||
|
|
||||||
|
$IP link add veth0 type veth peer name veth1
|
||||||
|
$IP link set dev veth0 up
|
||||||
|
$IP address add 192.0.2.1/24 dev veth0
|
||||||
|
$IP -6 address add 2001:db8:51::1/64 dev veth0
|
||||||
|
|
||||||
|
$IP link set dev veth1 vrf red up
|
||||||
|
$IP address add 192.0.2.2/24 dev veth1
|
||||||
|
$IP -6 address add 2001:db8:51::2/64 dev veth1
|
||||||
|
|
||||||
|
$IP link add dummy1 type dummy
|
||||||
|
$IP link set dev dummy1 vrf red up
|
||||||
|
$IP address add 192.168.2.1/24 dev dummy1
|
||||||
|
$IP -6 address add 2001:db8:2::1/64 dev dummy1
|
||||||
|
set +e
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
fib4_nexthop
|
||||||
|
fib6_nexthop
|
||||||
|
|
||||||
|
(
|
||||||
|
$IP link del dev dummy1
|
||||||
|
$IP link del veth0
|
||||||
|
$IP link del red
|
||||||
|
) 2>/dev/null
|
||||||
|
cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
|
||||||
fib_test()
|
fib_test()
|
||||||
{
|
{
|
||||||
if [ -n "$TEST" ]; then
|
if [ -n "$TEST" ]; then
|
||||||
@ -398,6 +573,7 @@ fib_test()
|
|||||||
fib_unreg_test
|
fib_unreg_test
|
||||||
fib_down_test
|
fib_down_test
|
||||||
fib_carrier_test
|
fib_carrier_test
|
||||||
|
fib_nexthop_test
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user