From 7086ea0dad93f204ec9d17256ad1da20c5462543 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Fri, 10 Oct 2025 12:54:14 -0700 Subject: [PATCH] [border-router] make `RxRaTracker` handle netdata events directly (#12016) This change makes the `RxRaTracker` a direct listener of network data change events from the `Notifier`. Previously, the `RoutingManager` would receive the network data change event and then call `RxRaTracker::HandleNetDataChange()`. This created an unnecessary dependency between the two components. By making `RxRaTracker` a direct listener, we decouple it from `RoutingManager`. The `HandleNetDataChange()` method in `RxRaTracker` is also made private as it is now only called from within the class. --- src/core/border_router/routing_manager.cpp | 1 - src/core/border_router/rx_ra_tracker.cpp | 8 ++++++++ src/core/border_router/rx_ra_tracker.hpp | 5 ++++- src/core/common/notifier.cpp | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/core/border_router/routing_manager.cpp b/src/core/border_router/routing_manager.cpp index 40ed432c0..af9f8cd9c 100644 --- a/src/core/border_router/routing_manager.cpp +++ b/src/core/border_router/routing_manager.cpp @@ -446,7 +446,6 @@ void RoutingManager::HandleNotifierEvents(Events aEvents) if (mIsRunning && aEvents.Contains(kEventThreadNetdataChanged)) { - Get().HandleNetDataChange(); mOnLinkPrefixManager.HandleNetDataChange(); ScheduleRoutingPolicyEvaluation(kAfterRandomDelay); } diff --git a/src/core/border_router/rx_ra_tracker.cpp b/src/core/border_router/rx_ra_tracker.cpp index 93b84f168..1381fafb4 100644 --- a/src/core/border_router/rx_ra_tracker.cpp +++ b/src/core/border_router/rx_ra_tracker.cpp @@ -502,6 +502,14 @@ exit: return; } +void RxRaTracker::HandleNotifierEvents(Events aEvents) +{ + if (aEvents.Contains(kEventThreadNetdataChanged)) + { + HandleNetDataChange(); + } +} + void RxRaTracker::HandleNetDataChange(void) { NetworkData::Iterator iterator = NetworkData::kIteratorInit; diff --git a/src/core/border_router/rx_ra_tracker.hpp b/src/core/border_router/rx_ra_tracker.hpp index 2c4a23634..9c0e02219 100644 --- a/src/core/border_router/rx_ra_tracker.hpp +++ b/src/core/border_router/rx_ra_tracker.hpp @@ -73,6 +73,7 @@ class NetDataBrTracker; class RxRaTracker : public InstanceLocator { friend class NetDataBrTracker; + friend class ot::Notifier; public: /** @@ -279,7 +280,6 @@ public: // Callbacks notifying of changes void RemoveOrDeprecateOldEntries(TimeMilli aTimeThreshold); void HandleLocalOnLinkPrefixChanged(void); - void HandleNetDataChange(void); private: static constexpr uint32_t kStaleTime = 600; // 10 minutes. @@ -497,6 +497,9 @@ private: #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE void ReportChangesToHistoryTracker(Router &aRouter, bool aRemoved); #endif + void HandleNotifierEvents(Events aEvents); + void HandleNetDataChange(void); + // Tasklet or timer callbacks void HandleSignalTask(void); void HandleRdnssAddrTask(void); diff --git a/src/core/common/notifier.cpp b/src/core/common/notifier.cpp index 527d648a1..ad09b7793 100644 --- a/src/core/common/notifier.cpp +++ b/src/core/common/notifier.cpp @@ -161,6 +161,7 @@ void Notifier::EmitEvents(void) Get().HandleNotifierEvents(events); #endif #if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE + Get().HandleNotifierEvents(events); Get().HandleNotifierEvents(events); #if OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE Get().HandleNotifierEvents(events);