mirror of
https://github.com/espressif/openthread.git
synced 2026-10-31 03:26:37 +00:00
[mle] move previous partition state into FTD code (#2697)
Previous partition state is only used by FTDs.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user