filter out outdated MLE advertisement from old partition (#1155)

This commit is contained in:
rongli
2017-01-15 19:26:43 -08:00
committed by Jonathan Hui
parent 6d011d04ea
commit c0d4d5aa06
5 changed files with 22 additions and 0 deletions
+2
View File
@@ -461,6 +461,8 @@ ThreadError Mle::BecomeChild(otMleAttachFilter aFilter)
if (aFilter == kMleAttachAnyPartition)
{
mParent.mState = Neighbor::kStateInvalid;
mLastPartitionId = mMleRouter.GetPreviousPartitionId();
mLastPartitionRouterIdSequence = mMleRouter.GetRouterIdSequence();
}
mParentRequestTimer.Start(kParentRequestRouterTimeout);
+2
View File
@@ -1217,6 +1217,8 @@ protected:
uint8_t mRouterSelectionJitter; ///< The variable to save the assigned jitter value.
uint8_t mRouterSelectionJitterTimeout; ///< The Timeout prior to request/release Router ID.
uint8_t mLastPartitionRouterIdSequence;
uint32_t mLastPartitionId;
private:
enum
{
+11
View File
@@ -1285,6 +1285,12 @@ ThreadError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::M
leaderData.GetWeighting(), partitionId,
mLeaderData.GetWeighting(), mLeaderData.GetPartitionId());
if (partitionId == mLastPartitionId && (mDeviceMode & ModeTlv::kModeFFD))
{
VerifyOrExit((static_cast<int8_t>(route.GetRouterIdSequence() - mLastPartitionRouterIdSequence) > 0),
error = kThreadError_Drop);
}
if (GetDeviceState() == kDeviceStateChild &&
(memcmp(&mParent.mMacAddr, &macAddr, sizeof(mParent.mMacAddr)) == 0 || !(mDeviceMode & ModeTlv::kModeFFD)))
{
@@ -3268,6 +3274,11 @@ void MleRouter::SetPreviousPartitionId(uint32_t aPartitionId)
mPreviousPartitionId = aPartitionId;
}
uint32_t MleRouter::GetPreviousPartitionId(void) const
{
return mPreviousPartitionId;
}
void MleRouter::SetRouterId(uint8_t aRouterId)
{
mRouterId = aRouterId;
+6
View File
@@ -298,6 +298,12 @@ public:
*/
ThreadError SetPreferredRouterId(uint8_t aRouterId);
/**
* This method gets the Partition Id which the device joined successfully once.
*
*/
uint32_t GetPreviousPartitionId(void) const;
/**
* This method sets the Partition Id which the device joins successfully.
*
+1
View File
@@ -69,6 +69,7 @@ public:
void SetLeaderPartitionId(uint32_t) { }
ThreadError SetPreferredRouterId(uint8_t) { return kThreadError_NotImplemented; }
uint32_t GetPreviousPartitionId(void) const { return 0; }
void SetPreviousPartitionId(uint32_t) { }
void SetRouterId(uint8_t) { }