[routing-manager] enhance peer BR count tracking and signaling (#11594)

This commit enhances how changes in the number of reachable peer
Border Routers (BRs) are tracked and signaled. This tracking is
handled by `RxRaTracker` and utilized by the `MultiAilDetector` to
determine if BRs are connected to different AILs.

The `RxRaTracker::DecisionFactors` class now includes and tracks
`mReachablePeerBrCount`. This value is updated in the `Evaluate()`
method, which is invoked upon any change to the internal state
tracked by `RxRaTracker` (e.g., changes in discovered prefixes or
routers). This ensures that any change in the number of peer BRs is
promptly detected and signaled to other sub-components, allowing them
to update their state or take necessary actions.
This commit is contained in:
Abtin Keshavarzian
2025-06-18 23:17:41 +09:00
committed by GitHub
parent e99a523726
commit 6d0618fc78
2 changed files with 16 additions and 14 deletions
+7 -10
View File
@@ -1213,7 +1213,7 @@ void RoutingManager::MultiAilDetector::Evaluate(void)
mNetDataPeerBrCount = count;
}
count = Get<RoutingManager>().mRxRaTracker.CountReachablePeerBrs();
count = Get<RoutingManager>().mRxRaTracker.GetReachablePeerBrCount();
if (count != mRxRaTrackerReachablePeerBrCount)
{
@@ -1812,6 +1812,10 @@ void RoutingManager::RxRaTracker::Evaluate(void)
}
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
mDecisionFactors.mReachablePeerBrCount = CountReachablePeerBrs();
#endif
if (oldFactors != mDecisionFactors)
{
mSignalTask.Post();
@@ -2021,14 +2025,6 @@ void RoutingManager::RxRaTracker::HandleRouterTimer(void)
{
entry.ClearLifetime();
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
// When a Peer BR becomes unreachable, post a task that will do multi-ail evaluation.
if (router.IsPeerBr())
{
mSignalTask.Post();
}
#endif
}
}
@@ -2182,7 +2178,7 @@ exit:
return error;
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
uint16_t RoutingManager::RxRaTracker::CountReachablePeerBrs(void) const
{
uint16_t count = 0;
@@ -2198,6 +2194,7 @@ uint16_t RoutingManager::RxRaTracker::CountReachablePeerBrs(void) const
return count;
}
#endif
//---------------------------------------------------------------------------------------------------------------------
// RxRaTracker::Iterator
+9 -4
View File
@@ -1036,6 +1036,9 @@ private:
bool ContainsDefaultOrNonUlaRoutePrefix(void) const { return mDecisionFactors.mHasNonUlaRoute; }
bool ContainsNonUlaOnLinkPrefix(void) const { return mDecisionFactors.mHasNonUlaOnLink; }
bool ContainsUlaOnLinkPrefix(void) const { return mDecisionFactors.mHasUlaOnLink; }
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
uint16_t GetReachablePeerBrCount(void) const { return mDecisionFactors.mReachablePeerBrCount; }
#endif
const Ip6::Prefix &GetFavoredOnLinkPrefix(void) const { return mDecisionFactors.mFavoredOnLinkPrefix; }
void SetHeaderFlagsOn(RouterAdvert::Header &aHeader) const;
@@ -1051,10 +1054,6 @@ private:
Error GetNextRouter(PrefixTableIterator &aIterator, RouterEntry &aEntry) const;
Error GetNextRdnssAddr(PrefixTableIterator &aIterator, RdnssAddrEntry &aEntry) const;
#if OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
uint16_t CountReachablePeerBrs(void) const;
#endif
// Callbacks notifying of changes
void RemoveOrDeprecateOldEntries(TimeMilli aTimeThreshold);
void HandleLocalOnLinkPrefixChanged(void);
@@ -1242,6 +1241,9 @@ private:
bool mHasUlaOnLink : 1;
bool mHeaderManagedAddressConfigFlag : 1;
bool mHeaderOtherConfigFlag : 1;
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
uint16_t mReachablePeerBrCount;
#endif
};
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -1254,6 +1256,9 @@ private:
void DetermineStaleTimeFor(const OnLinkPrefix &aPrefix, NextFireTime &aStaleTime);
void DetermineStaleTimeFor(const RoutePrefix &aPrefix, NextFireTime &aStaleTime);
void SendNeighborSolicitToRouter(const Router &aRouter);
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
uint16_t CountReachablePeerBrs(void) const;
#endif
#if OPENTHREAD_CONFIG_BORDER_ROUTING_USE_HEAP_ENABLE
template <class Type> Entry<Type> *AllocateEntry(void) { return Entry<Type>::Allocate(); }
#else