aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbtin Keshavarzian <abtink@google.com>2024-04-29 09:11:27 -0700
committerHanda Wang <handaw@google.com>2024-05-14 06:45:35 +0000
commit70829a996f34c2c1aabe7977517c46bb6b860def (patch)
tree7042e30c38c40d77a458d251359a51430ccdcf3c
parent0acd29948c4fb6f1783ce811a9e3eb849476e021 (diff)
downloadopenthread-master.tar.gz
[routing-manager] exclude on-link prefixes with short preferred lifetime (#10062)HEADmastermain
This commit updates `FindFavoredOnLinkPrefix()` to exclude discovered on-link prefixes with preferred lifetimes under 30 minutes. (cherry picked from commit efb80c0b8358af28e3cf7eb12aaff77545b02856) Change-Id: I70f979ba89c93b2026b341e0ea7faeb5c0fbf547
-rw-r--r--src/core/border_router/routing_manager.cpp3
-rw-r--r--src/core/border_router/routing_manager.hpp2
-rwxr-xr-xtests/scripts/thread-cert/border_router/test_on_link_prefix.py14
-rwxr-xr-xtests/scripts/thread-cert/node.py4
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 bebd795c8..b0dc91432 100644
--- a/src/core/border_router/routing_manager.cpp
+++ b/src/core/border_router/routing_manager.cpp
@@ -1242,7 +1242,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 37de6eca3..dfeb151cd 100644
--- a/src/core/border_router/routing_manager.hpp
+++ b/src/core/border_router/routing_manager.hpp
@@ -684,6 +684,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