From: Hengyu Liang <[email protected]>

Check that an IPv6 route via the loopback device can be added when the
loopback device is down, when a gateway is specified, including an
IPv4-mapped one, and when IPv6 is disabled on the loopback device. Such
routes are promoted to reject routes, so their nexthop is not validated.

Without the previous patch:

  # ./fib_tests.sh -t ipv6_route_lo

  IPv6 routes via loopback device tests
      TEST: Route via loopback device that is down              [FAIL]
      TEST: Route via loopback device with gateway              [FAIL]
      TEST: Route via loopback device with IPv4-mapped gateway  [FAIL]
      TEST: Route via loopback device with IPv6 disabled        [FAIL]

  Tests passed:   0
  Tests failed:   4

With the previous patch:

  # ./fib_tests.sh -t ipv6_route_lo

  IPv6 routes via loopback device tests
      TEST: Route via loopback device that is down              [ OK ]
      TEST: Route via loopback device with gateway              [ OK ]
      TEST: Route via loopback device with IPv4-mapped gateway  [ OK ]
      TEST: Route via loopback device with IPv6 disabled        [ OK ]

  Tests passed:   4
  Tests failed:   0

Signed-off-by: Hengyu Liang <[email protected]>
---
 tools/testing/selftests/net/fib_tests.sh | 31 +++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/fib_tests.sh 
b/tools/testing/selftests/net/fib_tests.sh
index b338bfb196a2..19e55a8630a2 100755
--- a/tools/testing/selftests/net/fib_tests.sh
+++ b/tools/testing/selftests/net/fib_tests.sh
@@ -14,7 +14,7 @@ TESTS="unregister down carrier nexthop suppress ipv6_notify 
ipv4_notify \
        ipv4_mpath_list ipv6_mpath_list ipv4_mpath_balance ipv6_mpath_balance \
        ipv4_mpath_balance_preferred ipv4_mpath_oif ipv4_mpath_oif_nh \
        ipv4_mpath_oif_vrf ipv6_mpath_oif ipv6_mpath_oif_nh ipv6_mpath_oif_vrf \
-       fib6_ra_to_static fib6_temp_addr_renewal"
+       fib6_ra_to_static fib6_temp_addr_renewal ipv6_route_lo"
 
 VERBOSE=0
 PAUSE_ON_FAIL=no
@@ -2466,6 +2466,34 @@ ipv4_route_v6_gw_test()
        route_cleanup
 }
 
+ipv6_route_lo_test()
+{
+       echo
+       echo "IPv6 routes via loopback device tests"
+
+       setup_ns ns1
+       IP="$(which ip) -netns $ns1"
+
+       # Routes via the loopback device are promoted to reject routes, so
+       # their nexthop is not validated.
+       run_cmd "$IP link set dev lo down"
+       run_cmd "$IP -6 ro add 2001:db8:101::/64 dev lo"
+       log_test $? 0 "Route via loopback device that is down"
+
+       run_cmd "$IP link set dev lo up"
+       run_cmd "$IP -6 ro add 2001:db8:102::/64 via 2001:db8:1::2 dev lo"
+       log_test $? 0 "Route via loopback device with gateway"
+
+       run_cmd "$IP -6 ro add 2001:db8:103::/64 via ::ffff:192.0.2.2 dev lo"
+       log_test $? 0 "Route via loopback device with IPv4-mapped gateway"
+
+       run_cmd "ip netns exec $ns1 sysctl -qw net.ipv6.conf.lo.disable_ipv6=1"
+       run_cmd "$IP -6 ro add 2001:db8:104::/64 dev lo"
+       log_test $? 0 "Route via loopback device with IPv6 disabled"
+
+       cleanup_ns "$ns1"
+}
+
 socat_check()
 {
        if [ ! -x "$(command -v socat)" ]; then
@@ -3291,6 +3319,7 @@ do
        ipv6_route_metrics)             ipv6_route_metrics_test;;
        ipv4_route_metrics)             ipv4_route_metrics_test;;
        ipv4_route_v6_gw)               ipv4_route_v6_gw_test;;
+       ipv6_route_lo)                  ipv6_route_lo_test;;
        ipv4_mangle)                    ipv4_mangle_test;;
        ipv6_mangle)                    ipv6_mangle_test;;
        ipv4_bcast_neigh)               ipv4_bcast_neigh_test;;
-- 
2.53.0


Reply via email to