diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 8578d1de1..c1036fc9e 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -886,6 +886,7 @@ Error MleRouter::HandleLinkAccept(RxInfo &aRxInfo, bool aRequest) RouteTlv routeTlv; LeaderData leaderData; uint8_t linkMargin; + bool shouldUpdateRoutes = false; SuccessOrExit(error = Tlv::Find(aRxInfo.mMessage, sourceAddress)); @@ -972,6 +973,7 @@ Error MleRouter::HandleLinkAccept(RxInfo &aRxInfo, bool aRequest) mLinkRequestAttempts = 0; mRetrieveNewNetworkData = true; IgnoreError(SendDataRequest(aRxInfo.mMessageInfo.GetPeerAddr())); + shouldUpdateRoutes = true; #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE Get().HandleTimeSyncMessage(aRxInfo.mMessage); @@ -1007,8 +1009,7 @@ Error MleRouter::HandleLinkAccept(RxInfo &aRxInfo, bool aRequest) router = mRouterTable.FindRouterById(routerId); OT_ASSERT(router != nullptr); } - - mRouterTable.UpdateRoutes(routeTlv, routerId); + shouldUpdateRoutes = true; break; case kErrorNotFound: @@ -1043,6 +1044,11 @@ Error MleRouter::HandleLinkAccept(RxInfo &aRxInfo, bool aRequest) mNeighborTable.Signal(NeighborTable::kRouterAdded, *router); + if (shouldUpdateRoutes) + { + mRouterTable.UpdateRoutes(routeTlv, routerId); + } + aRxInfo.mClass = RxInfo::kAuthoritativeMessage; ProcessKeySequence(aRxInfo);