From 1e3f3d183028169d404b558a14dc5cd923be71ba Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Thu, 24 Aug 2017 14:03:03 -0700 Subject: [PATCH] [mle] avoid sending challenge when child is valid (#2129) This commit optimizes the parent-initiated MLE Child Update Request when the child is already valid by omitting the Challenge and TLV Request TLVs. --- src/core/thread/mle_router.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 1b04b381b..365625af2 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -2839,11 +2839,13 @@ otError MleRouter::SendChildUpdateRequest(Child *aChild) SuccessOrExit(error = AppendNetworkData(*message, !aChild->IsFullNetworkData())); SuccessOrExit(error = AppendActiveTimestamp(*message)); SuccessOrExit(error = AppendPendingTimestamp(*message)); - SuccessOrExit(error = AppendTlvRequest(*message, tlvs, sizeof(tlvs))); - aChild->GenerateChallenge(); - - SuccessOrExit(error = AppendChallenge(*message, aChild->GetChallenge(), aChild->GetChallengeSize())); + if (aChild->GetState() != Neighbor::kStateValid) + { + SuccessOrExit(error = AppendTlvRequest(*message, tlvs, sizeof(tlvs))); + aChild->GenerateChallenge(); + SuccessOrExit(error = AppendChallenge(*message, aChild->GetChallenge(), aChild->GetChallengeSize())); + } memset(&destination, 0, sizeof(destination)); destination.mFields.m16[0] = HostSwap16(0xfe80);