MLE: Fix restore of rx-on children. (#1853)

This commit is contained in:
Łukasz Duda
2017-05-31 18:13:03 +02:00
committed by Jonathan Hui
parent 5f6a0a8514
commit 6fcab15f2d
5 changed files with 21 additions and 5 deletions
+1 -1
View File
@@ -2204,7 +2204,7 @@ void Mle::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageIn
case Header::kCommandChildUpdateRequest:
if (mRole == OT_DEVICE_ROLE_LEADER || mRole == OT_DEVICE_ROLE_ROUTER)
{
mNetif.GetMle().HandleChildUpdateRequest(aMessage, aMessageInfo);
mNetif.GetMle().HandleChildUpdateRequest(aMessage, aMessageInfo, keySequence);
}
else
{
+8 -1
View File
@@ -2215,7 +2215,8 @@ exit:
return error;
}
otError MleRouter::HandleChildUpdateRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
otError MleRouter::HandleChildUpdateRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo,
uint32_t aKeySequence)
{
static const uint8_t kMaxResponseTlvs = 10;
@@ -2315,6 +2316,12 @@ otError MleRouter::HandleChildUpdateRequest(const Message &aMessage, const Ip6::
child->SetLastHeard(Timer::GetNow());
if (child->IsStateRestoring())
{
SetChildStateToValid(child);
child->SetKeySequence(aKeySequence);
}
SendChildUpdateResponse(child, aMessageInfo, tlvs, tlvslength, &challenge);
exit:
+2 -1
View File
@@ -691,7 +691,8 @@ private:
otError HandleParentRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
otError HandleChildIdRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo,
uint32_t aKeySequence);
otError HandleChildUpdateRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
otError HandleChildUpdateRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo,
uint32_t aKeySequence);
otError HandleChildUpdateResponse(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo,
uint32_t aKeySequence);
otError HandleDataRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
+1 -1
View File
@@ -139,7 +139,7 @@ private:
otError HandleAdvertisement(const Message &, const Ip6::MessageInfo &) { return OT_ERROR_DROP; }
otError HandleParentRequest(const Message &, const Ip6::MessageInfo &) { return OT_ERROR_DROP; }
otError HandleChildIdRequest(const Message &, const Ip6::MessageInfo &, uint32_t) { return OT_ERROR_DROP; }
otError HandleChildUpdateRequest(const Message &, const Ip6::MessageInfo &) { return OT_ERROR_DROP; }
otError HandleChildUpdateRequest(const Message &, const Ip6::MessageInfo &, uint32_t) { return OT_ERROR_DROP; }
otError HandleChildUpdateResponse(const Message &, const Ip6::MessageInfo &, uint32_t) { return OT_ERROR_DROP; }
otError HandleDataRequest(const Message &, const Ip6::MessageInfo &) { return OT_ERROR_DROP; }
otError HandleNetworkDataUpdateRouter(void) { return OT_ERROR_NONE; }
+9 -1
View File
@@ -83,6 +83,14 @@ public:
*/
void SetState(State aState) { mState = static_cast<uint8_t>(aState); }
/**
* Check if the neighbor/child is being restored.
*
* @returns TRUE if the neighbor is being restored, FALSE otherwise.
*
*/
bool IsStateRestoring(void) const { return (mState == kStateRestored) || (mState == kStateChildUpdateRequest); }
/**
* Check if the neighbor/child is in valid state or if it is being restored.
* When in these states messages can be sent to and/or received from the neighbor/child.
@@ -90,7 +98,7 @@ public:
* @returns TRUE if the neighbor is in valid, restored, or being restored states, FALSE otherwise.
*
*/
bool IsStateValidOrRestoring(void) const { return (mState == kStateValid) || (mState == kStateRestored); }
bool IsStateValidOrRestoring(void) const { return (mState == kStateValid) || IsStateRestoring(); }
/**
* This method gets the device mode flags.