diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2024-06-03 22:29:59 +0200 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2024-06-06 12:19:55 +0200 |
commit | 01420b2db512002cba0600e1d2b4d690efa66688 (patch) | |
tree | 3d3e2105a799b297265e7122e022834b91730443 /test/test-network | |
parent | man: document /usr/local/lib in search paths (diff) | |
download | systemd-01420b2db512002cba0600e1d2b4d690efa66688.tar.xz systemd-01420b2db512002cba0600e1d2b4d690efa66688.zip |
network/ndisc: use router lifetime as one for redirect route
Previously, we did not set lifetime for redirect route, and redirect
routes were removed only when received a RA from the target address.
Thus, routes that redirect on-link addresses were never removed.
RFCs mention nothing about the lifetime of redirection. But the previous
implementation does not pass the IPv6 Core Conformance Tests.
This makes
- remember all received RAs and manage them by the sender address
(previously, remembered only one with the highest preference),
- then use the router lifetime as one for redirect route,
- remove redirect route also when the router corresponds to the sender
address is dropped (previously, considered only target address).
Note, even if we recieve a new RA, we do not update existing redirect
routes. The lifetime of the redirect route is updated only when a new
Redirect message is received.
Closes #32527.
Diffstat (limited to 'test/test-network')
-rwxr-xr-x | test/test-network/systemd-networkd-tests.py | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index c12c28f676..848c8eb4bf 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -5606,11 +5606,13 @@ class NetworkdRATests(unittest.TestCase, Utilities): self.check_ipv6_token_static() - # Introduce two redirect routes. + # Introduce three redirect routes. check_output(f'{test_ndisc_send} --interface veth-peer --type redirect --target-address 2002:da8:1:1:1a:2b:3c:4d --redirect-destination 2002:da8:1:1:1a:2b:3c:4d') check_output(f'{test_ndisc_send} --interface veth-peer --type redirect --target-address 2002:da8:1:2:1a:2b:3c:4d --redirect-destination 2002:da8:1:2:1a:2b:3c:4d') + check_output(f'{test_ndisc_send} --interface veth-peer --type redirect --target-address 2002:da8:1:3:1a:2b:3c:4d --redirect-destination 2002:da8:1:3:1a:2b:3c:4d') self.wait_route('veth99', '2002:da8:1:1:1a:2b:3c:4d proto redirect', ipv='-6', timeout_sec=10) self.wait_route('veth99', '2002:da8:1:2:1a:2b:3c:4d proto redirect', ipv='-6', timeout_sec=10) + self.wait_route('veth99', '2002:da8:1:3:1a:2b:3c:4d proto redirect', ipv='-6', timeout_sec=10) # Change the target address of the redirects. check_output(f'{test_ndisc_send} --interface veth-peer --type redirect --target-address fe80::1 --redirect-destination 2002:da8:1:1:1a:2b:3c:4d') @@ -5627,11 +5629,7 @@ class NetworkdRATests(unittest.TestCase, Utilities): print(f'veth-peer IPv6LL address: {veth_peer_ipv6ll}') check_output(f'{test_ndisc_send} --interface veth-peer --type neighbor-advertisement --target-address {veth_peer_ipv6ll} --is-router no') self.wait_route_dropped('veth99', 'proto ra', ipv='-6', timeout_sec=10) - - output = check_output('ip -6 route show dev veth99') - print(output) - self.assertIn('2002:da8:1:1:1a:2b:3c:4d via fe80::1 proto redirect', output) - self.assertIn('2002:da8:1:2:1a:2b:3c:4d via fe80::2 proto redirect', output) + self.wait_route_dropped('veth99', 'proto redirect', ipv='-6', timeout_sec=10) # Check if sd-radv refuses RS from the same interface. # See https://github.com/systemd/systemd/pull/32267#discussion_r1566721306 |