Skip to content

Commit 6d0618f

Browse files
authored
[routing-manager] enhance peer BR count tracking and signaling (openthread#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.
1 parent e99a523 commit 6d0618f

2 files changed

Lines changed: 16 additions & 14 deletions

File tree

src/core/border_router/routing_manager.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,7 +1213,7 @@ void RoutingManager::MultiAilDetector::Evaluate(void)
12131213
mNetDataPeerBrCount = count;
12141214
}
12151215

1216-
count = Get<RoutingManager>().mRxRaTracker.CountReachablePeerBrs();
1216+
count = Get<RoutingManager>().mRxRaTracker.GetReachablePeerBrCount();
12171217

12181218
if (count != mRxRaTrackerReachablePeerBrCount)
12191219
{
@@ -1812,6 +1812,10 @@ void RoutingManager::RxRaTracker::Evaluate(void)
18121812
}
18131813
}
18141814

1815+
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
1816+
mDecisionFactors.mReachablePeerBrCount = CountReachablePeerBrs();
1817+
#endif
1818+
18151819
if (oldFactors != mDecisionFactors)
18161820
{
18171821
mSignalTask.Post();
@@ -2021,14 +2025,6 @@ void RoutingManager::RxRaTracker::HandleRouterTimer(void)
20212025
{
20222026
entry.ClearLifetime();
20232027
}
2024-
2025-
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
2026-
// When a Peer BR becomes unreachable, post a task that will do multi-ail evaluation.
2027-
if (router.IsPeerBr())
2028-
{
2029-
mSignalTask.Post();
2030-
}
2031-
#endif
20322028
}
20332029
}
20342030

@@ -2182,7 +2178,7 @@ Error RoutingManager::RxRaTracker::GetNextRdnssAddr(PrefixTableIterator &aIterat
21822178
return error;
21832179
}
21842180

2185-
#if OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
2181+
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
21862182
uint16_t RoutingManager::RxRaTracker::CountReachablePeerBrs(void) const
21872183
{
21882184
uint16_t count = 0;
@@ -2198,6 +2194,7 @@ uint16_t RoutingManager::RxRaTracker::CountReachablePeerBrs(void) const
21982194
return count;
21992195
}
22002196
#endif
2197+
22012198
//---------------------------------------------------------------------------------------------------------------------
22022199
// RxRaTracker::Iterator
22032200

src/core/border_router/routing_manager.hpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,9 @@ class RoutingManager : public InstanceLocator
10361036
bool ContainsDefaultOrNonUlaRoutePrefix(void) const { return mDecisionFactors.mHasNonUlaRoute; }
10371037
bool ContainsNonUlaOnLinkPrefix(void) const { return mDecisionFactors.mHasNonUlaOnLink; }
10381038
bool ContainsUlaOnLinkPrefix(void) const { return mDecisionFactors.mHasUlaOnLink; }
1039+
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
1040+
uint16_t GetReachablePeerBrCount(void) const { return mDecisionFactors.mReachablePeerBrCount; }
1041+
#endif
10391042

10401043
const Ip6::Prefix &GetFavoredOnLinkPrefix(void) const { return mDecisionFactors.mFavoredOnLinkPrefix; }
10411044
void SetHeaderFlagsOn(RouterAdvert::Header &aHeader) const;
@@ -1051,10 +1054,6 @@ class RoutingManager : public InstanceLocator
10511054
Error GetNextRouter(PrefixTableIterator &aIterator, RouterEntry &aEntry) const;
10521055
Error GetNextRdnssAddr(PrefixTableIterator &aIterator, RdnssAddrEntry &aEntry) const;
10531056

1054-
#if OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
1055-
uint16_t CountReachablePeerBrs(void) const;
1056-
#endif
1057-
10581057
// Callbacks notifying of changes
10591058
void RemoveOrDeprecateOldEntries(TimeMilli aTimeThreshold);
10601059
void HandleLocalOnLinkPrefixChanged(void);
@@ -1242,6 +1241,9 @@ class RoutingManager : public InstanceLocator
12421241
bool mHasUlaOnLink : 1;
12431242
bool mHeaderManagedAddressConfigFlag : 1;
12441243
bool mHeaderOtherConfigFlag : 1;
1244+
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
1245+
uint16_t mReachablePeerBrCount;
1246+
#endif
12451247
};
12461248

12471249
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -1254,6 +1256,9 @@ class RoutingManager : public InstanceLocator
12541256
void DetermineStaleTimeFor(const OnLinkPrefix &aPrefix, NextFireTime &aStaleTime);
12551257
void DetermineStaleTimeFor(const RoutePrefix &aPrefix, NextFireTime &aStaleTime);
12561258
void SendNeighborSolicitToRouter(const Router &aRouter);
1259+
#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
1260+
uint16_t CountReachablePeerBrs(void) const;
1261+
#endif
12571262
#if OPENTHREAD_CONFIG_BORDER_ROUTING_USE_HEAP_ENABLE
12581263
template <class Type> Entry<Type> *AllocateEntry(void) { return Entry<Type>::Allocate(); }
12591264
#else

0 commit comments

Comments
 (0)