diff --git a/src/core/border_router/multi_ail_detector.hpp b/src/core/border_router/multi_ail_detector.hpp index d8157e42a..8cecf6e95 100644 --- a/src/core/border_router/multi_ail_detector.hpp +++ b/src/core/border_router/multi_ail_detector.hpp @@ -52,6 +52,7 @@ namespace ot { namespace BorderRouter { class NetDataBrTracker; +class RxRaTracker; class RoutingManager; /** @@ -69,6 +70,7 @@ class RoutingManager; class MultiAilDetector : public InstanceLocator { friend class NetDataBrTracker; + friend class RxRaTracker; friend class RoutingManager; public: @@ -107,6 +109,9 @@ private: void Evaluate(void); void HandleTimer(void); + // Callback from `RxRaTracker` + void HandleRxRaTrackerDecisionFactorChanged(void) { Evaluate(); } + using DetectCallback = Callback; using DetectTimer = TimerMilliIn; diff --git a/src/core/border_router/routing_manager.cpp b/src/core/border_router/routing_manager.cpp index ae5ba8afa..8df3b9c2a 100644 --- a/src/core/border_router/routing_manager.cpp +++ b/src/core/border_router/routing_manager.cpp @@ -602,9 +602,6 @@ void RoutingManager::HandleRxRaTrackerDecisionFactorChanged(void) mOnLinkPrefixManager.HandleRxRaTrackerChanged(); mRoutePublisher.Evaluate(); -#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE - Get().Evaluate(); -#endif exit: return; diff --git a/src/core/border_router/rx_ra_tracker.cpp b/src/core/border_router/rx_ra_tracker.cpp index 98ded9da8..2d5165294 100644 --- a/src/core/border_router/rx_ra_tracker.cpp +++ b/src/core/border_router/rx_ra_tracker.cpp @@ -892,7 +892,14 @@ exit: void RxRaTracker::HandleExpirationTimer(void) { Evaluate(); } -void RxRaTracker::HandleSignalTask(void) { Get().HandleRxRaTrackerDecisionFactorChanged(); } +void RxRaTracker::HandleSignalTask(void) +{ +#if OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE + Get().HandleRxRaTrackerDecisionFactorChanged(); +#endif + + Get().HandleRxRaTrackerDecisionFactorChanged(); +} void RxRaTracker::HandleRdnssAddrTask(void) { mRdnssCallback.InvokeIfSet(); }