From d1f8d59e3f37922c3657b720d76b145d18ca96ef Mon Sep 17 00:00:00 2001 From: rongli Date: Thu, 18 Aug 2016 00:19:54 +0800 Subject: [PATCH] bugs and enhancements (#404) 1) Only RFD should SendChildUpdateRequest due to address update 2) Restore SendChildUpdateRequest() when HandleNetworkDataUpdate() for RFD as a feedback that their network data has been synced (in case network data update wouldn't cause address update 3) ActiveTimestamp might be optional in Data Request --- src/core/thread/mle.cpp | 11 +++++------ src/core/thread/mle_router.cpp | 11 ++++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 659a91519..64bb11fbb 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -942,14 +942,9 @@ void Mle::HandleNetifStateChanged(uint32_t aFlags) mNetif.SetStateChangedFlags(OT_IP6_ML_ADDR_CHANGED); } - switch (mDeviceState) + if (mDeviceState == kDeviceStateChild && (mDeviceMode & ModeTlv::kModeFFD) == 0) { - case kDeviceStateChild: SendChildUpdateRequest(); - break; - - default: - break; } exit: @@ -2386,6 +2381,10 @@ void Mle::HandleNetworkDataUpdate(void) { mMleRouter.HandleNetworkDataUpdateRouter(); } + else + { + SendChildUpdateRequest(); + } } } // namespace Mle diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 3a2e17324..c0b28a4a4 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -1987,8 +1987,12 @@ ThreadError MleRouter::HandleDataRequest(const Message &aMessage, const Ip6::Mes VerifyOrExit(tlvRequest.IsValid() && tlvRequest.GetLength() <= sizeof(tlvs), error = kThreadError_Parse); // Active Timestamp - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kActiveTimestamp, sizeof(activeTimestamp), activeTimestamp)); - VerifyOrExit(activeTimestamp.IsValid(), error = kThreadError_Parse); + activeTimestamp.SetLength(0); + + if (Tlv::GetTlv(aMessage, Tlv::kActiveTimestamp, sizeof(activeTimestamp), activeTimestamp) == kThreadError_None) + { + VerifyOrExit(activeTimestamp.IsValid(), error = kThreadError_Parse); + } // Pending Timestamp pendingTimestamp.SetLength(0); @@ -2002,7 +2006,8 @@ ThreadError MleRouter::HandleDataRequest(const Message &aMessage, const Ip6::Mes memcpy(tlvs, tlvRequest.GetTlvs(), tlvRequest.GetLength()); numTlvs = tlvRequest.GetLength(); - if (mNetif.GetActiveDataset().GetNetwork().GetTimestamp().Compare(activeTimestamp) != 0) + if (activeTimestamp.GetLength() == 0 || + mNetif.GetActiveDataset().GetNetwork().GetTimestamp().Compare(activeTimestamp) != 0) { tlvs[numTlvs++] = Tlv::kActiveDataset; }