Skip to content

Commit 654d3a7

Browse files
dsaherndavem330
authored andcommitted
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent a511858 commit 654d3a7

File tree

1 file changed

+178
-2
lines changed

1 file changed

+178
-2
lines changed

tools/testing/selftests/net/fib_tests.sh

Lines changed: 178 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
ret=0
88

9+
VERBOSE=${VERBOSE:=0}
910
PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
1011
IP="ip -netns testns"
1112

@@ -16,10 +17,10 @@ log_test()
1617
local msg="$3"
1718

1819
if [ ${rc} -eq ${expected} ]; then
19-
printf " %-60s [ OK ]\n" "${msg}"
20+
printf " TEST: %-60s [ OK ]\n" "${msg}"
2021
else
2122
ret=1
22-
printf " %-60s [FAIL]\n" "${msg}"
23+
printf " TEST: %-60s [FAIL]\n" "${msg}"
2324
if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
2425
echo
2526
echo "hit enter to continue, 'q' to quit"
@@ -49,6 +50,28 @@ cleanup()
4950
ip netns del testns
5051
}
5152

53+
get_linklocal()
54+
{
55+
local dev=$1
56+
local addr
57+
58+
addr=$($IP -6 -br addr show dev ${dev} | \
59+
awk '{
60+
for (i = 3; i <= NF; ++i) {
61+
if ($i ~ /^fe80/)
62+
print $i
63+
}
64+
}'
65+
)
66+
addr=${addr/\/*}
67+
68+
[ -z "$addr" ] && return 1
69+
70+
echo $addr
71+
72+
return 0
73+
}
74+
5275
fib_unreg_unicast_test()
5376
{
5477
echo
@@ -390,6 +413,158 @@ fib_carrier_test()
390413
fib_carrier_unicast_test
391414
}
392415

416+
################################################################################
417+
# Tests on nexthop spec
418+
419+
# run 'ip route add' with given spec
420+
add_rt()
421+
{
422+
local desc="$1"
423+
local erc=$2
424+
local vrf=$3
425+
local pfx=$4
426+
local gw=$5
427+
local dev=$6
428+
local cmd out rc
429+
430+
[ "$vrf" = "-" ] && vrf="default"
431+
[ -n "$gw" ] && gw="via $gw"
432+
[ -n "$dev" ] && dev="dev $dev"
433+
434+
cmd="$IP route add vrf $vrf $pfx $gw $dev"
435+
if [ "$VERBOSE" = "1" ]; then
436+
printf "\n COMMAND: $cmd\n"
437+
fi
438+
439+
out=$(eval $cmd 2>&1)
440+
rc=$?
441+
if [ "$VERBOSE" = "1" -a -n "$out" ]; then
442+
echo " $out"
443+
fi
444+
log_test $rc $erc "$desc"
445+
}
446+
447+
fib4_nexthop()
448+
{
449+
echo
450+
echo "IPv4 nexthop tests"
451+
452+
echo "<<< write me >>>"
453+
}
454+
455+
fib6_nexthop()
456+
{
457+
local lldummy=$(get_linklocal dummy0)
458+
local llv1=$(get_linklocal dummy0)
459+
460+
if [ -z "$lldummy" ]; then
461+
echo "Failed to get linklocal address for dummy0"
462+
return 1
463+
fi
464+
if [ -z "$llv1" ]; then
465+
echo "Failed to get linklocal address for veth1"
466+
return 1
467+
fi
468+
469+
echo
470+
echo "IPv6 nexthop tests"
471+
472+
add_rt "Directly connected nexthop, unicast address" 0 \
473+
- 2001:db8:101::/64 2001:db8:1::2
474+
add_rt "Directly connected nexthop, unicast address with device" 0 \
475+
- 2001:db8:102::/64 2001:db8:1::2 "dummy0"
476+
add_rt "Gateway is linklocal address" 0 \
477+
- 2001:db8:103::1/64 $llv1 "veth0"
478+
479+
# fails because LL address requires a device
480+
add_rt "Gateway is linklocal address, no device" 2 \
481+
- 2001:db8:104::1/64 $llv1
482+
483+
# local address can not be a gateway
484+
add_rt "Gateway can not be local unicast address" 2 \
485+
- 2001:db8:105::/64 2001:db8:1::1
486+
add_rt "Gateway can not be local unicast address, with device" 2 \
487+
- 2001:db8:106::/64 2001:db8:1::1 "dummy0"
488+
add_rt "Gateway can not be a local linklocal address" 2 \
489+
- 2001:db8:107::1/64 $lldummy "dummy0"
490+
491+
# VRF tests
492+
add_rt "Gateway can be local address in a VRF" 0 \
493+
- 2001:db8:108::/64 2001:db8:51::2
494+
add_rt "Gateway can be local address in a VRF, with device" 0 \
495+
- 2001:db8:109::/64 2001:db8:51::2 "veth0"
496+
add_rt "Gateway can be local linklocal address in a VRF" 0 \
497+
- 2001:db8:110::1/64 $llv1 "veth0"
498+
499+
add_rt "Redirect to VRF lookup" 0 \
500+
- 2001:db8:111::/64 "" "red"
501+
502+
add_rt "VRF route, gateway can be local address in default VRF" 0 \
503+
red 2001:db8:112::/64 2001:db8:51::1
504+
505+
# local address in same VRF fails
506+
add_rt "VRF route, gateway can not be a local address" 2 \
507+
red 2001:db8:113::1/64 2001:db8:2::1
508+
add_rt "VRF route, gateway can not be a local addr with device" 2 \
509+
red 2001:db8:114::1/64 2001:db8:2::1 "dummy1"
510+
}
511+
512+
# Default VRF:
513+
# dummy0 - 198.51.100.1/24 2001:db8:1::1/64
514+
# veth0 - 192.0.2.1/24 2001:db8:51::1/64
515+
#
516+
# VRF red:
517+
# dummy1 - 192.168.2.1/24 2001:db8:2::1/64
518+
# veth1 - 192.0.2.2/24 2001:db8:51::2/64
519+
#
520+
# [ dummy0 veth0 ]--[ veth1 dummy1 ]
521+
522+
fib_nexthop_test()
523+
{
524+
setup
525+
526+
set -e
527+
528+
$IP -4 rule add pref 32765 table local
529+
$IP -4 rule del pref 0
530+
$IP -6 rule add pref 32765 table local
531+
$IP -6 rule del pref 0
532+
533+
$IP link add red type vrf table 1
534+
$IP link set red up
535+
$IP -4 route add vrf red unreachable default metric 4278198272
536+
$IP -6 route add vrf red unreachable default metric 4278198272
537+
538+
$IP link add veth0 type veth peer name veth1
539+
$IP link set dev veth0 up
540+
$IP address add 192.0.2.1/24 dev veth0
541+
$IP -6 address add 2001:db8:51::1/64 dev veth0
542+
543+
$IP link set dev veth1 vrf red up
544+
$IP address add 192.0.2.2/24 dev veth1
545+
$IP -6 address add 2001:db8:51::2/64 dev veth1
546+
547+
$IP link add dummy1 type dummy
548+
$IP link set dev dummy1 vrf red up
549+
$IP address add 192.168.2.1/24 dev dummy1
550+
$IP -6 address add 2001:db8:2::1/64 dev dummy1
551+
set +e
552+
553+
sleep 1
554+
fib4_nexthop
555+
fib6_nexthop
556+
557+
(
558+
$IP link del dev dummy1
559+
$IP link del veth0
560+
$IP link del red
561+
) 2>/dev/null
562+
cleanup
563+
}
564+
565+
################################################################################
566+
#
567+
393568
fib_test()
394569
{
395570
if [ -n "$TEST" ]; then
@@ -398,6 +573,7 @@ fib_test()
398573
fib_unreg_test
399574
fib_down_test
400575
fib_carrier_test
576+
fib_nexthop_test
401577
fi
402578
}
403579

0 commit comments

Comments
 (0)