From 13e7c4e70268794684951dd12b1686c22da98c34 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Tue, 28 Oct 2025 14:54:59 -0700 Subject: [PATCH] [multi-ail-detector] use direct callback from `RxRaTracker` (#12077) This commit introduces a direct callback mechanism from `RxRaTracker` to `MultiAilDetector` to signal changes in decision factors. This is in preparation of future changes allowing `MultiAilDetector` to run independently of `RoutingManager`. Previously, `RxRaTracker` would signal `RoutingManager`, which in turn would call `MultiAilDetector::Evaluate()`. This commit refactors this interaction by adding a new `HandleRxRaTrackerDecisionFactorChanged()` method to `MultiAilDetector`. --- src/core/border_router/multi_ail_detector.hpp | 5 +++++ src/core/border_router/routing_manager.cpp | 3 --- src/core/border_router/rx_ra_tracker.cpp | 9 ++++++++- 3 files changed, 13 insertions(+), 4 deletions(-) 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(); }