From 383d0d28158969da2f00a1de291368a46986160f Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Tue, 7 May 2024 13:52:50 -0700 Subject: [PATCH] [routing-manager] add `CalculateExpirationTime()` (#10207) This commit adds `CalculateExpirationTime()`, which simplifies the calculation of expiration times of discovered prefix entry by clamping a given lifetime to the maximum value (in seconds) first before converting to milliseconds. --- src/core/border_router/routing_manager.cpp | 22 ++++++++-------------- src/core/border_router/routing_manager.hpp | 2 +- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/core/border_router/routing_manager.cpp b/src/core/border_router/routing_manager.cpp index ebd5d019e..0d001e38c 100644 --- a/src/core/border_router/routing_manager.cpp +++ b/src/core/border_router/routing_manager.cpp @@ -1740,7 +1740,7 @@ bool RoutingManager::DiscoveredPrefixTable::Entry::Matches(const ExpirationCheck TimeMilli RoutingManager::DiscoveredPrefixTable::Entry::GetExpireTime(void) const { - return mLastUpdateTime + CalculateExpireDelay(mValidLifetime); + return CalculateExpirationTime(mValidLifetime); } TimeMilli RoutingManager::DiscoveredPrefixTable::Entry::GetStaleTime(void) const @@ -1752,14 +1752,14 @@ TimeMilli RoutingManager::DiscoveredPrefixTable::Entry::GetStaleTime(void) const TimeMilli RoutingManager::DiscoveredPrefixTable::Entry::GetStaleTimeFromPreferredLifetime(void) const { - return mLastUpdateTime + CalculateExpireDelay(GetPreferredLifetime()); + return CalculateExpirationTime(GetPreferredLifetime()); } bool RoutingManager::DiscoveredPrefixTable::Entry::IsDeprecated(void) const { OT_ASSERT(IsOnLinkPrefix()); - return mLastUpdateTime + CalculateExpireDelay(GetPreferredLifetime()) <= TimerMilli::GetNow(); + return CalculateExpirationTime(GetPreferredLifetime()) <= TimerMilli::GetNow(); } RoutingManager::RoutePreference RoutingManager::DiscoveredPrefixTable::Entry::GetPreference(void) const @@ -1798,20 +1798,14 @@ void RoutingManager::DiscoveredPrefixTable::Entry::AdoptValidAndPreferredLifetim mLastUpdateTime = aEntry.GetLastUpdateTime(); } -uint32_t RoutingManager::DiscoveredPrefixTable::Entry::CalculateExpireDelay(uint32_t aValidLifetime) +TimeMilli RoutingManager::DiscoveredPrefixTable::Entry::CalculateExpirationTime(uint32_t aLifetime) const { - uint32_t delay; + // `aLifetime` is in unit of seconds. We clamp the lifetime to max + // interval supported by `Timer` (`2^31` msec or ~24.8 days). - if (aValidLifetime * static_cast(1000) > Timer::kMaxDelay) - { - delay = Timer::kMaxDelay; - } - else - { - delay = aValidLifetime * 1000; - } + static constexpr uint32_t kMaxLifetime = Time::MsecToSec(Timer::kMaxDelay); - return delay; + return mLastUpdateTime + Time::SecToMsec(Min(aLifetime, kMaxLifetime)); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/core/border_router/routing_manager.hpp b/src/core/border_router/routing_manager.hpp index a38860ccb..ef52ca65d 100644 --- a/src/core/border_router/routing_manager.hpp +++ b/src/core/border_router/routing_manager.hpp @@ -787,7 +787,7 @@ private: RoutePreference GetRoutePreference(void) const { return mShared.mRoutePreference; } private: - static uint32_t CalculateExpireDelay(uint32_t aValidLifetime); + TimeMilli CalculateExpirationTime(uint32_t aLifetime) const; Entry *mNext; Ip6::Prefix mPrefix;