Handle Network Data updates via netif handler to coalesce message transmissions. (#444)

This commit is contained in:
Jonathan Hui
2016-08-22 21:19:05 -07:00
committed by GitHub
parent 20014c72bf
commit 70d83b694a
3 changed files with 29 additions and 33 deletions
+28 -23
View File
@@ -940,27 +940,44 @@ void Mle::HandleNetifStateChanged(uint32_t aFlags, void *aContext)
void Mle::HandleNetifStateChanged(uint32_t aFlags)
{
VerifyOrExit((aFlags & (OT_IP6_ADDRESS_ADDED | OT_IP6_ADDRESS_REMOVED)) != 0, ;);
bool sendChildUpdateRequest = false;
if (!mNetif.IsUnicastAddress(mMeshLocal64.GetAddress()))
if ((aFlags & (OT_IP6_ADDRESS_ADDED | OT_IP6_ADDRESS_REMOVED)) != 0)
{
// Mesh Local EID was removed, choose a new one and add it back
for (int i = 8; i < 16; i++)
if (!mNetif.IsUnicastAddress(mMeshLocal64.GetAddress()))
{
mMeshLocal64.GetAddress().mFields.m8[i] = static_cast<uint8_t>(otPlatRandomGet());
// Mesh Local EID was removed, choose a new one and add it back
for (int i = 8; i < 16; i++)
{
mMeshLocal64.GetAddress().mFields.m8[i] = static_cast<uint8_t>(otPlatRandomGet());
}
mNetif.AddUnicastAddress(mMeshLocal64);
mNetif.SetStateChangedFlags(OT_IP6_ML_ADDR_CHANGED);
}
mNetif.AddUnicastAddress(mMeshLocal64);
mNetif.SetStateChangedFlags(OT_IP6_ML_ADDR_CHANGED);
if (mDeviceState == kDeviceStateChild && (mDeviceMode & ModeTlv::kModeFFD) == 0)
{
sendChildUpdateRequest = true;
}
}
if (mDeviceState == kDeviceStateChild && (mDeviceMode & ModeTlv::kModeFFD) == 0)
if ((aFlags & OT_THREAD_NETDATA_UPDATED) != 0)
{
if (mDeviceMode & ModeTlv::kModeFFD)
{
mMleRouter.HandleNetworkDataUpdateRouter();
}
else
{
sendChildUpdateRequest = true;
}
}
if (sendChildUpdateRequest)
{
SendChildUpdateRequest();
}
exit:
return;
}
void Mle::HandleParentRequestTimer(void *aContext)
@@ -2385,17 +2402,5 @@ exit:
return error;
}
void Mle::HandleNetworkDataUpdate(void)
{
if (mDeviceMode & ModeTlv::kModeFFD)
{
mMleRouter.HandleNetworkDataUpdateRouter();
}
else
{
SendChildUpdateRequest();
}
}
} // namespace Mle
} // namespace Thread
-6
View File
@@ -587,12 +587,6 @@ public:
*/
const Ip6::Address *GetMeshLocal64(void) const;
/**
* This method notifies MLE that the Network Data has changed.
*
*/
void HandleNetworkDataUpdate(void);
/**
* This method returns the Router ID of the Leader.
*
+1 -4
View File
@@ -435,7 +435,6 @@ void Leader::SetNetworkData(uint8_t aVersion, uint8_t aStableVersion, bool aStab
otDumpDebgNetData("set network data", mTlvs, mLength);
mMle.HandleNetworkDataUpdate();
mNetif.SetStateChangedFlags(OT_THREAD_NETDATA_UPDATED);
}
@@ -455,7 +454,6 @@ void Leader::RemoveBorderRouter(uint16_t aRloc16)
mStableVersion++;
}
mMle.HandleNetworkDataUpdate();
mNetif.SetStateChangedFlags(OT_THREAD_NETDATA_UPDATED);
exit:
@@ -694,7 +692,6 @@ ThreadError Leader::RegisterNetworkData(uint16_t aRloc16, uint8_t *aTlvs, uint8_
}
}
mMle.HandleNetworkDataUpdate();
mNetif.SetStateChangedFlags(OT_THREAD_NETDATA_UPDATED);
exit:
@@ -881,7 +878,7 @@ ThreadError Leader::FreeContext(uint8_t aContextId)
mContextUsed &= ~(1 << aContextId);
mVersion++;
mStableVersion++;
mMle.HandleNetworkDataUpdate();
mNetif.SetStateChangedFlags(OT_THREAD_NETDATA_UPDATED);
return kThreadError_None;
}