From dba0525e5f8787235846d2bdb548d8ab60838233 Mon Sep 17 00:00:00 2001 From: Robert Lubos Date: Tue, 6 Dec 2016 18:02:26 +0100 Subject: [PATCH] Update route data in a child after parent migration. (#1044) --- src/core/thread/mle.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index edb6cf481..0ae1fd02c 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -2037,6 +2037,7 @@ ThreadError Mle::HandleAdvertisement(const Message &aMessage, const Ip6::Message Neighbor *neighbor; SourceAddressTlv sourceAddress; LeaderDataTlv leaderData; + RouteTlv route; uint8_t tlvs[] = {Tlv::kNetworkData}; // Source Address @@ -2075,6 +2076,15 @@ ThreadError Mle::HandleAdvertisement(const Message &aMessage, const Ip6::Message leaderData.GetLeaderRouterId() != GetLeaderId())) { SetLeaderData(leaderData.GetPartitionId(), leaderData.GetWeighting(), leaderData.GetLeaderRouterId()); + + if ((mDeviceMode & ModeTlv::kModeFFD) && + (Tlv::GetTlv(aMessage, Tlv::kRoute, sizeof(route), route) == kThreadError_None) && + route.IsValid()) + { + // Overwrite Route Data + mMleRouter.ProcessRouteTlv(route); + } + mRetrieveNewNetworkData = true; }