From: Ido Schimmel <idosch@idosch•org>
To: Hangbin Liu <liuhangbin@gmail•com>
Cc: netdev@vger•kernel.org, "David S . Miller" <davem@davemloft•net>,
David Ahern <dsahern@kernel•org>,
Eric Dumazet <edumazet@google•com>,
Jakub Kicinski <kuba@kernel•org>, Paolo Abeni <pabeni@redhat•com>
Subject: Re: [PATCHv6 net-next 2/2] selftests: fib_test: add a test case for IPv6 source address delete
Date: Thu, 17 Aug 2023 15:57:29 +0300 [thread overview]
Message-ID: <ZN4ZOfg5dQ50oUwD@shredder> (raw)
In-Reply-To: <20230816060724.1398842-3-liuhangbin@gmail.com>
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@idosch•org>
> Suggested-by: David Ahern <dsahern@kernel•org>
> Signed-off-by: Hangbin Liu <liuhangbin@gmail•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
>
prev parent reply other threads:[~2023-08-17 12:57 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-16 6:07 [PATCHv6 net-next 0/2] ipv6: update route when delete source address Hangbin Liu
2023-08-16 6:07 ` [PATCHv6 net-next 1/2] ipv6: do not match device when remove source route Hangbin Liu
2023-08-17 12:02 ` Ido Schimmel
2023-08-16 6:07 ` [PATCHv6 net-next 2/2] selftests: fib_test: add a test case for IPv6 source address delete Hangbin Liu
2023-08-17 12:57 ` Ido Schimmel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZN4ZOfg5dQ50oUwD@shredder \
--to=idosch@idosch$(echo .)org \
--cc=davem@davemloft$(echo .)net \
--cc=dsahern@kernel$(echo .)org \
--cc=edumazet@google$(echo .)com \
--cc=kuba@kernel$(echo .)org \
--cc=liuhangbin@gmail$(echo .)com \
--cc=netdev@vger$(echo .)kernel.org \
--cc=pabeni@redhat$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox