mirror of
https://github.com/espressif/openthread.git
synced 2026-10-12 18:57:37 +00:00
[neighbor] add methods to check neighbor state (#4280)
This commit is contained in:
@@ -322,7 +322,7 @@ otError otThreadGetParentInfo(otInstance *aInstance, otRouterInfo *aParentInfo)
|
|||||||
aParentInfo->mLinkQualityOut = parent->GetLinkQualityOut();
|
aParentInfo->mLinkQualityOut = parent->GetLinkQualityOut();
|
||||||
aParentInfo->mAge = static_cast<uint8_t>(Time::MsecToSec(TimerMilli::GetNow() - parent->GetLastHeard()));
|
aParentInfo->mAge = static_cast<uint8_t>(Time::MsecToSec(TimerMilli::GetNow() - parent->GetLastHeard()));
|
||||||
aParentInfo->mAllocated = true;
|
aParentInfo->mAllocated = true;
|
||||||
aParentInfo->mLinkEstablished = parent->GetState() == Neighbor::kStateValid;
|
aParentInfo->mLinkEstablished = parent->IsStateValid();
|
||||||
|
|
||||||
#if !OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
#if !OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||||
exit:
|
exit:
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ void DataPollSender::HandlePollSent(Mac::TxFrame &aFrame, otError aError)
|
|||||||
Get<MeshForwarder>().UpdateNeighborOnSentFrame(aFrame, aError, macDest);
|
Get<MeshForwarder>().UpdateNeighborOnSentFrame(aFrame, aError, macDest);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Get<Mle::MleRouter>().GetParentCandidate()->GetState() == Neighbor::kStateInvalid)
|
if (Get<Mle::MleRouter>().GetParentCandidate()->IsStateInvalid())
|
||||||
{
|
{
|
||||||
StopPolling();
|
StopPolling();
|
||||||
Get<Mle::MleRouter>().BecomeDetached();
|
Get<Mle::MleRouter>().BecomeDetached();
|
||||||
|
|||||||
@@ -1458,7 +1458,7 @@ otError Mac::ProcessReceiveSecurity(RxFrame &aFrame, const Address &aSrcAddr, Ne
|
|||||||
// the tag/MIC. Such a frame is later filtered in `RxDoneTask` which only allows MAC
|
// the tag/MIC. Such a frame is later filtered in `RxDoneTask` which only allows MAC
|
||||||
// Data Request frames from a child being restored.
|
// Data Request frames from a child being restored.
|
||||||
|
|
||||||
if (aNeighbor->GetState() == Neighbor::kStateValid)
|
if (aNeighbor->IsStateValid())
|
||||||
{
|
{
|
||||||
if (keySequence < aNeighbor->GetKeySequence())
|
if (keySequence < aNeighbor->GetKeySequence())
|
||||||
{
|
{
|
||||||
@@ -1514,7 +1514,7 @@ otError Mac::ProcessReceiveSecurity(RxFrame &aFrame, const Address &aSrcAddr, Ne
|
|||||||
VerifyOrExit(memcmp(tag, aFrame.GetFooter(), tagLength) == 0, error = OT_ERROR_SECURITY);
|
VerifyOrExit(memcmp(tag, aFrame.GetFooter(), tagLength) == 0, error = OT_ERROR_SECURITY);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((keyIdMode == Frame::kKeyIdMode1) && (aNeighbor->GetState() == Neighbor::kStateValid))
|
if ((keyIdMode == Frame::kKeyIdMode1) && (aNeighbor->IsStateValid()))
|
||||||
{
|
{
|
||||||
if (aNeighbor->GetKeySequence() != keySequence)
|
if (aNeighbor->GetKeySequence() != keySequence)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ Child *ChildTable::GetNewChild(void)
|
|||||||
|
|
||||||
for (uint16_t num = mMaxChildrenAllowed; num != 0; num--, child++)
|
for (uint16_t num = mMaxChildrenAllowed; num != 0; num--, child++)
|
||||||
{
|
{
|
||||||
if (child->GetState() == Child::kStateInvalid)
|
if (child->IsStateInvalid())
|
||||||
{
|
{
|
||||||
child->Clear();
|
child->Clear();
|
||||||
ExitNow();
|
ExitNow();
|
||||||
@@ -253,7 +253,7 @@ bool ChildTable::MatchesFilter(const Child &aChild, StateFilter aFilter)
|
|||||||
switch (aFilter)
|
switch (aFilter)
|
||||||
{
|
{
|
||||||
case kInStateValid:
|
case kInStateValid:
|
||||||
rval = (aChild.GetState() == Child::kStateValid);
|
rval = aChild.IsStateValid();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kInStateValidOrRestoring:
|
case kInStateValidOrRestoring:
|
||||||
@@ -261,7 +261,7 @@ bool ChildTable::MatchesFilter(const Child &aChild, StateFilter aFilter)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kInStateChildIdRequest:
|
case kInStateChildIdRequest:
|
||||||
rval = (aChild.GetState() == Child::kStateChildIdRequest);
|
rval = aChild.IsStateChildIdRequest();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kInStateValidOrAttaching:
|
case kInStateValidOrAttaching:
|
||||||
@@ -269,7 +269,7 @@ bool ChildTable::MatchesFilter(const Child &aChild, StateFilter aFilter)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kInStateAnyExceptInvalid:
|
case kInStateAnyExceptInvalid:
|
||||||
rval = (aChild.GetState() != Child::kStateInvalid);
|
rval = !aChild.IsStateInvalid();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kInStateAnyExceptValidOrRestoring:
|
case kInStateAnyExceptValidOrRestoring:
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ exit:
|
|||||||
|
|
||||||
void IndirectSender::HandleChildModeChange(Child &aChild, Mle::DeviceMode aOldMode)
|
void IndirectSender::HandleChildModeChange(Child &aChild, Mle::DeviceMode aOldMode)
|
||||||
{
|
{
|
||||||
if (!aChild.IsRxOnWhenIdle() && (aChild.GetState() == Neighbor::kStateValid))
|
if (!aChild.IsRxOnWhenIdle() && (aChild.IsStateValid()))
|
||||||
{
|
{
|
||||||
SetChildUseShortAddress(aChild, true);
|
SetChildUseShortAddress(aChild, true);
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-12
@@ -1677,7 +1677,7 @@ void Mle::HandleAttachTimer(void)
|
|||||||
// parent.
|
// parent.
|
||||||
|
|
||||||
if ((linkQuality == 3 || mAttachState != kAttachStateParentRequestRouter) &&
|
if ((linkQuality == 3 || mAttachState != kAttachStateParentRequestRouter) &&
|
||||||
mParentCandidate.GetState() == Neighbor::kStateParentResponse &&
|
mParentCandidate.IsStateParentResponse() &&
|
||||||
(mRole != OT_DEVICE_ROLE_CHILD || mReceivedResponseFromParent || mParentRequestMode == kAttachBetter) &&
|
(mRole != OT_DEVICE_ROLE_CHILD || mReceivedResponseFromParent || mParentRequestMode == kAttachBetter) &&
|
||||||
SendChildIdRequest() == OT_ERROR_NONE)
|
SendChildIdRequest() == OT_ERROR_NONE)
|
||||||
{
|
{
|
||||||
@@ -2723,7 +2723,7 @@ void Mle::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageIn
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (neighbor != NULL && neighbor->GetState() == Neighbor::kStateValid)
|
if (neighbor != NULL && neighbor->IsStateValid())
|
||||||
{
|
{
|
||||||
if (keySequence == neighbor->GetKeySequence())
|
if (keySequence == neighbor->GetKeySequence())
|
||||||
{
|
{
|
||||||
@@ -2918,7 +2918,7 @@ otError Mle::HandleAdvertisement(const Message &aMessage, const Ip6::MessageInfo
|
|||||||
|
|
||||||
case OT_DEVICE_ROLE_ROUTER:
|
case OT_DEVICE_ROLE_ROUTER:
|
||||||
case OT_DEVICE_ROLE_LEADER:
|
case OT_DEVICE_ROLE_LEADER:
|
||||||
if ((neighbor = Get<MleRouter>().GetNeighbor(macAddr)) != NULL && neighbor->GetState() == Neighbor::kStateValid)
|
if ((neighbor = Get<MleRouter>().GetNeighbor(macAddr)) != NULL && neighbor->IsStateValid())
|
||||||
{
|
{
|
||||||
isNeighbor = true;
|
isNeighbor = true;
|
||||||
}
|
}
|
||||||
@@ -3288,8 +3288,7 @@ otError Mle::HandleParentResponse(const Message &aMessage, const Ip6::MessageInf
|
|||||||
// Continue to process the "ParentResponse" if it is from current
|
// Continue to process the "ParentResponse" if it is from current
|
||||||
// parent candidate to update the challenge and frame counters.
|
// parent candidate to update the challenge and frame counters.
|
||||||
|
|
||||||
if ((mParentCandidate.GetState() == Neighbor::kStateParentResponse) &&
|
if (mParentCandidate.IsStateParentResponse() && (mParentCandidate.GetExtAddress() != extAddress))
|
||||||
(mParentCandidate.GetExtAddress() != extAddress))
|
|
||||||
{
|
{
|
||||||
// if already have a candidate parent, only seek a better parent
|
// if already have a candidate parent, only seek a better parent
|
||||||
|
|
||||||
@@ -3875,11 +3874,11 @@ Neighbor *Mle::GetNeighbor(uint16_t aAddress)
|
|||||||
{
|
{
|
||||||
Neighbor *rval = NULL;
|
Neighbor *rval = NULL;
|
||||||
|
|
||||||
if ((mParent.IsStateValidOrRestoring()) && (mParent.GetRloc16() == aAddress))
|
if (mParent.IsStateValidOrRestoring() && (mParent.GetRloc16() == aAddress))
|
||||||
{
|
{
|
||||||
rval = &mParent;
|
rval = &mParent;
|
||||||
}
|
}
|
||||||
else if ((mParentCandidate.GetState() == Neighbor::kStateValid) && (mParentCandidate.GetRloc16() == aAddress))
|
else if (mParentCandidate.IsStateValid() && (mParentCandidate.GetRloc16() == aAddress))
|
||||||
{
|
{
|
||||||
rval = &mParentCandidate;
|
rval = &mParentCandidate;
|
||||||
}
|
}
|
||||||
@@ -3891,11 +3890,11 @@ Neighbor *Mle::GetNeighbor(const Mac::ExtAddress &aAddress)
|
|||||||
{
|
{
|
||||||
Neighbor *rval = NULL;
|
Neighbor *rval = NULL;
|
||||||
|
|
||||||
if ((mParent.IsStateValidOrRestoring()) && (mParent.GetExtAddress() == aAddress))
|
if (mParent.IsStateValidOrRestoring() && (mParent.GetExtAddress() == aAddress))
|
||||||
{
|
{
|
||||||
rval = &mParent;
|
rval = &mParent;
|
||||||
}
|
}
|
||||||
else if ((mParentCandidate.GetState() == Neighbor::kStateValid) && (mParentCandidate.GetExtAddress() == aAddress))
|
else if (mParentCandidate.IsStateValid() && (mParentCandidate.GetExtAddress() == aAddress))
|
||||||
{
|
{
|
||||||
rval = &mParentCandidate;
|
rval = &mParentCandidate;
|
||||||
}
|
}
|
||||||
@@ -3927,8 +3926,7 @@ Neighbor *Mle::GetNeighbor(const Mac::Address &aAddress)
|
|||||||
uint16_t Mle::GetNextHop(uint16_t aDestination) const
|
uint16_t Mle::GetNextHop(uint16_t aDestination) const
|
||||||
{
|
{
|
||||||
OT_UNUSED_VARIABLE(aDestination);
|
OT_UNUSED_VARIABLE(aDestination);
|
||||||
return (mParent.GetState() == Neighbor::kStateValid) ? mParent.GetRloc16()
|
return (mParent.IsStateValid()) ? mParent.GetRloc16() : static_cast<uint16_t>(Mac::kShortAddrInvalid);
|
||||||
: static_cast<uint16_t>(Mac::kShortAddrInvalid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mle::IsRoutingLocator(const Ip6::Address &aAddress) const
|
bool Mle::IsRoutingLocator(const Ip6::Address &aAddress) const
|
||||||
@@ -3958,7 +3956,7 @@ Router *Mle::GetParentCandidate(void)
|
|||||||
{
|
{
|
||||||
Router *rval;
|
Router *rval;
|
||||||
|
|
||||||
if (mParentCandidate.GetState() == Neighbor::kStateValid)
|
if (mParentCandidate.IsStateValid())
|
||||||
{
|
{
|
||||||
rval = &mParentCandidate;
|
rval = &mParentCandidate;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -495,7 +495,7 @@ otError MleRouter::SendLinkRequest(Neighbor *aNeighbor)
|
|||||||
|
|
||||||
case OT_DEVICE_ROLE_ROUTER:
|
case OT_DEVICE_ROLE_ROUTER:
|
||||||
case OT_DEVICE_ROLE_LEADER:
|
case OT_DEVICE_ROLE_LEADER:
|
||||||
if (aNeighbor == NULL || aNeighbor->GetState() != Neighbor::kStateValid)
|
if (aNeighbor == NULL || !aNeighbor->IsStateValid())
|
||||||
{
|
{
|
||||||
SuccessOrExit(error = AppendTlvRequest(*message, routerTlvs, sizeof(routerTlvs)));
|
SuccessOrExit(error = AppendTlvRequest(*message, routerTlvs, sizeof(routerTlvs)));
|
||||||
}
|
}
|
||||||
@@ -526,7 +526,7 @@ otError MleRouter::SendLinkRequest(Neighbor *aNeighbor)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (aNeighbor->GetState() != Neighbor::kStateValid)
|
if (!aNeighbor->IsStateValid())
|
||||||
{
|
{
|
||||||
aNeighbor->GenerateChallenge();
|
aNeighbor->GenerateChallenge();
|
||||||
SuccessOrExit(error = AppendChallenge(*message, aNeighbor->GetChallenge(), aNeighbor->GetChallengeSize()));
|
SuccessOrExit(error = AppendChallenge(*message, aNeighbor->GetChallenge(), aNeighbor->GetChallengeSize()));
|
||||||
@@ -614,9 +614,9 @@ otError MleRouter::HandleLinkRequest(const Message &aMessage, const Ip6::Message
|
|||||||
// source is a router
|
// source is a router
|
||||||
neighbor = mRouterTable.GetRouter(GetRouterId(rloc16));
|
neighbor = mRouterTable.GetRouter(GetRouterId(rloc16));
|
||||||
VerifyOrExit(neighbor != NULL, error = OT_ERROR_PARSE);
|
VerifyOrExit(neighbor != NULL, error = OT_ERROR_PARSE);
|
||||||
VerifyOrExit(neighbor->GetState() != Neighbor::kStateLinkRequest, error = OT_ERROR_ALREADY);
|
VerifyOrExit(!neighbor->IsStateLinkRequest(), error = OT_ERROR_ALREADY);
|
||||||
|
|
||||||
if (neighbor->GetState() != Neighbor::kStateValid)
|
if (!neighbor->IsStateValid())
|
||||||
{
|
{
|
||||||
const otThreadLinkInfo *linkInfo = static_cast<const otThreadLinkInfo *>(aMessageInfo.GetLinkInfo());
|
const otThreadLinkInfo *linkInfo = static_cast<const otThreadLinkInfo *>(aMessageInfo.GetLinkInfo());
|
||||||
|
|
||||||
@@ -641,7 +641,7 @@ otError MleRouter::HandleLinkRequest(const Message &aMessage, const Ip6::Message
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// lack of source address indicates router coming out of reset
|
// lack of source address indicates router coming out of reset
|
||||||
VerifyOrExit((neighbor = GetNeighbor(macAddr)) != NULL && neighbor->GetState() == Neighbor::kStateValid &&
|
VerifyOrExit((neighbor = GetNeighbor(macAddr)) != NULL && neighbor->IsStateValid() &&
|
||||||
IsActiveRouter(neighbor->GetRloc16()),
|
IsActiveRouter(neighbor->GetRloc16()),
|
||||||
error = OT_ERROR_DROP);
|
error = OT_ERROR_DROP);
|
||||||
}
|
}
|
||||||
@@ -688,9 +688,8 @@ otError MleRouter::SendLinkAccept(const Ip6::MessageInfo &aMessageInfo,
|
|||||||
Header::Command command;
|
Header::Command command;
|
||||||
uint8_t linkMargin;
|
uint8_t linkMargin;
|
||||||
|
|
||||||
command = (aNeighbor == NULL || aNeighbor->GetState() == Neighbor::kStateValid)
|
command = (aNeighbor == NULL || aNeighbor->IsStateValid()) ? Header::kCommandLinkAccept
|
||||||
? Header::kCommandLinkAccept
|
: Header::kCommandLinkAcceptAndRequest;
|
||||||
: Header::kCommandLinkAcceptAndRequest;
|
|
||||||
|
|
||||||
VerifyOrExit((message = NewMleMessage()) != NULL, error = OT_ERROR_NO_BUFS);
|
VerifyOrExit((message = NewMleMessage()) != NULL, error = OT_ERROR_NO_BUFS);
|
||||||
SuccessOrExit(error = AppendHeader(*message, command));
|
SuccessOrExit(error = AppendHeader(*message, command));
|
||||||
@@ -731,7 +730,7 @@ otError MleRouter::SendLinkAccept(const Ip6::MessageInfo &aMessageInfo,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aNeighbor != NULL && aNeighbor->GetState() != Neighbor::kStateValid)
|
if (aNeighbor != NULL && !aNeighbor->IsStateValid())
|
||||||
{
|
{
|
||||||
aNeighbor->GenerateChallenge();
|
aNeighbor->GenerateChallenge();
|
||||||
|
|
||||||
@@ -1264,7 +1263,7 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
|
|||||||
{
|
{
|
||||||
router = mRouterTable.GetRouter(routerId);
|
router = mRouterTable.GetRouter(routerId);
|
||||||
|
|
||||||
if (router != NULL && router->GetState() == Neighbor::kStateValid)
|
if (router != NULL && router->IsStateValid())
|
||||||
{
|
{
|
||||||
processRouteTlv = true;
|
processRouteTlv = true;
|
||||||
}
|
}
|
||||||
@@ -1294,8 +1293,8 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
|
|||||||
router = (macAddr == mParent.GetExtAddress()) ? &mParent : mRouterTable.GetRouter(routerId);
|
router = (macAddr == mParent.GetExtAddress()) ? &mParent : mRouterTable.GetRouter(routerId);
|
||||||
VerifyOrExit(router != NULL);
|
VerifyOrExit(router != NULL);
|
||||||
|
|
||||||
if ((router->GetState() == Neighbor::kStateValid) && IsFullThreadDevice() &&
|
if (router->IsStateValid() && IsFullThreadDevice() && (mRouterSelectionJitterTimeout == 0) &&
|
||||||
(mRouterSelectionJitterTimeout == 0) && (mRouterTable.GetActiveRouterCount() < mRouterUpgradeThreshold))
|
(mRouterTable.GetActiveRouterCount() < mRouterUpgradeThreshold))
|
||||||
{
|
{
|
||||||
mRouterSelectionJitterTimeout = 1 + Random::NonCrypto::GetUint8InRange(0, mRouterSelectionJitter);
|
mRouterSelectionJitterTimeout = 1 + Random::NonCrypto::GetUint8InRange(0, mRouterSelectionJitter);
|
||||||
ExitNow();
|
ExitNow();
|
||||||
@@ -1344,8 +1343,7 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (IsFullThreadDevice() && (router->GetState() != Neighbor::kStateValid) &&
|
else if (IsFullThreadDevice() && !router->IsStateValid() && !router->IsStateLinkRequest() &&
|
||||||
(router->GetState() != Neighbor::kStateLinkRequest) &&
|
|
||||||
(mRouterTable.GetActiveLinkCount() < OPENTHREAD_CONFIG_MLE_CHILD_ROUTER_LINKS))
|
(mRouterTable.GetActiveLinkCount() < OPENTHREAD_CONFIG_MLE_CHILD_ROUTER_LINKS))
|
||||||
{
|
{
|
||||||
router->SetExtAddress(macAddr);
|
router->SetExtAddress(macAddr);
|
||||||
@@ -1391,7 +1389,7 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
|
|||||||
VerifyOrExit(router != NULL);
|
VerifyOrExit(router != NULL);
|
||||||
|
|
||||||
// Send link request if no link to router
|
// Send link request if no link to router
|
||||||
if ((router->GetState() != Neighbor::kStateValid) && (router->GetState() != Neighbor::kStateLinkRequest) &&
|
if (!router->IsStateValid() && !router->IsStateLinkRequest() &&
|
||||||
(linkMargin >= OPENTHREAD_CONFIG_MLE_LINK_REQUEST_MARGIN_MIN))
|
(linkMargin >= OPENTHREAD_CONFIG_MLE_LINK_REQUEST_MARGIN_MIN))
|
||||||
{
|
{
|
||||||
router->SetExtAddress(macAddr);
|
router->SetExtAddress(macAddr);
|
||||||
@@ -1809,8 +1807,7 @@ void MleRouter::HandleStateUpdateTimer(void)
|
|||||||
otLogInfoMle("Child timeout expired");
|
otLogInfoMle("Child timeout expired");
|
||||||
RemoveNeighbor(child);
|
RemoveNeighbor(child);
|
||||||
}
|
}
|
||||||
else if ((mRole == OT_DEVICE_ROLE_ROUTER || mRole == OT_DEVICE_ROLE_LEADER) &&
|
else if ((mRole == OT_DEVICE_ROLE_ROUTER || mRole == OT_DEVICE_ROLE_LEADER) && child.IsStateRestored())
|
||||||
(child.GetState() == Neighbor::kStateRestored))
|
|
||||||
{
|
{
|
||||||
SendChildUpdateRequest(child);
|
SendChildUpdateRequest(child);
|
||||||
}
|
}
|
||||||
@@ -1830,7 +1827,7 @@ void MleRouter::HandleStateUpdateTimer(void)
|
|||||||
|
|
||||||
age = TimerMilli::GetNow() - router.GetLastHeard();
|
age = TimerMilli::GetNow() - router.GetLastHeard();
|
||||||
|
|
||||||
if (router.GetState() == Neighbor::kStateValid)
|
if (router.IsStateValid())
|
||||||
{
|
{
|
||||||
#if OPENTHREAD_CONFIG_MLE_SEND_LINK_REQUEST_ON_ADV_TIMEOUT == 0
|
#if OPENTHREAD_CONFIG_MLE_SEND_LINK_REQUEST_ON_ADV_TIMEOUT == 0
|
||||||
|
|
||||||
@@ -1859,7 +1856,7 @@ void MleRouter::HandleStateUpdateTimer(void)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (router.GetState() == Neighbor::kStateLinkRequest)
|
else if (router.IsStateLinkRequest())
|
||||||
{
|
{
|
||||||
if (age >= kMaxLinkRequestTimeout)
|
if (age >= kMaxLinkRequestTimeout)
|
||||||
{
|
{
|
||||||
@@ -2161,7 +2158,7 @@ otError MleRouter::HandleChildIdRequest(const Message & aMessage,
|
|||||||
RemoveNeighbor(*router);
|
RemoveNeighbor(*router);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (child->GetState() != Neighbor::kStateValid)
|
if (!child->IsStateValid())
|
||||||
{
|
{
|
||||||
child->SetState(Neighbor::kStateChildIdRequest);
|
child->SetState(Neighbor::kStateChildIdRequest);
|
||||||
}
|
}
|
||||||
@@ -2260,7 +2257,7 @@ otError MleRouter::HandleChildUpdateRequest(const Message & aMessage,
|
|||||||
|
|
||||||
// Not proceed if the Child Update Request is from the peer which is not the device's child or
|
// Not proceed if the Child Update Request is from the peer which is not the device's child or
|
||||||
// which was the device's child but becomes invalid.
|
// which was the device's child but becomes invalid.
|
||||||
if (child == NULL || child->GetState() == Neighbor::kStateInvalid)
|
if (child == NULL || child->IsStateInvalid())
|
||||||
{
|
{
|
||||||
// For invalid non-sleepy child, Send Child Update Response with status TLV (error)
|
// For invalid non-sleepy child, Send Child Update Response with status TLV (error)
|
||||||
if (mode.GetMode().IsRxOnWhenIdle())
|
if (mode.GetMode().IsRxOnWhenIdle())
|
||||||
@@ -2357,7 +2354,7 @@ otError MleRouter::HandleChildUpdateRequest(const Message & aMessage,
|
|||||||
SetChildStateToValid(*child);
|
SetChildStateToValid(*child);
|
||||||
child->SetKeySequence(aKeySequence);
|
child->SetKeySequence(aKeySequence);
|
||||||
}
|
}
|
||||||
else if (child->GetState() == Neighbor::kStateValid)
|
else if (child->IsStateValid())
|
||||||
{
|
{
|
||||||
if (childDidChange)
|
if (childDidChange)
|
||||||
{
|
{
|
||||||
@@ -2937,7 +2934,7 @@ otError MleRouter::SendChildUpdateRequest(Child &aChild)
|
|||||||
SuccessOrExit(error = AppendActiveTimestamp(*message));
|
SuccessOrExit(error = AppendActiveTimestamp(*message));
|
||||||
SuccessOrExit(error = AppendPendingTimestamp(*message));
|
SuccessOrExit(error = AppendPendingTimestamp(*message));
|
||||||
|
|
||||||
if (aChild.GetState() != Neighbor::kStateValid)
|
if (!aChild.IsStateValid())
|
||||||
{
|
{
|
||||||
SuccessOrExit(error = AppendTlvRequest(*message, tlvs, sizeof(tlvs)));
|
SuccessOrExit(error = AppendTlvRequest(*message, tlvs, sizeof(tlvs)));
|
||||||
aChild.GenerateChallenge();
|
aChild.GenerateChallenge();
|
||||||
@@ -3171,7 +3168,7 @@ void MleRouter::RemoveNeighbor(Neighbor &aNeighbor)
|
|||||||
|
|
||||||
RemoveStoredChild(aNeighbor.GetRloc16());
|
RemoveStoredChild(aNeighbor.GetRloc16());
|
||||||
}
|
}
|
||||||
else if (aNeighbor.GetState() == Neighbor::kStateValid)
|
else if (aNeighbor.IsStateValid())
|
||||||
{
|
{
|
||||||
Signal(OT_NEIGHBOR_TABLE_EVENT_ROUTER_REMOVED, aNeighbor);
|
Signal(OT_NEIGHBOR_TABLE_EVENT_ROUTER_REMOVED, aNeighbor);
|
||||||
mRouterTable.RemoveNeighbor(static_cast<Router &>(aNeighbor));
|
mRouterTable.RemoveNeighbor(static_cast<Router &>(aNeighbor));
|
||||||
@@ -3384,7 +3381,7 @@ uint16_t MleRouter::GetNextHop(uint16_t aDestination)
|
|||||||
if ((routeCost + GetLinkCost(router->GetNextHop())) < linkCost)
|
if ((routeCost + GetLinkCost(router->GetNextHop())) < linkCost)
|
||||||
{
|
{
|
||||||
nextHop = mRouterTable.GetRouter(router->GetNextHop());
|
nextHop = mRouterTable.GetRouter(router->GetNextHop());
|
||||||
VerifyOrExit(nextHop != NULL && nextHop->GetState() != Neighbor::kStateInvalid);
|
VerifyOrExit(nextHop != NULL && !nextHop->IsStateInvalid());
|
||||||
|
|
||||||
rval = GetRloc16(router->GetNextHop());
|
rval = GetRloc16(router->GetNextHop());
|
||||||
}
|
}
|
||||||
@@ -3672,7 +3669,7 @@ otError MleRouter::GetNextNeighborInfo(otNeighborInfoIterator &aIterator, otNeig
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (child->GetState() == Neighbor::kStateValid)
|
if (child->IsStateValid())
|
||||||
{
|
{
|
||||||
neighbor = child;
|
neighbor = child;
|
||||||
aNeighInfo.mIsChild = true;
|
aNeighInfo.mIsChild = true;
|
||||||
@@ -3691,7 +3688,7 @@ otError MleRouter::GetNextNeighborInfo(otNeighborInfoIterator &aIterator, otNeig
|
|||||||
{
|
{
|
||||||
Router *router = mRouterTable.GetRouter(static_cast<uint8_t>(index));
|
Router *router = mRouterTable.GetRouter(static_cast<uint8_t>(index));
|
||||||
|
|
||||||
if (router != NULL && router->GetState() == Neighbor::kStateValid)
|
if (router != NULL && router->IsStateValid())
|
||||||
{
|
{
|
||||||
neighbor = router;
|
neighbor = router;
|
||||||
aNeighInfo.mIsChild = false;
|
aNeighInfo.mIsChild = false;
|
||||||
@@ -4266,7 +4263,7 @@ void MleRouter::FillConnectivityTlv(ConnectivityTlv &aTlv)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (router.GetState() != Neighbor::kStateValid)
|
if (!router.IsStateValid())
|
||||||
{
|
{
|
||||||
// skip non-neighbor routers
|
// skip non-neighbor routers
|
||||||
continue;
|
continue;
|
||||||
@@ -4440,7 +4437,7 @@ bool MleRouter::HasMinDowngradeNeighborRouters(void)
|
|||||||
{
|
{
|
||||||
Router &router = *iter.GetRouter();
|
Router &router = *iter.GetRouter();
|
||||||
|
|
||||||
if (router.GetState() != Neighbor::kStateValid)
|
if (!router.IsStateValid())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -4480,7 +4477,7 @@ bool MleRouter::HasOneNeighborWithComparableConnectivity(const RouteTlv &aRoute,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if neighbor is valid
|
// check if neighbor is valid
|
||||||
if (router.GetState() == Neighbor::kStateValid)
|
if (router.IsStateValid())
|
||||||
{
|
{
|
||||||
// if neighbor is just peer
|
// if neighbor is just peer
|
||||||
if (router.GetRouterId() == aRouterId)
|
if (router.GetRouterId() == aRouterId)
|
||||||
@@ -4534,7 +4531,7 @@ exit:
|
|||||||
|
|
||||||
void MleRouter::SetChildStateToValid(Child &aChild)
|
void MleRouter::SetChildStateToValid(Child &aChild)
|
||||||
{
|
{
|
||||||
VerifyOrExit(aChild.GetState() != Neighbor::kStateValid);
|
VerifyOrExit(!aChild.IsStateValid());
|
||||||
|
|
||||||
aChild.SetState(Neighbor::kStateValid);
|
aChild.SetState(Neighbor::kStateValid);
|
||||||
StoreChild(aChild);
|
StoreChild(aChild);
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ void RouterTable::ClearNeighbors(void)
|
|||||||
{
|
{
|
||||||
Router &router = mRouters[index];
|
Router &router = mRouters[index];
|
||||||
|
|
||||||
if (router.GetState() == Neighbor::kStateValid)
|
if (router.IsStateValid())
|
||||||
{
|
{
|
||||||
Get<Mle::MleRouter>().Signal(OT_NEIGHBOR_TABLE_EVENT_ROUTER_REMOVED, router);
|
Get<Mle::MleRouter>().Signal(OT_NEIGHBOR_TABLE_EVENT_ROUTER_REMOVED, router);
|
||||||
}
|
}
|
||||||
@@ -335,7 +335,7 @@ uint8_t RouterTable::GetActiveLinkCount(void) const
|
|||||||
|
|
||||||
for (const Router *router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
for (const Router *router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
||||||
{
|
{
|
||||||
if (router->GetState() == Neighbor::kStateValid)
|
if (router->IsStateValid())
|
||||||
{
|
{
|
||||||
activeLinks++;
|
activeLinks++;
|
||||||
}
|
}
|
||||||
@@ -352,7 +352,7 @@ Router *RouterTable::GetNeighbor(uint16_t aRloc16)
|
|||||||
|
|
||||||
for (router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
for (router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
||||||
{
|
{
|
||||||
if (router->GetState() == Neighbor::kStateValid && router->GetRloc16() == aRloc16)
|
if (router->IsStateValid() && router->GetRloc16() == aRloc16)
|
||||||
{
|
{
|
||||||
ExitNow();
|
ExitNow();
|
||||||
}
|
}
|
||||||
@@ -370,7 +370,7 @@ Router *RouterTable::GetNeighbor(const Mac::ExtAddress &aExtAddress)
|
|||||||
|
|
||||||
for (router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
for (router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
||||||
{
|
{
|
||||||
if (router->GetState() == Neighbor::kStateValid && router->GetExtAddress() == aExtAddress)
|
if (router->IsStateValid() && router->GetExtAddress() == aExtAddress)
|
||||||
{
|
{
|
||||||
ExitNow();
|
ExitNow();
|
||||||
}
|
}
|
||||||
@@ -437,7 +437,7 @@ otError RouterTable::GetRouterInfo(uint16_t aRouterId, otRouterInfo &aRouterInfo
|
|||||||
aRouterInfo.mExtAddress = router->GetExtAddress();
|
aRouterInfo.mExtAddress = router->GetExtAddress();
|
||||||
aRouterInfo.mAllocated = true;
|
aRouterInfo.mAllocated = true;
|
||||||
aRouterInfo.mNextHop = router->GetNextHop();
|
aRouterInfo.mNextHop = router->GetNextHop();
|
||||||
aRouterInfo.mLinkEstablished = router->GetState() == Neighbor::kStateValid;
|
aRouterInfo.mLinkEstablished = router->IsStateValid();
|
||||||
aRouterInfo.mPathCost = router->GetCost();
|
aRouterInfo.mPathCost = router->GetCost();
|
||||||
aRouterInfo.mLinkQualityIn = router->GetLinkInfo().GetLinkQuality();
|
aRouterInfo.mLinkQualityIn = router->GetLinkInfo().GetLinkQuality();
|
||||||
aRouterInfo.mLinkQualityOut = router->GetLinkQualityOut();
|
aRouterInfo.mLinkQualityOut = router->GetLinkQualityOut();
|
||||||
@@ -463,7 +463,7 @@ uint8_t RouterTable::GetNeighborCount(void) const
|
|||||||
|
|
||||||
for (const Router *router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
for (const Router *router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
|
||||||
{
|
{
|
||||||
if (router->GetState() == Neighbor::kStateValid)
|
if (router->IsStateValid())
|
||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -476,8 +476,7 @@ uint8_t RouterTable::GetLinkCost(Router &aRouter)
|
|||||||
{
|
{
|
||||||
uint8_t rval = Mle::kMaxRouteCost;
|
uint8_t rval = Mle::kMaxRouteCost;
|
||||||
|
|
||||||
VerifyOrExit(aRouter.GetRloc16() != Get<Mle::MleRouter>().GetRloc16() &&
|
VerifyOrExit(aRouter.GetRloc16() != Get<Mle::MleRouter>().GetRloc16() && aRouter.IsStateValid());
|
||||||
aRouter.GetState() == Neighbor::kStateValid);
|
|
||||||
|
|
||||||
rval = aRouter.GetLinkInfo().GetLinkQuality();
|
rval = aRouter.GetLinkInfo().GetLinkQuality();
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,39 @@ public:
|
|||||||
void SetState(State aState) { mState = static_cast<uint8_t>(aState); }
|
void SetState(State aState) { mState = static_cast<uint8_t>(aState); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method indicates whether the neighbor/child is being restored.
|
* This method indicates whether the neighbor is in the Invalid state.
|
||||||
|
*
|
||||||
|
* @returns TRUE if the neighbor is in the Invalid state, FALSE otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool IsStateInvalid(void) const { return (mState == kStateInvalid); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method indicates whether the neighbor is in the Child ID Request state.
|
||||||
|
*
|
||||||
|
* @returns TRUE if the neighbor is in the Child ID Request state, FALSE otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool IsStateChildIdRequest(void) const { return (mState == kStateChildIdRequest); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method indicates whether the neighbor is in the Link Request state.
|
||||||
|
*
|
||||||
|
* @returns TRUE if the neighbor is in the Link Request state, FALSE otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool IsStateLinkRequest(void) const { return (mState == kStateLinkRequest); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method indicates whether the neighbor is in the Parent Response state.
|
||||||
|
*
|
||||||
|
* @returns TRUE if the neighbor is in the Parent Response state, FALSE otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool IsStateParentResponse(void) const { return (mState == kStateParentResponse); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method indicates whether the neighbor is being restored.
|
||||||
*
|
*
|
||||||
* @returns TRUE if the neighbor is being restored, FALSE otherwise.
|
* @returns TRUE if the neighbor is being restored, FALSE otherwise.
|
||||||
*
|
*
|
||||||
@@ -100,9 +132,25 @@ public:
|
|||||||
bool IsStateRestoring(void) const { return (mState == kStateRestored) || (mState == kStateChildUpdateRequest); }
|
bool IsStateRestoring(void) const { return (mState == kStateRestored) || (mState == kStateChildUpdateRequest); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method indicates whether the neighbor/child is in valid state or if it is being restored.
|
* This method indicates whether the neighbor is in the Restored state.
|
||||||
*
|
*
|
||||||
* When in these states messages can be sent to and/or received from the neighbor/child.
|
* @returns TRUE if the neighbor is in the Restored state, FALSE otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool IsStateRestored(void) const { return (mState == kStateRestored); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method indicates whether the neighbor is valid (frame counters are synchronized).
|
||||||
|
*
|
||||||
|
* @returns TRUE if the neighbor is valid, FALSE otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool IsStateValid(void) const { return (mState == kStateValid); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method indicates whether the neighbor is in valid state or if it is being restored.
|
||||||
|
*
|
||||||
|
* When in these states messages can be sent to and/or received from the neighbor.
|
||||||
*
|
*
|
||||||
* @returns TRUE if the neighbor is in valid, restored, or being restored states, FALSE otherwise.
|
* @returns TRUE if the neighbor is in valid, restored, or being restored states, FALSE otherwise.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user