Currently, the test breaks if the SUT already has a default route
configured for IPv6. Fix by avoiding the use of the default namespace.

Fixes: 4ed591c8ab44 ("net/ipv6: Allow onlink routes to have a device mismatch 
if it is the default route")
Suggested-by: Fernando Fernandez Mancera <[email protected]>
Signed-off-by: Ricardo B. Marlière <[email protected]>
---
Changes in v2:
- Don't use the default namespace, instead of simply increasing the metric
- Link to v1: 
https://lore.kernel.org/r/[email protected]
---
 tools/testing/selftests/net/fib-onlink-tests.sh | 71 +++++++++++--------------
 1 file changed, 30 insertions(+), 41 deletions(-)

diff --git a/tools/testing/selftests/net/fib-onlink-tests.sh 
b/tools/testing/selftests/net/fib-onlink-tests.sh
index ec2d6ceb1f08..c01be076b210 100755
--- a/tools/testing/selftests/net/fib-onlink-tests.sh
+++ b/tools/testing/selftests/net/fib-onlink-tests.sh
@@ -120,7 +120,7 @@ log_subsection()
 
 run_cmd()
 {
-       local cmd="$*"
+       local cmd="$1"
        local out
        local rc
 
@@ -145,7 +145,7 @@ get_linklocal()
        local pfx
        local addr
 
-       addr=$(${pfx} ip -6 -br addr show dev ${dev} | \
+       addr=$(${pfx} ${IP} -6 -br addr show dev ${dev} | \
        awk '{
                for (i = 3; i <= NF; ++i) {
                        if ($i ~ /^fe80/)
@@ -173,58 +173,48 @@ setup()
 
        set -e
 
-       # create namespace
-       setup_ns PEER_NS
+       # create namespaces
+       setup_ns ns1
+       IP="ip -netns $ns1"
+       setup_ns ns2
 
        # add vrf table
-       ip li add ${VRF} type vrf table ${VRF_TABLE}
-       ip li set ${VRF} up
-       ip ro add table ${VRF_TABLE} unreachable default metric 8192
-       ip -6 ro add table ${VRF_TABLE} unreachable default metric 8192
+       ${IP} li add ${VRF} type vrf table ${VRF_TABLE}
+       ${IP} li set ${VRF} up
+       ${IP} ro add table ${VRF_TABLE} unreachable default metric 8192
+       ${IP} -6 ro add table ${VRF_TABLE} unreachable default metric 8192
 
        # create test interfaces
-       ip li add ${NETIFS[p1]} type veth peer name ${NETIFS[p2]}
-       ip li add ${NETIFS[p3]} type veth peer name ${NETIFS[p4]}
-       ip li add ${NETIFS[p5]} type veth peer name ${NETIFS[p6]}
-       ip li add ${NETIFS[p7]} type veth peer name ${NETIFS[p8]}
+       ${IP} li add ${NETIFS[p1]} type veth peer name ${NETIFS[p2]}
+       ${IP} li add ${NETIFS[p3]} type veth peer name ${NETIFS[p4]}
+       ${IP} li add ${NETIFS[p5]} type veth peer name ${NETIFS[p6]}
+       ${IP} li add ${NETIFS[p7]} type veth peer name ${NETIFS[p8]}
 
        # enslave vrf interfaces
        for n in 5 7; do
-               ip li set ${NETIFS[p${n}]} vrf ${VRF}
+               ${IP} li set ${NETIFS[p${n}]} vrf ${VRF}
        done
 
        # add addresses
        for n in 1 3 5 7; do
-               ip li set ${NETIFS[p${n}]} up
-               ip addr add ${V4ADDRS[p${n}]}/24 dev ${NETIFS[p${n}]}
-               ip addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]} nodad
+               ${IP} li set ${NETIFS[p${n}]} up
+               ${IP} addr add ${V4ADDRS[p${n}]}/24 dev ${NETIFS[p${n}]}
+               ${IP} addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]} nodad
        done
 
        # move peer interfaces to namespace and add addresses
        for n in 2 4 6 8; do
-               ip li set ${NETIFS[p${n}]} netns ${PEER_NS} up
-               ip -netns ${PEER_NS} addr add ${V4ADDRS[p${n}]}/24 dev 
${NETIFS[p${n}]}
-               ip -netns ${PEER_NS} addr add ${V6ADDRS[p${n}]}/64 dev 
${NETIFS[p${n}]} nodad
+               ${IP} li set ${NETIFS[p${n}]} netns ${ns2} up
+               ip -netns $ns2 addr add ${V4ADDRS[p${n}]}/24 dev 
${NETIFS[p${n}]}
+               ip -netns $ns2 addr add ${V6ADDRS[p${n}]}/64 dev 
${NETIFS[p${n}]} nodad
        done
 
-       ip -6 ro add default via ${V6ADDRS[p3]/::[0-9]/::64}
-       ip -6 ro add table ${VRF_TABLE} default via ${V6ADDRS[p7]/::[0-9]/::64}
+       ${IP} -6 ro add default via ${V6ADDRS[p3]/::[0-9]/::64}
+       ${IP} -6 ro add table ${VRF_TABLE} default via 
${V6ADDRS[p7]/::[0-9]/::64}
 
        set +e
 }
 
