[neighbor] add methods to check neighbor state (#4280)

This commit is contained in:
Jonathan Hui
2019-10-29 09:05:36 -07:00
committed by GitHub
parent 5a7e19062c
commit fd57343641
9 changed files with 105 additions and 63 deletions
+1 -1
View File
@@ -322,7 +322,7 @@ otError otThreadGetParentInfo(otInstance *aInstance, otRouterInfo *aParentInfo)
aParentInfo->mLinkQualityOut = parent->GetLinkQualityOut();
aParentInfo->mAge = static_cast<uint8_t>(Time::MsecToSec(TimerMilli::GetNow() - parent->GetLastHeard()));
aParentInfo->mAllocated = true;
aParentInfo->mLinkEstablished = parent->GetState() == Neighbor::kStateValid;
aParentInfo->mLinkEstablished = parent->IsStateValid();
#if !OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
exit:
+1 -1
View File
@@ -205,7 +205,7 @@ void DataPollSender::HandlePollSent(Mac::TxFrame &aFrame, otError aError)
Get<MeshForwarder>().UpdateNeighborOnSentFrame(aFrame, aError, macDest);
}
if (Get<Mle::MleRouter>().GetParentCandidate()->GetState() == Neighbor::kStateInvalid)
if (Get<Mle::MleRouter>().GetParentCandidate()->IsStateInvalid())
{
StopPolling();
Get<Mle::MleRouter>().BecomeDetached();
+2 -2
View File
@@ -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
// Data Request frames from a child being restored.
if (aNeighbor->GetState() == Neighbor::kStateValid)
if (aNeighbor->IsStateValid())
{
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);
#endif
if ((keyIdMode == Frame::kKeyIdMode1) && (aNeighbor->GetState() == Neighbor::kStateValid))
if ((keyIdMode == Frame::kKeyIdMode1) && (aNeighbor->IsStateValid()))
{
if (aNeighbor->GetKeySequence() != keySequence)
{
+4 -4
View File
@@ -130,7 +130,7 @@ Child *ChildTable::GetNewChild(void)
for (uint16_t num = mMaxChildrenAllowed; num != 0; num--, child++)
{
if (child->GetState() == Child::kStateInvalid)
if (child->IsStateInvalid())
{
child->Clear();
ExitNow();
@@ -253,7 +253,7 @@ bool ChildTable::MatchesFilter(const Child &aChild, StateFilter aFilter)
switch (aFilter)
{
case kInStateValid:
rval = (aChild.GetState() == Child::kStateValid);
rval = aChild.IsStateValid();
break;
case kInStateValidOrRestoring:
@@ -261,7 +261,7 @@ bool ChildTable::MatchesFilter(const Child &aChild, StateFilter aFilter)
break;
case kInStateChildIdRequest:
rval = (aChild.GetState() == Child::kStateChildIdRequest);
rval = aChild.IsStateChildIdRequest();
break;
case kInStateValidOrAttaching:
@@ -269,7 +269,7 @@ bool ChildTable::MatchesFilter(const Child &aChild, StateFilter aFilter)
break;
case kInStateAnyExceptInvalid:
rval = (aChild.GetState() != Child::kStateInvalid);
rval = !aChild.IsStateInvalid();
break;
case kInStateAnyExceptValidOrRestoring:
+1 -1
View File
@@ -165,7 +165,7 @@ exit:
void IndirectSender::HandleChildModeChange(Child &aChild, Mle::DeviceMode aOldMode)
{
if (!aChild.IsRxOnWhenIdle() && (aChild.GetState() == Neighbor::kStateValid))
if (!aChild.IsRxOnWhenIdle() && (aChild.IsStateValid()))
{
SetChildUseShortAddress(aChild, true);
}
+10 -12
View File
@@ -1677,7 +1677,7 @@ void Mle::HandleAttachTimer(void)
// parent.
if ((linkQuality == 3 || mAttachState != kAttachStateParentRequestRouter) &&
mParentCandidate.GetState() == Neighbor::kStateParentResponse &&
mParentCandidate.IsStateParentResponse() &&
(mRole != OT_DEVICE_ROLE_CHILD || mReceivedResponseFromParent || mParentRequestMode == kAttachBetter) &&
SendChildIdRequest() == OT_ERROR_NONE)
{
@@ -2723,7 +2723,7 @@ void Mle::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageIn
break;
}
if (neighbor != NULL && neighbor->GetState() == Neighbor::kStateValid)
if (neighbor != NULL && neighbor->IsStateValid())
{
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_LEADER:
if ((neighbor = Get<MleRouter>().GetNeighbor(macAddr)) != NULL && neighbor->GetState() == Neighbor::kStateValid)
if ((neighbor = Get<MleRouter>().GetNeighbor(macAddr)) != NULL && neighbor->IsStateValid())
{
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
// parent candidate to update the challenge and frame counters.
if ((mParentCandidate.GetState() == Neighbor::kStateParentResponse) &&
(mParentCandidate.GetExtAddress() != extAddress))
if (mParentCandidate.IsStateParentResponse() && (mParentCandidate.GetExtAddress() != extAddress))
{
// if already have a candidate parent, only seek a better parent
@@ -3875,11 +3874,11 @@ Neighbor *Mle::GetNeighbor(uint16_t aAddress)
{
Neighbor *rval = NULL;
if ((mParent.IsStateValidOrRestoring()) && (mParent.GetRloc16() == aAddress))
if (mParent.IsStateValidOrRestoring() && (mParent.GetRloc16() == aAddress))
{
rval = &mParent;
}
else if ((mParentCandidate.GetState() == Neighbor::kStateValid) && (mParentCandidate.GetRloc16() == aAddress))
else if (mParentCandidate.IsStateValid() && (mParentCandidate.GetRloc16() == aAddress))
{
rval = &mParentCandidate;
}
@@ -3891,11 +3890,11 @@ Neighbor *Mle::GetNeighbor(const Mac::ExtAddress &aAddress)
{
Neighbor *rval = NULL;
if ((mParent.IsStateValidOrRestoring()) && (mParent.GetExtAddress() == aAddress))
if (mParent.IsStateValidOrRestoring() && (mParent.GetExtAddress() == aAddress))
{
rval = &mParent;
}
else if ((mParentCandidate.GetState() == Neighbor::kStateValid) && (mParentCandidate.GetExtAddress() == aAddress))
else if (mParentCandidate.IsStateValid() && (mParentCandidate.GetExtAddress() == aAddress))
{
rval = &mParentCandidate;
}
@@ -3927,8 +3926,7 @@ Neighbor *Mle::GetNeighbor(const Mac::Address &aAddress)
uint16_t Mle::GetNextHop(uint16_t aDestination) const
{
OT_UNUSED_VARIABLE(aDestination);
return (mParent.GetState() == Neighbor::kStateValid) ? mParent.GetRloc16()
: static_cast<uint16_t>(Mac::kShortAddrInvalid);
return (mParent.IsStateValid()) ? mParent.GetRloc16() : static_cast<uint16_t>(Mac::kShortAddrInvalid);
}
bool Mle::IsRoutingLocator(const Ip6::Address &aAddress) const
@@ -3958,7 +3956,7 @@ Router *Mle::GetParentCandidate(void)
{
Router *rval;
if (mParentCandidate.GetState() == Neighbor::kStateValid)
if (mParentCandidate.IsStateValid())
{
rval = &mParentCandidate;
}
+28 -31
View File
@@ -495,7 +495,7 @@ otError MleRouter::SendLinkRequest(Neighbor *aNeighbor)
case OT_DEVICE_ROLE_ROUTER:
case OT_DEVICE_ROLE_LEADER:
if (aNeighbor == NULL || aNeighbor->GetState() != Neighbor::kStateValid)
if (aNeighbor == NULL || !aNeighbor->IsStateValid())
{
SuccessOrExit(error = AppendTlvRequest(*message, routerTlvs, sizeof(routerTlvs)));
}
@@ -526,7 +526,7 @@ otError MleRouter::SendLinkRequest(Neighbor *aNeighbor)
}
else
{
if (aNeighbor->GetState() != Neighbor::kStateValid)
if (!aNeighbor->IsStateValid())
{
aNeighbor->GenerateChallenge();
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
neighbor = mRouterTable.GetRouter(GetRouterId(rloc16));
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());
@@ -641,7 +641,7 @@ otError MleRouter::HandleLinkRequest(const Message &aMessage, const Ip6::Message
else
{
// 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()),
error = OT_ERROR_DROP);
}
@@ -688,9 +688,8 @@ otError MleRouter::SendLinkAccept(const Ip6::MessageInfo &aMessageInfo,
Header::Command command;
uint8_t linkMargin;
command = (aNeighbor == NULL || aNeighbor->GetState() == Neighbor::kStateValid)
? Header::kCommandLinkAccept
: Header::kCommandLinkAcceptAndRequest;
command = (aNeighbor == NULL || aNeighbor->IsStateValid()) ? Header::kCommandLinkAccept
: Header::kCommandLinkAcceptAndRequest;
VerifyOrExit((message = NewMleMessage()) != NULL, error = OT_ERROR_NO_BUFS);
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();
@@ -1264,7 +1263,7 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
{
router = mRouterTable.GetRouter(routerId);
if (router != NULL && router->GetState() == Neighbor::kStateValid)
if (router != NULL && router->IsStateValid())
{
processRouteTlv = true;
}
@@ -1294,8 +1293,8 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
router = (macAddr == mParent.GetExtAddress()) ? &mParent : mRouterTable.GetRouter(routerId);
VerifyOrExit(router != NULL);
if ((router->GetState() == Neighbor::kStateValid) && IsFullThreadDevice() &&
(mRouterSelectionJitterTimeout == 0) && (mRouterTable.GetActiveRouterCount() < mRouterUpgradeThreshold))
if (router->IsStateValid() && IsFullThreadDevice() && (mRouterSelectionJitterTimeout == 0) &&
(mRouterTable.GetActiveRouterCount() < mRouterUpgradeThreshold))
{
mRouterSelectionJitterTimeout = 1 + Random::NonCrypto::GetUint8InRange(0, mRouterSelectionJitter);
ExitNow();
@@ -1344,8 +1343,7 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
}
}
}
else if (IsFullThreadDevice() && (router->GetState() != Neighbor::kStateValid) &&
(router->GetState() != Neighbor::kStateLinkRequest) &&
else if (IsFullThreadDevice() && !router->IsStateValid() && !router->IsStateLinkRequest() &&
(mRouterTable.GetActiveLinkCount() < OPENTHREAD_CONFIG_MLE_CHILD_ROUTER_LINKS))
{
router->SetExtAddress(macAddr);
@@ -1391,7 +1389,7 @@ otError MleRouter::HandleAdvertisement(const Message &aMessage, const Ip6::Messa
VerifyOrExit(router != NULL);
// 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))
{
router->SetExtAddress(macAddr);
@@ -1809,8 +1807,7 @@ void MleRouter::HandleStateUpdateTimer(void)
otLogInfoMle("Child timeout expired");
RemoveNeighbor(child);
}
else if ((mRole == OT_DEVICE_ROLE_ROUTER || mRole == OT_DEVICE_ROLE_LEADER) &&
(child.GetState() == Neighbor::kStateRestored))
else if ((mRole == OT_DEVICE_ROLE_ROUTER || mRole == OT_DEVICE_ROLE_LEADER) && child.IsStateRestored())
{
SendChildUpdateRequest(child);
}
@@ -1830,7 +1827,7 @@ void MleRouter::HandleStateUpdateTimer(void)
age = TimerMilli::GetNow() - router.GetLastHeard();
if (router.GetState() == Neighbor::kStateValid)
if (router.IsStateValid())
{
#if OPENTHREAD_CONFIG_MLE_SEND_LINK_REQUEST_ON_ADV_TIMEOUT == 0
@@ -1859,7 +1856,7 @@ void MleRouter::HandleStateUpdateTimer(void)
#endif
}
else if (router.GetState() == Neighbor::kStateLinkRequest)
else if (router.IsStateLinkRequest())
{
if (age >= kMaxLinkRequestTimeout)
{
@@ -2161,7 +2158,7 @@ otError MleRouter::HandleChildIdRequest(const Message & aMessage,
RemoveNeighbor(*router);
}
if (child->GetState() != Neighbor::kStateValid)
if (!child->IsStateValid())
{
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
// 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)
if (mode.GetMode().IsRxOnWhenIdle())
@@ -2357,7 +2354,7 @@ otError MleRouter::HandleChildUpdateRequest(const Message & aMessage,
SetChildStateToValid(*child);
child->SetKeySequence(aKeySequence);
}
else if (child->GetState() == Neighbor::kStateValid)
else if (child->IsStateValid())
{
if (childDidChange)
{
@@ -2937,7 +2934,7 @@ otError MleRouter::SendChildUpdateRequest(Child &aChild)
SuccessOrExit(error = AppendActiveTimestamp(*message));
SuccessOrExit(error = AppendPendingTimestamp(*message));
if (aChild.GetState() != Neighbor::kStateValid)
if (!aChild.IsStateValid())
{
SuccessOrExit(error = AppendTlvRequest(*message, tlvs, sizeof(tlvs)));
aChild.GenerateChallenge();
@@ -3171,7 +3168,7 @@ void MleRouter::RemoveNeighbor(Neighbor &aNeighbor)
RemoveStoredChild(aNeighbor.GetRloc16());
}
else if (aNeighbor.GetState() == Neighbor::kStateValid)
else if (aNeighbor.IsStateValid())
{
Signal(OT_NEIGHBOR_TABLE_EVENT_ROUTER_REMOVED, aNeighbor);
mRouterTable.RemoveNeighbor(static_cast<Router &>(aNeighbor));
@@ -3384,7 +3381,7 @@ uint16_t MleRouter::GetNextHop(uint16_t aDestination)
if ((routeCost + GetLinkCost(router->GetNextHop())) < linkCost)
{
nextHop = mRouterTable.GetRouter(router->GetNextHop());
VerifyOrExit(nextHop != NULL && nextHop->GetState() != Neighbor::kStateInvalid);
VerifyOrExit(nextHop != NULL && !nextHop->IsStateInvalid());
rval = GetRloc16(router->GetNextHop());
}
@@ -3672,7 +3669,7 @@ otError MleRouter::GetNextNeighborInfo(otNeighborInfoIterator &aIterator, otNeig
break;
}
if (child->GetState() == Neighbor::kStateValid)
if (child->IsStateValid())
{
neighbor = child;
aNeighInfo.mIsChild = true;
@@ -3691,7 +3688,7 @@ otError MleRouter::GetNextNeighborInfo(otNeighborInfoIterator &aIterator, otNeig
{
Router *router = mRouterTable.GetRouter(static_cast<uint8_t>(index));
if (router != NULL && router->GetState() == Neighbor::kStateValid)
if (router != NULL && router->IsStateValid())
{
neighbor = router;
aNeighInfo.mIsChild = false;
@@ -4266,7 +4263,7 @@ void MleRouter::FillConnectivityTlv(ConnectivityTlv &aTlv)
continue;
}
if (router.GetState() != Neighbor::kStateValid)
if (!router.IsStateValid())
{
// skip non-neighbor routers
continue;
@@ -4440,7 +4437,7 @@ bool MleRouter::HasMinDowngradeNeighborRouters(void)
{
Router &router = *iter.GetRouter();
if (router.GetState() != Neighbor::kStateValid)
if (!router.IsStateValid())
{
continue;
}
@@ -4480,7 +4477,7 @@ bool MleRouter::HasOneNeighborWithComparableConnectivity(const RouteTlv &aRoute,
}
// check if neighbor is valid
if (router.GetState() == Neighbor::kStateValid)
if (router.IsStateValid())
{
// if neighbor is just peer
if (router.GetRouterId() == aRouterId)
@@ -4534,7 +4531,7 @@ exit:
void MleRouter::SetChildStateToValid(Child &aChild)
{
VerifyOrExit(aChild.GetState() != Neighbor::kStateValid);
VerifyOrExit(!aChild.IsStateValid());
aChild.SetState(Neighbor::kStateValid);
StoreChild(aChild);
+7 -8
View File
@@ -101,7 +101,7 @@ void RouterTable::ClearNeighbors(void)
{
Router &router = mRouters[index];
if (router.GetState() == Neighbor::kStateValid)
if (router.IsStateValid())
{
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))
{
if (router->GetState() == Neighbor::kStateValid)
if (router->IsStateValid())
{
activeLinks++;
}
@@ -352,7 +352,7 @@ Router *RouterTable::GetNeighbor(uint16_t aRloc16)
for (router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
{
if (router->GetState() == Neighbor::kStateValid && router->GetRloc16() == aRloc16)
if (router->IsStateValid() && router->GetRloc16() == aRloc16)
{
ExitNow();
}
@@ -370,7 +370,7 @@ Router *RouterTable::GetNeighbor(const Mac::ExtAddress &aExtAddress)
for (router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
{
if (router->GetState() == Neighbor::kStateValid && router->GetExtAddress() == aExtAddress)
if (router->IsStateValid() && router->GetExtAddress() == aExtAddress)
{
ExitNow();
}
@@ -437,7 +437,7 @@ otError RouterTable::GetRouterInfo(uint16_t aRouterId, otRouterInfo &aRouterInfo
aRouterInfo.mExtAddress = router->GetExtAddress();
aRouterInfo.mAllocated = true;
aRouterInfo.mNextHop = router->GetNextHop();
aRouterInfo.mLinkEstablished = router->GetState() == Neighbor::kStateValid;
aRouterInfo.mLinkEstablished = router->IsStateValid();
aRouterInfo.mPathCost = router->GetCost();
aRouterInfo.mLinkQualityIn = router->GetLinkInfo().GetLinkQuality();
aRouterInfo.mLinkQualityOut = router->GetLinkQualityOut();
@@ -463,7 +463,7 @@ uint8_t RouterTable::GetNeighborCount(void) const
for (const Router *router = GetFirstEntry(); router != NULL; router = GetNextEntry(router))
{
if (router->GetState() == Neighbor::kStateValid)
if (router->IsStateValid())
{
count++;
}
@@ -476,8 +476,7 @@ uint8_t RouterTable::GetLinkCost(Router &aRouter)
{
uint8_t rval = Mle::kMaxRouteCost;
VerifyOrExit(aRouter.GetRloc16() != Get<Mle::MleRouter>().GetRloc16() &&
aRouter.GetState() == Neighbor::kStateValid);
VerifyOrExit(aRouter.GetRloc16() != Get<Mle::MleRouter>().GetRloc16() && aRouter.IsStateValid());
rval = aRouter.GetLinkInfo().GetLinkQuality();
+51 -3
View File
@@ -92,7 +92,39 @@ public:
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.
*
@@ -100,9 +132,25 @@ public:
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.
*