mirror of
https://github.com/espressif/openthread.git
synced 2026-09-06 09:10:04 +00:00
[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:
@@ -1213,7 +1213,7 @@ void RoutingManager::MultiAilDetector::Evaluate(void)
|
|||||||
mNetDataPeerBrCount = count;
|
mNetDataPeerBrCount = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
count = Get<RoutingManager>().mRxRaTracker.CountReachablePeerBrs();
|
count = Get<RoutingManager>().mRxRaTracker.GetReachablePeerBrCount();
|
||||||
|
|
||||||
if (count != mRxRaTrackerReachablePeerBrCount)
|
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)
|
if (oldFactors != mDecisionFactors)
|
||||||
{
|
{
|
||||||
mSignalTask.Post();
|
mSignalTask.Post();
|
||||||
@@ -2021,14 +2025,6 @@ void RoutingManager::RxRaTracker::HandleRouterTimer(void)
|
|||||||
{
|
{
|
||||||
entry.ClearLifetime();
|
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;
|
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 RoutingManager::RxRaTracker::CountReachablePeerBrs(void) const
|
||||||
{
|
{
|
||||||
uint16_t count = 0;
|
uint16_t count = 0;
|
||||||
@@ -2198,6 +2194,7 @@ uint16_t RoutingManager::RxRaTracker::CountReachablePeerBrs(void) const
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
// RxRaTracker::Iterator
|
// RxRaTracker::Iterator
|
||||||
|
|
||||||
|
|||||||
@@ -1036,6 +1036,9 @@ private:
|
|||||||
bool ContainsDefaultOrNonUlaRoutePrefix(void) const { return mDecisionFactors.mHasNonUlaRoute; }
|
bool ContainsDefaultOrNonUlaRoutePrefix(void) const { return mDecisionFactors.mHasNonUlaRoute; }
|
||||||
bool ContainsNonUlaOnLinkPrefix(void) const { return mDecisionFactors.mHasNonUlaOnLink; }
|
bool ContainsNonUlaOnLinkPrefix(void) const { return mDecisionFactors.mHasNonUlaOnLink; }
|
||||||
bool ContainsUlaOnLinkPrefix(void) const { return mDecisionFactors.mHasUlaOnLink; }
|
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; }
|
const Ip6::Prefix &GetFavoredOnLinkPrefix(void) const { return mDecisionFactors.mFavoredOnLinkPrefix; }
|
||||||
void SetHeaderFlagsOn(RouterAdvert::Header &aHeader) const;
|
void SetHeaderFlagsOn(RouterAdvert::Header &aHeader) const;
|
||||||
@@ -1051,10 +1054,6 @@ private:
|
|||||||
Error GetNextRouter(PrefixTableIterator &aIterator, RouterEntry &aEntry) const;
|
Error GetNextRouter(PrefixTableIterator &aIterator, RouterEntry &aEntry) const;
|
||||||
Error GetNextRdnssAddr(PrefixTableIterator &aIterator, RdnssAddrEntry &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
|
// Callbacks notifying of changes
|
||||||
void RemoveOrDeprecateOldEntries(TimeMilli aTimeThreshold);
|
void RemoveOrDeprecateOldEntries(TimeMilli aTimeThreshold);
|
||||||
void HandleLocalOnLinkPrefixChanged(void);
|
void HandleLocalOnLinkPrefixChanged(void);
|
||||||
@@ -1242,6 +1241,9 @@ private:
|
|||||||
bool mHasUlaOnLink : 1;
|
bool mHasUlaOnLink : 1;
|
||||||
bool mHeaderManagedAddressConfigFlag : 1;
|
bool mHeaderManagedAddressConfigFlag : 1;
|
||||||
bool mHeaderOtherConfigFlag : 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 OnLinkPrefix &aPrefix, NextFireTime &aStaleTime);
|
||||||
void DetermineStaleTimeFor(const RoutePrefix &aPrefix, NextFireTime &aStaleTime);
|
void DetermineStaleTimeFor(const RoutePrefix &aPrefix, NextFireTime &aStaleTime);
|
||||||
void SendNeighborSolicitToRouter(const Router &aRouter);
|
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
|
#if OPENTHREAD_CONFIG_BORDER_ROUTING_USE_HEAP_ENABLE
|
||||||
template <class Type> Entry<Type> *AllocateEntry(void) { return Entry<Type>::Allocate(); }
|
template <class Type> Entry<Type> *AllocateEntry(void) { return Entry<Type>::Allocate(); }
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user