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
This commit is contained in:
rongli
2016-08-17 09:19:54 -07:00
committed by Jonathan Hui
parent 4971533547
commit d1f8d59e3f
2 changed files with 13 additions and 9 deletions
+5 -6
View File
@@ -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
+8 -3
View File
@@ -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;
}