[routing-manager] enhance MultiAilDetector (#11589)

This commit counts only reachable peer BRs for quick multi-AIL detection
when peer BR moves to a different infrastructure link.
This commit is contained in:
Rongli Sun
2025-06-12 22:03:48 +09:00
committed by GitHub
parent baf13fc994
commit 8a19434b8a
2 changed files with 23 additions and 14 deletions
+21 -12
View File
@@ -1184,7 +1184,7 @@ RoutingManager::MultiAilDetector::MultiAilDetector(Instance &aInstance)
: InstanceLocator(aInstance)
, mDetected(false)
, mNetDataPeerBrCount(0)
, mRxRaTrackerPeerBrCount(0)
, mRxRaTrackerReachablePeerBrCount(0)
, mTimer(aInstance)
{
}
@@ -1192,9 +1192,9 @@ RoutingManager::MultiAilDetector::MultiAilDetector(Instance &aInstance)
void RoutingManager::MultiAilDetector::Stop(void)
{
mTimer.Stop();
mDetected = false;
mNetDataPeerBrCount = 0;
mRxRaTrackerPeerBrCount = 0;
mDetected = false;
mNetDataPeerBrCount = 0;
mRxRaTrackerReachablePeerBrCount = 0;
}
void RoutingManager::MultiAilDetector::Evaluate(void)
@@ -1213,15 +1213,15 @@ void RoutingManager::MultiAilDetector::Evaluate(void)
mNetDataPeerBrCount = count;
}
count = Get<RoutingManager>().mRxRaTracker.CountPeerBrs();
count = Get<RoutingManager>().mRxRaTracker.CountReachablePeerBrs();
if (count != mRxRaTrackerPeerBrCount)
if (count != mRxRaTrackerReachablePeerBrCount)
{
LogInfo("Peer BR count from RaTracker: %u -> %u", mRxRaTrackerPeerBrCount, count);
mRxRaTrackerPeerBrCount = count;
LogInfo("Reachable Peer BR count from RaTracker: %u -> %u", mRxRaTrackerReachablePeerBrCount, count);
mRxRaTrackerReachablePeerBrCount = count;
}
detected = (mNetDataPeerBrCount > mRxRaTrackerPeerBrCount);
detected = (mNetDataPeerBrCount > mRxRaTrackerReachablePeerBrCount);
if (detected == mDetected)
{
@@ -1242,7 +1242,8 @@ void RoutingManager::MultiAilDetector::HandleTimer(void)
{
LogNote("BRs on multi AIL detected - BRs are likely connected to different infra-links");
LogInfo("More peer BRs in netdata vs from rx RAs for past %lu seconds", ToUlong(Time::MsecToSec(kDetectTime)));
LogInfo("NetData Peer BR count: %u, RaTracker Peer BR count: %u", mNetDataPeerBrCount, mRxRaTrackerPeerBrCount);
LogInfo("NetData Peer BR count: %u, RaTracker reachable Peer BR count: %u", mNetDataPeerBrCount,
mRxRaTrackerReachablePeerBrCount);
mDetected = true;
}
else
@@ -2022,6 +2023,14 @@ 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
}
}
@@ -2176,13 +2185,13 @@ exit:
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
uint16_t RoutingManager::RxRaTracker::CountPeerBrs(void) const
uint16_t RoutingManager::RxRaTracker::CountReachablePeerBrs(void) const
{
uint16_t count = 0;
for (const Router &router : mRouters)
{
if (!router.mIsLocalDevice && router.IsPeerBr())
if (!router.mIsLocalDevice && router.IsPeerBr() && router.IsReachable())
{
count++;
}
+2 -2
View File
@@ -987,7 +987,7 @@ private:
bool mDetected;
uint16_t mNetDataPeerBrCount;
uint16_t mRxRaTrackerPeerBrCount;
uint16_t mRxRaTrackerReachablePeerBrCount;
DetectTimer mTimer;
DetectCallback mCallback;
};
@@ -1052,7 +1052,7 @@ private:
Error GetNextRdnssAddr(PrefixTableIterator &aIterator, RdnssAddrEntry &aEntry) const;
#if OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
uint16_t CountPeerBrs(void) const;
uint16_t CountReachablePeerBrs(void) const;
#endif
// Callbacks notifying of changes