-cleanup()
-{
-       # make sure we start from a clean slate
-       cleanup_ns ${PEER_NS} 2>/dev/null
-       for n in 1 3 5 7; do
-               ip link del ${NETIFS[p${n}]} 2>/dev/null
-       done
-       ip link del ${VRF} 2>/dev/null
-       ip ro flush table ${VRF_TABLE}
-       ip -6 ro flush table ${VRF_TABLE}
-}
-
 
################################################################################
 # IPv4 tests
 #
@@ -241,7 +231,7 @@ run_ip()
        # dev arg may be empty
        [ -n "${dev}" ] && dev="dev ${dev}"
 
-       run_cmd ip ro add table "${table}" "${prefix}"/32 via "${gw}" "${dev}" 
onlink
+       run_cmd "${IP} ro add table ${table} ${prefix}/32 via ${gw} ${dev} 
onlink"
        log_test $? ${exp_rc} "${desc}"
 }
 
@@ -257,8 +247,8 @@ run_ip_mpath()
        # dev arg may be empty
        [ -n "${dev}" ] && dev="dev ${dev}"
 
-       run_cmd ip ro add table "${table}" "${prefix}"/32 \
-               nexthop via ${nh1} nexthop via ${nh2}
+       run_cmd "${IP} ro add table ${table} ${prefix}/32 \
+               nexthop via ${nh1} nexthop via ${nh2}"
        log_test $? ${exp_rc} "${desc}"
 }
 
@@ -339,7 +329,7 @@ run_ip6()
        # dev arg may be empty
        [ -n "${dev}" ] && dev="dev ${dev}"
 
-       run_cmd ip -6 ro add table "${table}" "${prefix}"/128 via "${gw}" 
"${dev}" onlink
+       run_cmd "${IP} -6 ro add table ${table} ${prefix}/128 via ${gw} ${dev} 
onlink"
        log_test $? ${exp_rc} "${desc}"
 }
 
@@ -353,8 +343,8 @@ run_ip6_mpath()
        local exp_rc="$6"
        local desc="$7"
 
-       run_cmd ip -6 ro add table "${table}" "${prefix}"/128 "${opts}" \
-               nexthop via ${nh1} nexthop via ${nh2}
+       run_cmd "${IP} -6 ro add table ${table} ${prefix}/128 ${opts} \
+               nexthop via ${nh1} nexthop via ${nh2}"
        log_test $? ${exp_rc} "${desc}"
 }
 
@@ -491,10 +481,9 @@ do
        esac
 done
 
-cleanup
 setup
 run_onlink_tests
-cleanup
+cleanup_ns ${ns1} ${ns2}
 
 if [ "$TESTS" != "none" ]; then
        printf "\nTests passed: %3d\n" ${nsuccess}

---
base-commit: 50e194b6da721e4fa1fc6ebcf5969803c214929a
change-id: 20260107-selftests-net-fib-onlink-73bd8643ad3e

Best regards,
-- 
Ricardo B. Marlière <[email protected]>


Reply via email to