[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:
Simon Lin
2022-08-16 13:19:34 -07:00
committed by GitHub
parent 1bc309452f
commit 92a5bd5451
2 changed files with 18 additions and 13 deletions
+8 -8
View File
@@ -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:
+10 -5
View File
@@ -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);