[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <ZN4ZOfg5dQ50oUwD@shredder>
Date: Thu, 17 Aug 2023 15:57:29 +0300
From: Ido Schimmel <idosch@...sch.org>
To: Hangbin Liu <liuhangbin@...il.com>
Cc: netdev@...r.kernel.org, "David S . Miller" <davem@...emloft.net>,
David Ahern <dsahern@...nel.org>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>
Subject: Re: [PATCHv6 net-next 2/2] selftests: fib_test: add a test case for
IPv6 source address delete
This no longer applies after commit a63e10da42e7 ("selftests: fib_tests:
Add a test case for IPv6 garbage collection") so you will need to
rebase.
Thanks for the test cases. See a few comments below.
On Wed, Aug 16, 2023 at 02:07:24PM +0800, Hangbin Liu wrote:
> Add a test case for IPv6 source address delete. As David suggested, add tests:
> - Single device using src address
> - Two devices with the same source address
> - VRF with single device using src address
> - VRF with two devices using src address
>
> As Ido points out, in IPv6, the preferred source address is looked up in
> the same VRF as the first nexthop device. This will give us similar results
> to IPv4 if the route is installed in the same VRF as the nexthop device, but
> not when the nexthop device is enslaved to a different VRF. So add tests:
> - src address and nexthop dev in same VR
> - src address and nexthop device in different VRF
>
> The link local address delete logic is different from the global address.
> It should only affect the associate device it bonds to. Add tests cases
> for link local address testing.
>
> The table 0 and same FIB info tests are copied from IPv4 tests.
>
> Here is the test result:
>
> IPv6 delete address route tests
> Single device using src address
> TEST: Prefsrc removed when src address removed on other device [ OK ]
> Two devices with the same source address
> TEST: Prefsrc not removed when src address exist on other device [ OK ]
> VRF with single device using src address
> TEST: Prefsrc removed when src address removed on other device [ OK ]
> VRF with two devices using src address
> TEST: Prefsrc not removed when src address exist on other device [ OK ]
> src address and nexthop dev in same VRF
> TEST: Prefsrc removed from VRF when source address deleted [ OK ]
> TEST: Prefsrc in default VRF not removed [ OK ]
> TEST: Prefsrc not removed from VRF when source address exist [ OK ]
> TEST: Prefsrc in default VRF removed [ OK ]
> src address and nexthop device in different VRF
> TEST: Prefsrc not removed from VRF when nexthop dev in diff VRF [ OK ]
> TEST: Prefsrc not removed in default VRF [ OK ]
> TEST: Prefsrc removed from VRF when nexthop dev in diff VRF [ OK ]
> TEST: Prefsrc removed in default VRF [ OK ]
> Same FIB info with different table ID
> TEST: Prefsrc removed from VRF when source address deleted [ OK ]
> TEST: Prefsrc in default VRF not removed [ OK ]
> TEST: Prefsrc not removed from VRF when source address exist [ OK ]
> TEST: Prefsrc in default VRF removed [ OK ]
> Table ID 0
> TEST: Prefsrc removed from default VRF when source address deleted [ OK ]
> Link local source route
> TEST: Prefsrc not removed when delete ll addr from other dev [ OK ]
> TEST: Prefsrc removed when delete ll addr [ OK ]
> TEST: Prefsrc not removed when delete ll addr from other dev [ OK ]
> TEST: Prefsrc removed even ll addr still exist on other dev [ OK ]
>
> Tests passed: 21
> Tests failed: 0
>
> Suggested-by: Ido Schimmel <idosch@...sch.org>
> Suggested-by: David Ahern <dsahern@...nel.org>
> Signed-off-by: Hangbin Liu <liuhangbin@...il.com>
> ---
> v7: add more tests as Ido and David suggested. Remove the IPv4 part as I want
> to focus on the IPv6 fixes.
> ---
> tools/testing/selftests/net/fib_tests.sh | 163 ++++++++++++++++++++++-
> 1 file changed, 162 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh
> index 35d89dfa6f11..0aa17b2ac8e1 100755
> --- a/tools/testing/selftests/net/fib_tests.sh
> +++ b/tools/testing/selftests/net/fib_tests.sh
> @@ -9,7 +9,7 @@ ret=0
> ksft_skip=4
>
> # all tests in this script. Can be overridden with -t option
> -TESTS="unregister down carrier nexthop suppress ipv6_notify ipv4_notify ipv6_rt ipv4_rt ipv6_addr_metric ipv4_addr_metric ipv6_route_metrics ipv4_route_metrics ipv4_route_v6_gw rp_filter ipv4_del_addr ipv4_mangle ipv6_mangle ipv4_bcast_neigh"
> +TESTS="unregister down carrier nexthop suppress ipv6_notify ipv4_notify ipv6_rt ipv4_rt ipv6_addr_metric ipv4_addr_metric ipv6_route_metrics ipv4_route_metrics ipv4_route_v6_gw rp_filter ipv4_del_addr ipv6_del_addr ipv4_mangle ipv6_mangle ipv4_bcast_neigh"
>
> VERBOSE=0
> PAUSE_ON_FAIL=no
> @@ -1869,6 +1869,166 @@ ipv4_del_addr_test()
> cleanup
> }
>
> +ipv6_del_addr_test()
> +{
> + echo
> + echo "IPv6 delete address route tests"
> +
> + setup
> +
> + set -e
> + for i in $(seq 6); do
> + $IP li add dummy${i} up type dummy
> + done
> +
> + $IP li add red up type vrf table 1111
> + $IP ro add vrf red unreachable default
> + for i in $(seq 4 6); do
> + $IP li set dummy${i} vrf red
> + done
> +
> + $IP addr add dev dummy1 fe80::1/128
> + $IP addr add dev dummy1 2001:db8:101::1/64
> + $IP addr add dev dummy1 2001:db8:101::10/64
> + $IP addr add dev dummy1 2001:db8:101::11/64
> + $IP addr add dev dummy1 2001:db8:101::12/64
> + $IP addr add dev dummy1 2001:db8:101::13/64
> + $IP addr add dev dummy1 2001:db8:101::14/64
> + $IP addr add dev dummy1 2001:db8:101::15/64
> + $IP addr add dev dummy2 fe80::1/128
> + $IP addr add dev dummy2 2001:db8:101::1/64
> + $IP addr add dev dummy2 2001:db8:101::11/64
> + $IP addr add dev dummy3 fe80::1/128
> +
> + $IP addr add dev dummy4 2001:db8:101::1/64
> + $IP addr add dev dummy4 2001:db8:101::10/64
> + $IP addr add dev dummy4 2001:db8:101::11/64
> + $IP addr add dev dummy4 2001:db8:101::12/64
> + $IP addr add dev dummy4 2001:db8:101::13/64
> + $IP addr add dev dummy4 2001:db8:101::14/64
> + $IP addr add dev dummy5 2001:db8:101::1/64
> + $IP addr add dev dummy5 2001:db8:101::11/64
> +
> + # Single device using src address
> + $IP route add 2001:db8:110::/64 dev dummy3 src 2001:db8:101::10
> + # Two devices with the same source address
> + $IP route add 2001:db8:111::/64 dev dummy3 src 2001:db8:101::11
> + # VRF with single device using src address
> + $IP route add vrf red 2001:db8:110::/64 dev dummy6 src 2001:db8:101::10
> + # VRF with two devices using src address
> + $IP route add vrf red 2001:db8:111::/64 dev dummy6 src 2001:db8:101::11
> + # src address and nexthop dev in same VRF
> + $IP route add 2001:db8:112::/64 dev dummy3 src 2001:db8:101::12
> + $IP route add vrf red 2001:db8:112::/64 dev dummy6 src 2001:db8:101::12
> + # src address and nexthop device in different VRF
> + $IP route add 2001:db8:113::/64 dev lo src 2001:db8:101::13
> + $IP route add vrf red 2001:db8:113::/64 dev lo src 2001:db8:101::13
> + # Same FIB info with different table ID
I suggest removing this test case as in IPv6 there is no sharing of FIB
info, unlike in IPv4.
> + $IP route add 2001:db8:114::/64 via 2001:db8:101::2 src 2001:db8:101::14
> + $IP route add vrf red 2001:db8:114::/64 via 2001:db8:101::2 src 2001:db8:101::14
> + # table ID 0
> + $IP route add table 0 2001:db8:115::/64 via 2001:db8:101::2 src 2001:db8:101::15
> + # Link local source route
> + $IP route add 2001:db8:116::/64 dev dummy2 src fe80::1
> + $IP route add 2001:db8:117::/64 dev dummy3 src fe80::1
> + set +e
> +
> + echo " Single device using src address"
> +
> + $IP addr del dev dummy1 2001:db8:101::10/64
> + $IP -6 route show | grep -q "src 2001:db8:101::10 "
> + log_test $? 1 "Prefsrc removed when src address removed on other device"
> +
> + echo " Two devices with the same source address"
> +
> + $IP addr del dev dummy1 2001:db8:101::11/64
> + $IP -6 route show | grep -q "src 2001:db8:101::11 "
> + log_test $? 0 "Prefsrc not removed when src address exist on other device"
What about deleting the address from dummy2 and checking that the
preferred source address is removed from the route? I know it's similar
to the previous case, but still a good test case.
> +
> + echo " VRF with single device using src address"
> +
> + $IP addr del dev dummy4 2001:db8:101::10/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::10 "
> + log_test $? 1 "Prefsrc removed when src address removed on other device"
> +
> + echo " VRF with two devices using src address"
> +
> + $IP addr del dev dummy4 2001:db8:101::11/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::11 "
> + log_test $? 0 "Prefsrc not removed when src address exist on other device"
Likewise.
> +
> + echo " src address and nexthop dev in same VRF"
> +
> + $IP addr del dev dummy4 2001:db8:101::12/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::12 "
> + log_test $? 1 "Prefsrc removed from VRF when source address deleted"
> + $IP -6 route show | grep -q " src 2001:db8:101::12 "
> + log_test $? 0 "Prefsrc in default VRF not removed"
> +
> + $IP addr add dev dummy4 2001:db8:101::12/64
> + $IP route replace vrf red 2001:db8:112::/64 dev dummy6 src 2001:db8:101::12
> + $IP addr del dev dummy1 2001:db8:101::12/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::12 "
^
Please be consistent about the space before "src". In some places you
have it and in some you don't.
> + log_test $? 0 "Prefsrc not removed from VRF when source address exist"
> + $IP -6 route show | grep -q " src 2001:db8:101::12 "
> + log_test $? 1 "Prefsrc in default VRF removed"
> +
> + echo " src address and nexthop device in different VRF"
> +
> + $IP addr del dev dummy4 2001:db8:101::13/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::13 "
> + log_test $? 0 "Prefsrc not removed from VRF when nexthop dev in diff VRF"
> + $IP -6 route show | grep -q " src 2001:db8:101::13 "
> + log_test $? 0 "Prefsrc not removed in default VRF"
> +
> + $IP addr add dev dummy4 2001:db8:101::13/64
> + $IP addr del dev dummy1 2001:db8:101::13/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::13 "
> + log_test $? 1 "Prefsrc removed from VRF when nexthop dev in diff VRF"
> + $IP -6 route show | grep -q " src 2001:db8:101::13 "
> + log_test $? 1 "Prefsrc removed in default VRF"
> +
> + echo " Same FIB info with different table ID"
> +
> + $IP addr del dev dummy4 2001:db8:101::14/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::14 "
> + log_test $? 1 "Prefsrc removed from VRF when source address deleted"
> + $IP -6 route show | grep -q " src 2001:db8:101::14 "
> + log_test $? 0 "Prefsrc in default VRF not removed"
> +
> + $IP addr add dev dummy4 2001:db8:101::14/64
> + $IP route replace vrf red 2001:db8:114::/64 via 2001:db8:101::2 src 2001:db8:101::14
> + $IP addr del dev dummy1 2001:db8:101::14/64
> + $IP -6 route show vrf red | grep -q "src 2001:db8:101::14 "
> + log_test $? 0 "Prefsrc not removed from VRF when source address exist"
> + $IP -6 route show | grep -q " src 2001:db8:101::14 "
> + log_test $? 1 "Prefsrc in default VRF removed"
> +
> + echo " Table ID 0"
> +
> + $IP addr del dev dummy1 2001:db8:101::15/64
> + $IP -6 route show | grep -q "src 2001:db8:101::15"
> + log_test $? 1 "Prefsrc removed from default VRF when source address deleted"
> +
> + echo " Link local source route"
> + $IP addr del dev dummy1 fe80::1/128
> + $IP -6 route show | grep -q "2001:db8:116::/64 dev dummy2 src fe80::1"
> + log_test $? 0 "Prefsrc not removed when delete ll addr from other dev"
> + $IP addr del dev dummy2 fe80::1/128
> + $IP -6 route show | grep -q "2001:db8:116::/64 dev dummy2 src fe80::1"
> + log_test $? 1 "Prefsrc removed when delete ll addr"
> + $IP -6 route show | grep -q "2001:db8:117::/64 dev dummy3 src fe80::1"
> + log_test $? 0 "Prefsrc not removed when delete ll addr from other dev"
> + $IP addr add dev dummy1 fe80::1/128
> + $IP addr del dev dummy3 fe80::1/128
> + $IP -6 route show | grep -q "2001:db8:117::/64 dev dummy3 src fe80::1"
> + log_test $? 1 "Prefsrc removed even ll addr still exist on other dev"
> +
> + for i in $(seq 6); do
> + $IP li del dummy${i}
> + done
> + cleanup
> +}
>
> ipv4_route_v6_gw_test()
> {
> @@ -2211,6 +2371,7 @@ do
> ipv6_addr_metric) ipv6_addr_metric_test;;
> ipv4_addr_metric) ipv4_addr_metric_test;;
> ipv4_del_addr) ipv4_del_addr_test;;
> + ipv6_del_addr) ipv6_del_addr_test;;
> ipv6_route_metrics) ipv6_route_metrics_test;;
> ipv4_route_metrics) ipv4_route_metrics_test;;
> ipv4_route_v6_gw) ipv4_route_v6_gw_test;;
> --
> 2.38.1
>
Powered by blists - more mailing lists