diff --git a/src/core/border_router/routing_manager.cpp b/src/core/border_router/routing_manager.cpp index dfa1cdbb8..b3ebf8743 100644 --- a/src/core/border_router/routing_manager.cpp +++ b/src/core/border_router/routing_manager.cpp @@ -1845,7 +1845,9 @@ void RoutingManager::RxRaTracker::SetHeaderFlagsOn(RouterAdvert::Header &aHeader bool RoutingManager::RxRaTracker::IsAddressOnLink(const Ip6::Address &aAddress) const { - bool isOnLink = false; + bool isOnLink = Get().mOnLinkPrefixManager.AddressMatchesLocalPrefix(aAddress); + + VerifyOrExit(!isOnLink); for (const Router &router : mRouters) { @@ -2623,6 +2625,17 @@ void RoutingManager::OnLinkPrefixManager::Stop(void) } } +bool RoutingManager::OnLinkPrefixManager::AddressMatchesLocalPrefix(const Ip6::Address &aAddress) const +{ + bool matches = false; + + VerifyOrExit(GetState() != kIdle); + matches = aAddress.MatchesPrefix(mLocalPrefix); + +exit: + return matches; +} + void RoutingManager::OnLinkPrefixManager::Evaluate(void) { VerifyOrExit(!Get().mRsSender.IsInProgress()); diff --git a/src/core/border_router/routing_manager.hpp b/src/core/border_router/routing_manager.hpp index e92651614..bfc138957 100644 --- a/src/core/border_router/routing_manager.hpp +++ b/src/core/border_router/routing_manager.hpp @@ -1160,6 +1160,7 @@ private: void Evaluate(void); const Ip6::Prefix &GetLocalPrefix(void) const { return mLocalPrefix; } const Ip6::Prefix &GetFavoredDiscoveredPrefix(void) const { return mFavoredDiscoveredPrefix; } + bool AddressMatchesLocalPrefix(const Ip6::Address &aAddress) const; bool IsInitalEvaluationDone(void) const; void HandleRaPrefixTableChanged(void); bool ShouldPublishUlaRoute(void) const;