[mle] move previous partition state into FTD code (#2697)

Previous partition state is only used by FTDs.
This commit is contained in:
Jonathan Hui
2018-05-06 15:22:06 -07:00
committed by GitHub
parent 3a6cdd635d
commit 664d9832e5
4 changed files with 25 additions and 23 deletions
-6
View File
@@ -71,9 +71,6 @@ Mle::Mle(Instance &aInstance)
, mAttachTimer(aInstance, &Mle::HandleAttachTimer, this)
, mDelayedResponseTimer(aInstance, &Mle::HandleDelayedResponseTimer, this)
, mChildUpdateRequestTimer(aInstance, &Mle::HandleChildUpdateRequestTimer, this)
, mLastPartitionId(0)
, mLastPartitionRouterIdSequence(0)
, mLastPartitionIdTimeout(0)
, mParentLeaderCost(0)
, mParentRequestMode(kAttachAny)
, mParentPriority(0)
@@ -849,9 +846,6 @@ void Mle::SetLeaderData(uint32_t aPartitionId, uint8_t aWeighting, uint8_t aLead
if (mLeaderData.GetPartitionId() != aPartitionId)
{
GetNetif().GetMle().HandlePartitionChange();
mLastPartitionId = mLeaderData.GetPartitionId();
mLastPartitionRouterIdSequence = GetNetif().GetMle().GetRouterIdSequence();
mLastPartitionIdTimeout = GetNetif().GetMle().GetNetworkIdTimeout();
GetNotifier().SetFlags(OT_CHANGED_THREAD_PARTITION_ID);
}
+3 -6
View File
@@ -1433,12 +1433,9 @@ protected:
};
ReattachState mReattachState;
TimerMilli mAttachTimer; ///< The timer for driving the attach process.
TimerMilli mDelayedResponseTimer; ///< The timer to delay MLE responses.
TimerMilli mChildUpdateRequestTimer; ///< The timer for sending MLE Child Update Request messages.
uint32_t mLastPartitionId; ///< The partition ID of the previous Thread partition
uint8_t mLastPartitionRouterIdSequence; ///< The router ID sequence from the previous Thread partition
uint8_t mLastPartitionIdTimeout; ///< The time remaining to avoid the previous Thread partition
TimerMilli mAttachTimer; ///< The timer for driving the attach process.
TimerMilli mDelayedResponseTimer; ///< The timer to delay MLE responses.
TimerMilli mChildUpdateRequestTimer; ///< The timer for sending MLE Child Update Request messages.
uint8_t mParentLeaderCost;
+15 -8
View File
@@ -75,7 +75,10 @@ MleRouter::MleRouter(Instance &aInstance)
, mFixedLeaderPartitionId(0)
, mRouterRoleEnabled(true)
, mAddressSolicitPending(false)
, mPreviousPartitionIdRouter(0)
, mPreviousPartitionId(0)
, mPreviousPartitionRouterIdSequence(0)
, mPreviousPartitionIdTimeout(0)
, mRouterSelectionJitter(kRouterSelectionJitter)
, mRouterSelectionJitterTimeout(0)
, mParentPriority(kParentPriorityUnspecified)
@@ -91,6 +94,10 @@ void MleRouter::HandlePartitionChange(void)
{
ThreadNetif &netif = GetNetif();
mPreviousPartitionId = mLeaderData.GetPartitionId();
mPreviousPartitionRouterIdSequence = netif.GetMle().GetRouterIdSequence();
mPreviousPartitionIdTimeout = netif.GetMle().GetNetworkIdTimeout();
netif.GetAddressResolver().Clear();
netif.GetCoap().AbortTransaction(&MleRouter::HandleAddressSolicitResponse, this);
}
@@ -394,7 +401,7 @@ otError MleRouter::HandleChildStart(AttachMode aMode)
case kAttachAny:
case kAttachBetter:
if (HasChildren() && mPreviousPartitionId != mLeaderData.GetPartitionId())
if (HasChildren() && mPreviousPartitionIdRouter != mLeaderData.GetPartitionId())
{
BecomeRouter(ThreadStatusTlv::kParentPartitionChange);
}
@@ -427,7 +434,7 @@ otError MleRouter::SetStateRouter(uint16_t aRloc16)
netif.SubscribeAllRoutersMulticast();
mRouters[mRouterId].SetNextHop(mRouterId);
mPreviousPartitionId = mLeaderData.GetPartitionId();
mPreviousPartitionIdRouter = mLeaderData.GetPartitionId();
netif.GetNetworkDataLeader().Stop();
netif.GetIp6().SetForwardingEnabled(true);
netif.GetIp6().GetMpl().SetTimerExpirations(kMplRouterDataMessageTimerExpirations);
@@ -470,7 +477,7 @@ otError MleRouter::SetStateLeader(uint16_t aRloc16)
netif.SubscribeAllRoutersMulticast();
mRouters[mRouterId].SetNextHop(mRouterId);
mPreviousPartitionId = mLeaderData.GetPartitionId();
mPreviousPartitionIdRouter = mLeaderData.GetPartitionId();
mStateUpdateTimer.Start(kStateUpdatePeriod);
mRouters[mRouterId].SetLastHeard(TimerMilli::GetNow());
@@ -1329,10 +1336,10 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
VerifyOrExit(linkMargin >= OPENTHREAD_CONFIG_MLE_PARTITION_MERGE_MARGIN_MIN, error = OT_ERROR_LINK_MARGIN_LOW);
if (route.IsValid() && (mDeviceMode & ModeTlv::kModeFFD) && (mLastPartitionIdTimeout > 0) &&
(partitionId == mLastPartitionId))
if (route.IsValid() && (mDeviceMode & ModeTlv::kModeFFD) && (mPreviousPartitionIdTimeout > 0) &&
(partitionId == mPreviousPartitionId))
{
VerifyOrExit((static_cast<int8_t>(route.GetRouterIdSequence() - mLastPartitionRouterIdSequence) > 0),
VerifyOrExit((static_cast<int8_t>(route.GetRouterIdSequence() - mPreviousPartitionRouterIdSequence) > 0),
error = OT_ERROR_DROP);
}
@@ -1753,9 +1760,9 @@ void MleRouter::HandleStateUpdateTimer(void)
mChallengeTimeout--;
}
if (mLastPartitionIdTimeout > 0)
if (mPreviousPartitionIdTimeout > 0)
{
mLastPartitionIdTimeout--;
mPreviousPartitionIdTimeout--;
}
if (mRouterSelectionJitterTimeout > 0)
+7 -3
View File
@@ -873,9 +873,13 @@ private:
bool mRouterRoleEnabled : 1;
bool mAddressSolicitPending : 1;
uint8_t mRouterId;
uint8_t mPreviousRouterId;
uint32_t mPreviousPartitionId;
uint8_t mRouterId;
uint8_t mPreviousRouterId;
uint32_t mPreviousPartitionIdRouter; ///< The partition ID when last operating as a router
uint32_t mPreviousPartitionId; ///< The partition ID when last attached
uint8_t mPreviousPartitionRouterIdSequence; ///< The router ID sequence when last attached
uint8_t mPreviousPartitionIdTimeout; ///< The partition ID timeout when last attached
uint8_t mRouterSelectionJitter; ///< The variable to save the assigned jitter value.
uint8_t mRouterSelectionJitterTimeout; ///< The Timeout prior to request/release Router ID.