[mle] update how timer is restarted in HandleAttachTimer

This commit updates `Mle::HandleAttachTimer()` so that the timer
`mAttachTimer` is restarted at the end of handling all state
transitions.
This commit is contained in:
Abtin Keshavarzian
2018-04-24 10:40:00 -07:00
parent 864f51c024
commit a86d5ac8c9
2 changed files with 21 additions and 13 deletions
+16 -8
View File
@@ -1438,6 +1438,8 @@ void Mle::HandleAttachTimer(Timer &aTimer)
void Mle::HandleAttachTimer(void)
{
uint32_t delay = 0;
switch (mAttachState)
{
case kAttachStateIdle:
@@ -1456,12 +1458,12 @@ void Mle::HandleAttachTimer(void)
if (mParentRequestMode == kAttachSame1 || mParentRequestMode == kAttachSame2)
{
SendParentRequest(kParentRequestTypeRoutersAndReeds);
mAttachTimer.Start(kParentRequestReedTimeout);
delay = kParentRequestReedTimeout;
}
else
{
SendParentRequest(kParentRequestTypeRouters);
mAttachTimer.Start(kParentRequestRouterTimeout);
delay = kParentRequestRouterTimeout;
}
break;
@@ -1472,7 +1474,7 @@ void Mle::HandleAttachTimer(void)
if (mParentCandidate.GetState() != Neighbor::kStateParentResponse)
{
SendParentRequest(kParentRequestTypeRoutersAndReeds);
mAttachTimer.Start(kParentRequestReedTimeout);
delay = kParentRequestReedTimeout;
break;
}
@@ -1484,7 +1486,7 @@ void Mle::HandleAttachTimer(void)
SendChildIdRequest() == OT_ERROR_NONE)
{
mAttachState = kAttachStateChildIdRequest;
mAttachTimer.Start(kParentRequestReedTimeout);
delay = kParentRequestReedTimeout;
break;
}
@@ -1493,14 +1495,20 @@ void Mle::HandleAttachTimer(void)
case kAttachStateChildIdRequest:
mAttachState = kAttachStateIdle;
ResetParentCandidate();
Reattach();
delay = Reattach();
break;
}
if (delay != 0)
{
mAttachTimer.Start(delay);
}
}
void Mle::Reattach(void)
uint32_t Mle::Reattach(void)
{
ThreadNetif &netif = GetNetif();
uint32_t delay = 0;
if (mReattachState == kReattachActive)
{
@@ -1509,7 +1517,7 @@ void Mle::Reattach(void)
netif.GetPendingDataset().ApplyConfiguration();
mReattachState = kReattachPending;
mAttachState = kAttachStateStart;
mAttachTimer.Start(kParentRequestRouterTimeout);
delay = kParentRequestRouterTimeout;
}
else
{
@@ -1568,7 +1576,7 @@ void Mle::Reattach(void)
}
exit:
return;
return delay;
}
void Mle::HandleDelayedResponseTimer(Timer &aTimer)
+5 -5
View File
@@ -1494,11 +1494,11 @@ private:
otError HandleDiscoveryResponse(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
otError HandleLeaderData(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
otError SendParentRequest(ParentRequestType aType);
otError SendChildIdRequest(void);
void SendOrphanAnnounce(void);
otError SendAnnounce(uint8_t aChannel, bool aOrphanAnnounce, const Ip6::Address &aDestination);
void Reattach(void);
otError SendParentRequest(ParentRequestType aType);
otError SendChildIdRequest(void);
void SendOrphanAnnounce(void);
otError SendAnnounce(uint8_t aChannel, bool aOrphanAnnounce, const Ip6::Address &aDestination);
uint32_t Reattach(void);
bool IsBetterParent(uint16_t aRloc16, uint8_t aLinkQuality, uint8_t aLinkMargin, ConnectivityTlv &aConnectivityTlv);
void ResetParentCandidate(void);