1) Make the rebooted child able to sync the link with the parent which has also experienced reset (#1579)

2) Network Data TLV is not always included
This commit is contained in:
rongli
2017-04-11 22:06:31 -07:00
committed by Jonathan Hui
parent 775eaadd60
commit e79612ad9b
2 changed files with 12 additions and 11 deletions
+8 -8
View File
@@ -2389,10 +2389,6 @@ ThreadError Mle::HandleLeaderData(const Message &aMessage, const Ip6::MessageInf
VerifyOrExit(diff > 0);
}
// Network Data
SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kNetworkData, sizeof(networkData), networkData));
VerifyOrExit(networkData.IsValid(), error = kThreadError_Parse);
// Active Timestamp
if (Tlv::GetTlv(aMessage, Tlv::kActiveTimestamp, sizeof(activeTimestamp), activeTimestamp) == kThreadError_None)
{
@@ -2435,10 +2431,14 @@ ThreadError Mle::HandleLeaderData(const Message &aMessage, const Ip6::MessageInf
pendingTimestamp.SetLength(0);
}
// Network Data
mNetif.GetNetworkDataLeader().SetNetworkData(leaderData.GetDataVersion(), leaderData.GetStableDataVersion(),
(mDeviceMode & ModeTlv::kModeFullNetworkData) == 0,
networkData.GetNetworkData(), networkData.GetLength());
if (Tlv::GetTlv(aMessage, Tlv::kNetworkData, sizeof(networkData), networkData) == kThreadError_None)
{
VerifyOrExit(networkData.IsValid(), error = kThreadError_Parse);
mNetif.GetNetworkDataLeader().SetNetworkData(leaderData.GetDataVersion(), leaderData.GetStableDataVersion(),
(mDeviceMode & ModeTlv::kModeFullNetworkData) == 0,
networkData.GetNetworkData(), networkData.GetLength());
}
// Active Dataset
if (activeTimestamp.GetLength() > 0)
+4 -3
View File
@@ -2157,10 +2157,11 @@ ThreadError MleRouter::HandleChildUpdateRequest(const Message &aMessage, const I
tlvs[tlvslength++] = Tlv::kSourceAddress;
if ((child == NULL) || (child->GetState() != Neighbor::kStateValid))
// Not proceed if the Child Update Request is from the peer which is not the device's child or
// which was the device's child but becomes invalid.
if (child == NULL || child->GetState() == Neighbor::kStateInvalid)
{
// Send Child Update Response with status TLV(error) for invalid non-sleepy child
// No Child Update Response for invalid sleepy child
// For invalid non-sleepy child, Send Child Update Response with status TLV (error)
if (mode.GetMode() & ModeTlv::kModeRxOnWhenIdle)
{
tlvs[tlvslength++] = Tlv::kStatus;