mirror of
https://github.com/espressif/openthread.git
synced 2026-07-30 15:47:46 +00:00
[mle] don't send unnecessary MLE Link Request (#2190)
This commit is contained in:
@@ -65,6 +65,7 @@ enum
|
||||
kMaxResponseDelay = 1000, ///< Maximum delay before responding to a multicast request
|
||||
kMaxChildIdRequestTimeout = 5000, ///< Maximum delay for receiving a Child ID Request
|
||||
kMaxChildUpdateResponseTimeout = 2000, ///< Maximum delay for receiving a Child Update Response
|
||||
kMaxLinkRequestTimeout = 2000, ///< Maximum delay for receiving a Link Accept
|
||||
kMinTimeout = (((kMaxChildKeepAliveAttempts + 1) * kUnicastRetransmissionDelay) / 1000), ///< Minimum timeout(s)
|
||||
};
|
||||
|
||||
|
||||
@@ -712,6 +712,7 @@ otError MleRouter::HandleLinkRequest(const Message &aMessage, const Ip6::Message
|
||||
// source is a router
|
||||
neighbor = GetRouter(GetRouterId(rloc16));
|
||||
VerifyOrExit(neighbor != NULL, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(neighbor->GetState() != Neighbor::kStateLinkRequest, error = OT_ERROR_ALREADY);
|
||||
|
||||
if (neighbor->GetState() != Neighbor::kStateValid)
|
||||
{
|
||||
@@ -1433,7 +1434,8 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((mDeviceMode & ModeTlv::kModeFFD) && (router->GetState() != Neighbor::kStateValid))
|
||||
else if ((mDeviceMode & ModeTlv::kModeFFD) && (router->GetState() != Neighbor::kStateValid) &&
|
||||
(router->GetState() != Neighbor::kStateLinkRequest))
|
||||
{
|
||||
router->SetExtAddress(macAddr);
|
||||
router->GetLinkInfo().Clear();
|
||||
@@ -1480,7 +1482,7 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
|
||||
}
|
||||
|
||||
// Send link request if no link to router
|
||||
if (router->GetState() != Neighbor::kStateValid)
|
||||
if ((router->GetState() != Neighbor::kStateValid) && (router->GetState() != Neighbor::kStateLinkRequest))
|
||||
{
|
||||
router->SetExtAddress(macAddr);
|
||||
router->GetLinkInfo().Clear();
|
||||
@@ -1865,6 +1867,13 @@ void MleRouter::HandleStateUpdateTimer(void)
|
||||
RemoveNeighbor(mRouters[i]);
|
||||
}
|
||||
}
|
||||
else if (mRouters[i].GetState() == Neighbor::kStateLinkRequest)
|
||||
{
|
||||
if ((TimerMilli::GetNow() - mRouters[i].GetLastHeard()) >= kMaxLinkRequestTimeout)
|
||||
{
|
||||
RemoveNeighbor(mRouters[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (mRole == OT_DEVICE_ROLE_LEADER)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user