From efb80c0b8358af28e3cf7eb12aaff77545b02856 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Mon, 29 Apr 2024 09:11:27 -0700 Subject: [PATCH] [routing-manager] exclude on-link prefixes with short preferred lifetime (#10062) This commit updates `FindFavoredOnLinkPrefix()` to exclude discovered on-link prefixes with preferred lifetimes under 30 minutes. --- src/core/border_router/routing_manager.cpp | 3 ++- src/core/border_router/routing_manager.hpp | 2 ++ .../border_router/test_on_link_prefix.py | 14 -------------- tests/scripts/thread-cert/node.py | 4 ++-- 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/core/border_router/routing_manager.cpp b/src/core/border_router/routing_manager.cpp index cd9e66a56..9d2c2c72c 100644 --- a/src/core/border_router/routing_manager.cpp +++ b/src/core/border_router/routing_manager.cpp @@ -1247,7 +1247,8 @@ void RoutingManager::DiscoveredPrefixTable::FindFavoredOnLinkPrefix(Ip6::Prefix { for (const Entry &entry : router.mEntries) { - if (!entry.IsOnLinkPrefix() || entry.IsDeprecated()) + if (!entry.IsOnLinkPrefix() || entry.IsDeprecated() || + (entry.GetPreferredLifetime() < kFavoredOnLinkPrefixMinPreferredLifetime)) { continue; } diff --git a/src/core/border_router/routing_manager.hpp b/src/core/border_router/routing_manager.hpp index c52217320..6401f8e74 100644 --- a/src/core/border_router/routing_manager.hpp +++ b/src/core/border_router/routing_manager.hpp @@ -715,6 +715,8 @@ private: void HandleRouterTimer(void); private: + static constexpr uint32_t kFavoredOnLinkPrefixMinPreferredLifetime = 1800; // In sec. + #if !OPENTHREAD_CONFIG_BORDER_ROUTING_USE_HEAP_ENABLE static constexpr uint16_t kMaxRouters = OPENTHREAD_CONFIG_BORDER_ROUTING_MAX_DISCOVERED_ROUTERS; static constexpr uint16_t kMaxEntries = OPENTHREAD_CONFIG_BORDER_ROUTING_MAX_DISCOVERED_PREFIXES; diff --git a/tests/scripts/thread-cert/border_router/test_on_link_prefix.py b/tests/scripts/thread-cert/border_router/test_on_link_prefix.py index 0f56baa77..af2a25433 100755 --- a/tests/scripts/thread-cert/border_router/test_on_link_prefix.py +++ b/tests/scripts/thread-cert/border_router/test_on_link_prefix.py @@ -188,20 +188,6 @@ class MultiThreadNetworks(thread_cert.TestCase): host_on_link_addr = host.get_matched_ula_addresses(ON_LINK_PREFIX)[0] - # Wait 30 seconds for the radvd `ON_LINK_PREFIX` to be invalidated - # and make sure that Thread devices in both networks can't reach - # the on-link address. - self.simulator.go(30) # Valid Lifetime of radvd PIO is set to 60 seconds. - self.assertEqual(len(host.get_matched_ula_addresses(ON_LINK_PREFIX)), 0) - self.assertFalse(router1.ping(host_on_link_addr)) - self.assertFalse(host.ping(router1_omr_addr, backbone=True, interface=host_on_link_addr)) - self.assertFalse(router2.ping(host_on_link_addr)) - self.assertFalse(host.ping(router2_omr_addr, backbone=True, interface=host_on_link_addr)) - - # Verify connectivity between the two networks. - self.assertTrue(router1.ping(router2.get_ip6_address(config.ADDRESS_TYPE.OMR)[0])) - self.assertTrue(router2.ping(router1.get_ip6_address(config.ADDRESS_TYPE.OMR)[0])) - if __name__ == '__main__': unittest.main() diff --git a/tests/scripts/thread-cert/node.py b/tests/scripts/thread-cert/node.py index 9f5d337f9..118b692da 100755 --- a/tests/scripts/thread-cert/node.py +++ b/tests/scripts/thread-cert/node.py @@ -3982,8 +3982,8 @@ interface eth0 AdvOnLink on; AdvAutonomous %s; AdvRouterAddr off; - AdvPreferredLifetime 40; - AdvValidLifetime 60; + AdvPreferredLifetime 1800; + AdvValidLifetime 1800; }; }; EOF