mirror of
https://github.com/espressif/openthread.git
synced 2026-08-07 19:27:46 +00:00
[routing-manager] increase routing policy evaluation jitters (#7982)
This commit increase the routing policy evaluation jitter from 1 second to 2~4 seconds to avoid adding on-link prefix when the AIL GUA prefix is unavailable for a very short duration (usually during GUA prefix renewing).
This commit is contained in:
@@ -133,7 +133,7 @@ void RoutingManager::SetRouteInfoOptionPreference(RoutePreference aPreference)
|
||||
mRouteInfoOptionPreference = aPreference;
|
||||
|
||||
VerifyOrExit(mIsRunning);
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitter);
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitterMin, kRoutingPolicyEvaluationJitterMax);
|
||||
|
||||
exit:
|
||||
return;
|
||||
@@ -379,7 +379,7 @@ void RoutingManager::HandleNotifierEvents(Events aEvents)
|
||||
if (mIsRunning && aEvents.Contains(kEventThreadNetdataChanged))
|
||||
{
|
||||
UpdateDiscoveredPrefixTableOnNetDataChange();
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitter);
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitterMin, kRoutingPolicyEvaluationJitterMax);
|
||||
}
|
||||
|
||||
if (aEvents.Contains(kEventThreadExtPanIdChanged))
|
||||
@@ -388,7 +388,7 @@ void RoutingManager::HandleNotifierEvents(Events aEvents)
|
||||
|
||||
if (mIsRunning)
|
||||
{
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitter);
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitterMin, kRoutingPolicyEvaluationJitterMax);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -638,11 +638,11 @@ void RoutingManager::EvaluateRoutingPolicy(void)
|
||||
}
|
||||
}
|
||||
|
||||
void RoutingManager::StartRoutingPolicyEvaluationJitter(uint32_t aJitterMilli)
|
||||
void RoutingManager::StartRoutingPolicyEvaluationJitter(uint32_t aJitterMilliMin, uint32_t aJitterMilliMax)
|
||||
{
|
||||
OT_ASSERT(mIsRunning);
|
||||
|
||||
StartRoutingPolicyEvaluationDelay(Random::NonCrypto::GetUint32InRange(0, aJitterMilli));
|
||||
StartRoutingPolicyEvaluationDelay(Random::NonCrypto::GetUint32InRange(aJitterMilliMin, aJitterMilliMax));
|
||||
}
|
||||
|
||||
void RoutingManager::StartRoutingPolicyEvaluationDelay(uint32_t aDelayMilli)
|
||||
@@ -1048,7 +1048,7 @@ void RoutingManager::HandleRouterSolicit(const InfraIf::Icmp6Packet &aPacket, co
|
||||
mInfraIf.ToString().AsCString());
|
||||
|
||||
// Schedule routing policy evaluation with random jitter to respond with Router Advertisement.
|
||||
StartRoutingPolicyEvaluationJitter(kRaReplyJitter);
|
||||
StartRoutingPolicyEvaluationJitter(0, kRaReplyJitter);
|
||||
}
|
||||
|
||||
void RoutingManager::HandleRouterAdvertisement(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress)
|
||||
@@ -1163,7 +1163,7 @@ void RoutingManager::HandleDiscoveredPrefixTableChanged(void)
|
||||
|
||||
if (newFavoredPrefix != mFavoredDiscoveredOnLinkPrefix)
|
||||
{
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitter);
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitterMin, kRoutingPolicyEvaluationJitterMax);
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -1229,7 +1229,7 @@ void RoutingManager::UpdateRouterAdvertHeader(const Ip6::Nd::RouterAdvertMessage
|
||||
// reevaluate routing policy and send RA message with new
|
||||
// header.
|
||||
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitter);
|
||||
StartRoutingPolicyEvaluationJitter(kRoutingPolicyEvaluationJitterMin, kRoutingPolicyEvaluationJitterMax);
|
||||
}
|
||||
|
||||
exit:
|
||||
|
||||
@@ -315,10 +315,13 @@ private:
|
||||
static constexpr uint32_t kMaxRtrAdvInterval = 600; // Max Router Advertisement Interval. In sec.
|
||||
static constexpr uint32_t kMinRtrAdvInterval = kMaxRtrAdvInterval / 3; // Min RA Interval. In sec.
|
||||
static constexpr uint32_t kMaxInitRtrAdvInterval = 16; // Max Initial RA Interval. In sec.
|
||||
static constexpr uint32_t kRaReplyJitter = 500; // Jitter for sending RA after rx RS. In msec.
|
||||
static constexpr uint32_t kRtrSolicitationInterval = 4; // Interval between RSs. In sec.
|
||||
static constexpr uint32_t kMaxRtrSolicitationDelay = 1; // Max delay for initial solicitation. In sec.
|
||||
static constexpr uint32_t kRoutingPolicyEvaluationJitter = 1000; // Jitter for routing policy evaluation. In msec.
|
||||
static constexpr uint32_t kRaReplyJitter = 500; // Jitter for sending RA after rx RS. In msec.
|
||||
static constexpr uint32_t kRtrSolicitationInterval = 4; // Interval between RSs. In sec.
|
||||
static constexpr uint32_t kMaxRtrSolicitationDelay = 1; // Max delay for initial solicitation. In sec.
|
||||
static constexpr uint32_t kRoutingPolicyEvaluationJitterMin =
|
||||
2000; // Min jitter for routing policy evaluation. In msec.
|
||||
static constexpr uint32_t kRoutingPolicyEvaluationJitterMax =
|
||||
4000; // Max jitter for routing policy evaluation. In msec.
|
||||
static constexpr uint32_t kRtrSolicitationRetryDelay =
|
||||
kRtrSolicitationInterval; // The delay before retrying failed RS tx. In Sec.
|
||||
static constexpr uint32_t kMinDelayBetweenRtrAdvs = 3000; // Min delay (msec) between consecutive RAs.
|
||||
@@ -336,6 +339,8 @@ private:
|
||||
static_assert(kDefaultOnLinkPrefixLifetime >= kMaxRtrAdvInterval, "invalid default on-link prefix lifetime");
|
||||
static_assert(kRtrAdvStaleTime >= 1800 && kRtrAdvStaleTime <= kDefaultOnLinkPrefixLifetime,
|
||||
"invalid RA STALE time");
|
||||
static_assert(kRoutingPolicyEvaluationJitterMax > kRoutingPolicyEvaluationJitterMin,
|
||||
"kRoutingPolicyEvaluationJitterMax must be larger than kRoutingPolicyEvaluationJitterMin");
|
||||
|
||||
enum RouterAdvTxMode : uint8_t // Used in `SendRouterAdvertisement()`
|
||||
{
|
||||
@@ -636,7 +641,7 @@ private:
|
||||
#endif
|
||||
|
||||
void EvaluateRoutingPolicy(void);
|
||||
void StartRoutingPolicyEvaluationJitter(uint32_t aJitterMilli);
|
||||
void StartRoutingPolicyEvaluationJitter(uint32_t aJitterMilliMin, uint32_t aJitterMilliMax);
|
||||
void StartRoutingPolicyEvaluationDelay(uint32_t aDelayMilli);
|
||||
void EvaluateOmrPrefix(void);
|
||||
Error PublishExternalRoute(const Ip6::Prefix &aPrefix, RoutePreference aRoutePreference, bool aNat64 = false);
|
||||
|
||||
Reference in New Issue
Block a user