[mle] renames and smaller changes (#7515)
This commit contains small changes in `Mle`:
- Renames `mParentRequestMode` to `mAttachMode` (to match its type).
- Shortens `ParentRequestType` enumerator names.
- Changes `SendParentRequest()` to return `void`.
- Adds a protected method `Mle::Attach()` (which replaces
the `BecomeChild()`).
- Moves `AttachMode` enum as a protected definition in `Mle`
class itself and renames the `AttachMode` constants.
diff --git a/src/core/api/thread_api.cpp b/src/core/api/thread_api.cpp
index 9ebafa9..8ec7a6b 100644
--- a/src/core/api/thread_api.cpp
+++ b/src/core/api/thread_api.cpp
@@ -295,7 +295,7 @@
otError otThreadBecomeChild(otInstance *aInstance)
{
- return AsCoreType(aInstance).Get<Mle::MleRouter>().BecomeChild(Mle::kAttachAny);
+ return AsCoreType(aInstance).Get<Mle::MleRouter>().BecomeChild();
}
otError otThreadGetNextNeighborInfo(otInstance *aInstance, otNeighborInfoIterator *aIterator, otNeighborInfo *aInfo)
diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp
index 23f6f4c..ccf5bc1 100644
--- a/src/core/thread/mle.cpp
+++ b/src/core/thread/mle.cpp
@@ -79,7 +79,7 @@
, mDelayedResponseTimer(aInstance, Mle::HandleDelayedResponseTimer)
, mMessageTransmissionTimer(aInstance, Mle::HandleMessageTransmissionTimer)
, mParentLeaderCost(0)
- , mParentRequestMode(kAttachAny)
+ , mAttachMode(kAnyPartition)
, mParentPriority(0)
, mParentLinkQuality3(0)
, mParentLinkQuality2(0)
@@ -219,14 +219,14 @@
if ((aMode == kAnnounceAttach) || (GetRloc16() == Mac::kShortAddrInvalid))
{
- IgnoreError(BecomeChild(kAttachAny));
+ Attach(kAnyPartition);
}
#if OPENTHREAD_FTD
else if (IsActiveRouter(GetRloc16()))
{
if (Get<MleRouter>().BecomeRouter(ThreadStatusTlv::kTooFewRouters) != kErrorNone)
{
- IgnoreError(BecomeChild(kAttachAny));
+ Attach(kAnyPartition);
}
}
#endif
@@ -484,19 +484,29 @@
SetStateDetached();
mParent.SetState(Neighbor::kStateInvalid);
SetRloc16(Mac::kShortAddrInvalid);
- IgnoreError(BecomeChild(kAttachAny));
+ Attach(kAnyPartition);
exit:
return error;
}
-Error Mle::BecomeChild(AttachMode aMode)
+Error Mle::BecomeChild(void)
{
Error error = kErrorNone;
VerifyOrExit(!IsDisabled(), error = kErrorInvalidState);
VerifyOrExit(!IsAttaching(), error = kErrorBusy);
+ Attach(kAnyPartition);
+
+exit:
+ return error;
+}
+
+void Mle::Attach(AttachMode aMode)
+{
+ VerifyOrExit(!IsDisabled() && !IsAttaching());
+
if (!IsDetached())
{
mAttachCounter = 0;
@@ -516,9 +526,9 @@
mParentCandidate.Clear();
SetAttachState(kAttachStateStart);
- mParentRequestMode = aMode;
+ mAttachMode = aMode;
- if (aMode != kAttachBetter)
+ if (aMode != kBetterPartition)
{
#if OPENTHREAD_FTD
if (IsFullThreadDevice())
@@ -552,7 +562,7 @@
}
exit:
- return error;
+ return;
}
uint32_t Mle::GetAttachStartDelay(void) const
@@ -668,7 +678,7 @@
#if OPENTHREAD_FTD
if (IsFullThreadDevice())
{
- Get<MleRouter>().HandleChildStart(mParentRequestMode);
+ Get<MleRouter>().HandleChildStart(mAttachMode);
}
#endif
@@ -772,7 +782,7 @@
case kRoleDetached:
mAttachCounter = 0;
SetStateDetached();
- IgnoreError(BecomeChild(kAttachAny));
+ Attach(kAnyPartition);
break;
case kRoleChild:
@@ -1751,7 +1761,7 @@
// new parent candidate is compared with the current parent
// and that it is indeed preferred over the current one.
- VerifyOrExit(mReceivedResponseFromParent || (mParentRequestMode == kAttachBetter));
+ VerifyOrExit(mReceivedResponseFromParent || (mAttachMode == kBetterPartition));
}
hasAcceptableParent = true;
@@ -1788,12 +1798,12 @@
case kAttachStateStart:
if (mAttachCounter > 0)
{
- LogNote("Attempt to attach - attempt %d, %s %s", mAttachCounter, AttachModeToString(mParentRequestMode),
+ LogNote("Attempt to attach - attempt %d, %s %s", mAttachCounter, AttachModeToString(mAttachMode),
ReattachStateToString(mReattachState));
}
else
{
- LogNote("Attempt to attach - %s %s", AttachModeToString(mParentRequestMode),
+ LogNote("Attempt to attach - %s %s", AttachModeToString(mAttachMode),
ReattachStateToString(mReattachState));
}
@@ -1804,16 +1814,16 @@
// initial MLE Parent Request has both E and R flags set in Scan Mask TLV
// during reattach when losing connectivity.
- if (mParentRequestMode == kAttachSame1 || mParentRequestMode == kAttachSame2)
+ if (mAttachMode == kSamePartition || mAttachMode == kSamePartitionRetry)
{
- IgnoreError(SendParentRequest(kParentRequestTypeRoutersAndReeds));
+ SendParentRequest(kToRoutersAndReeds);
delay = kParentRequestReedTimeout;
}
// initial MLE Parent Request has only R flag set in Scan Mask TLV for
// during initial attach or downgrade process
else
{
- IgnoreError(SendParentRequest(kParentRequestTypeRouters));
+ SendParentRequest(kToRouters);
delay = kParentRequestRouterTimeout;
}
@@ -1821,7 +1831,7 @@
case kAttachStateParentRequestRouter:
SetAttachState(kAttachStateParentRequestReed);
- IgnoreError(SendParentRequest(kParentRequestTypeRoutersAndReeds));
+ SendParentRequest(kToRoutersAndReeds);
delay = kParentRequestReedTimeout;
break;
@@ -1839,7 +1849,7 @@
// (with `mAnnounceDelay` wait between them).
SetAttachState(kAttachStateAnnounce);
- IgnoreError(SendParentRequest(kParentRequestTypeRoutersAndReeds));
+ SendParentRequest(kToRoutersAndReeds);
mAnnounceChannel = Mac::ChannelMask::kChannelIteratorFirst;
delay = mAnnounceDelay;
break;
@@ -1924,9 +1934,9 @@
VerifyOrExit(mReattachState == kReattachStop);
- switch (mParentRequestMode)
+ switch (mAttachMode)
{
- case kAttachAny:
+ case kAnyPartition:
if (!IsChild())
{
if (mAlternatePanId != Mac::kPanIdBroadcast)
@@ -1956,16 +1966,16 @@
break;
- case kAttachSame1:
- IgnoreError(BecomeChild(kAttachSame2));
+ case kSamePartition:
+ Attach(kSamePartitionRetry);
break;
- case kAttachSame2:
- case kAttachSameDowngrade:
- IgnoreError(BecomeChild(kAttachAny));
+ case kSamePartitionRetry:
+ case kDowngradeToReed:
+ Attach(kAnyPartition);
break;
- case kAttachBetter:
+ case kBetterPartition:
break;
}
@@ -2065,7 +2075,7 @@
}
}
-Error Mle::SendParentRequest(ParentRequestType aType)
+void Mle::SendParentRequest(ParentRequestType aType)
{
Error error = kErrorNone;
Message * message;
@@ -2076,11 +2086,11 @@
switch (aType)
{
- case kParentRequestTypeRouters:
+ case kToRouters:
scanMask = ScanMaskTlv::kRouterFlag;
break;
- case kParentRequestTypeRoutersAndReeds:
+ case kToRoutersAndReeds:
scanMask = ScanMaskTlv::kRouterFlag | ScanMaskTlv::kEndDeviceFlag;
break;
}
@@ -2100,18 +2110,17 @@
switch (aType)
{
- case kParentRequestTypeRouters:
+ case kToRouters:
Log(kMessageSend, kTypeParentRequestToRouters, destination);
break;
- case kParentRequestTypeRoutersAndReeds:
+ case kToRoutersAndReeds:
Log(kMessageSend, kTypeParentRequestToRoutersReeds, destination);
break;
}
exit:
FreeMessageOnError(message, error);
- return error;
}
void Mle::RequestShorterChildIdRequest(void)
@@ -3516,22 +3525,22 @@
bool isIdSequenceGreater =
SerialNumber::IsGreater(connectivity.GetIdSequence(), Get<RouterTable>().GetRouterIdSequence());
- switch (mParentRequestMode)
+ switch (mAttachMode)
{
- case kAttachAny:
+ case kAnyPartition:
VerifyOrExit(!isPartitionIdSame || isIdSequenceGreater);
break;
- case kAttachSame1:
- case kAttachSame2:
+ case kSamePartition:
+ case kSamePartitionRetry:
VerifyOrExit(isPartitionIdSame && isIdSequenceGreater);
break;
- case kAttachSameDowngrade:
+ case kDowngradeToReed:
VerifyOrExit(isPartitionIdSame && (isIdSequenceSame || isIdSequenceGreater));
break;
- case kAttachBetter:
+ case kBetterPartition:
VerifyOrExit(!isPartitionIdSame);
VerifyOrExit(MleRouter::ComparePartitions(connectivity.GetActiveRouters() <= 1, leaderData,
@@ -4248,7 +4257,7 @@
{
LogInfo("PeriodicParentSearch: Parent RSS less than %d, searching for new parents", kParentSearchRssThreadhold);
mParentSearchIsInBackoff = true;
- IgnoreError(BecomeChild(kAttachAny));
+ Attach(kAnyPartition);
}
exit:
@@ -4546,18 +4555,18 @@
const char *Mle::AttachModeToString(AttachMode aMode)
{
static const char *const kAttachModeStrings[] = {
- "any-partition", // (0) kAttachAny
- "same-partition-try-1", // (1) kAttachSame1
- "same-partition-try-2", // (2) kAttachSame2
- "better-partition", // (3) kAttachBetter
- "same-partition-downgrade", // (4) kAttachSameDowngrade
+ "AnyPartition", // (0) kAnyPartition
+ "SamePartition", // (1) kSamePartition
+ "SamePartitionRetry", // (2) kSamePartitionRetry
+ "BetterPartition", // (3) kBetterPartition
+ "DowngradeToReed", // (4) kDowngradeToReed
};
- static_assert(kAttachAny == 0, "kAttachAny value is incorrect");
- static_assert(kAttachSame1 == 1, "kAttachSame1 value is incorrect");
- static_assert(kAttachSame2 == 2, "kAttachSame2 value is incorrect");
- static_assert(kAttachBetter == 3, "kAttachBetter value is incorrect");
- static_assert(kAttachSameDowngrade == 4, "kAttachSameDowngrade value is incorrect");
+ static_assert(kAnyPartition == 0, "kAnyPartition value is incorrect");
+ static_assert(kSamePartition == 1, "kSamePartition value is incorrect");
+ static_assert(kSamePartitionRetry == 2, "kSamePartitionRetry value is incorrect");
+ static_assert(kBetterPartition == 3, "kBetterPartition value is incorrect");
+ static_assert(kDowngradeToReed == 4, "kDowngradeToReed value is incorrect");
return kAttachModeStrings[aMode];
}
diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp
index 0053769..ddd7225 100644
--- a/src/core/thread/mle.hpp
+++ b/src/core/thread/mle.hpp
@@ -181,14 +181,12 @@
/**
* This method causes the Thread interface to attempt an MLE attach.
*
- * @param[in] aMode Indicates what partitions to attach to.
- *
* @retval kErrorNone Successfully began the attach process.
* @retval kErrorInvalidState MLE is Disabled.
* @retval kErrorBusy An attach process is in progress.
*
*/
- Error BecomeChild(AttachMode aMode);
+ Error BecomeChild(void);
/**
* This method indicates whether or not the Thread device is attached to a Thread network.
@@ -786,6 +784,19 @@
};
/**
+ * Attach mode.
+ *
+ */
+ enum AttachMode : uint8_t
+ {
+ kAnyPartition, ///< Attach to any Thread partition.
+ kSamePartition, ///< Attach to the same Thread partition (attempt 1 when losing connectivity).
+ kSamePartitionRetry, ///< Attach to the same Thread partition (attempt 2 when losing connectivity).
+ kBetterPartition, ///< Attach to a better (i.e. higher weight/partition id) Thread partition.
+ kDowngradeToReed, ///< Attach to the same Thread partition during downgrade process.
+ };
+
+ /**
* States during attach (when searching for a parent).
*
*/
@@ -806,10 +817,10 @@
*/
enum ReattachState : uint8_t
{
- kReattachStop = 0, ///< Reattach process is disabled or finished
- kReattachStart = 1, ///< Start reattach process
- kReattachActive = 2, ///< Reattach using stored Active Dataset
- kReattachPending = 3, ///< Reattach using stored Pending Dataset
+ kReattachStop, ///< Reattach process is disabled or finished
+ kReattachStart, ///< Start reattach process
+ kReattachActive, ///< Reattach using stored Active Dataset
+ kReattachPending, ///< Reattach using stored Pending Dataset
};
static constexpr uint16_t kMleMaxResponseDelay = 1000u; ///< Max delay before responding to a multicast request.
@@ -951,6 +962,14 @@
void SetRole(DeviceRole aRole);
/**
+ * This method causes the Thread interface to attempt an MLE attach.
+ *
+ * @param[in] aMode Indicates what partitions to attach to.
+ *
+ */
+ void Attach(AttachMode aMode);
+
+ /**
* This method sets the attach state
*
* @param[in] aState An attach state
@@ -1646,8 +1665,8 @@
enum ParentRequestType : uint8_t
{
- kParentRequestTypeRouters, // Parent Request to all routers.
- kParentRequestTypeRoutersAndReeds, // Parent Request to all routers and REEDs.
+ kToRouters, // Parent Request to routers only.
+ kToRoutersAndReeds, // Parent Request to all routers and REEDs.
};
enum ChildUpdateRequestState : uint8_t
@@ -1825,7 +1844,7 @@
bool HasUnregisteredAddress(void);
uint32_t GetAttachStartDelay(void) const;
- Error SendParentRequest(ParentRequestType aType);
+ void SendParentRequest(ParentRequestType aType);
Error SendChildIdRequest(void);
Error GetNextAnnouceChannel(uint8_t &aChannel) const;
bool HasMoreChannelsToAnnouce(void) const;
@@ -1876,7 +1895,7 @@
Challenge mParentRequestChallenge;
- AttachMode mParentRequestMode;
+ AttachMode mAttachMode;
int8_t mParentPriority;
uint8_t mParentLinkQuality3;
uint8_t mParentLinkQuality2;
diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp
index 61b7419..2b6b9b9 100644
--- a/src/core/thread/mle_router.cpp
+++ b/src/core/thread/mle_router.cpp
@@ -312,7 +312,7 @@
switch (aMode)
{
- case kAttachSameDowngrade:
+ case kDowngradeToReed:
SendAddressRelease();
// reset children info if any
@@ -325,8 +325,8 @@
SetRouterId(kInvalidRouterId);
break;
- case kAttachSame1:
- case kAttachSame2:
+ case kSamePartition:
+ case kSamePartitionRetry:
if (HasChildren())
{
IgnoreError(BecomeRouter(ThreadStatusTlv::kHaveChildIdRequest));
@@ -334,7 +334,7 @@
break;
- case kAttachAny:
+ case kAnyPartition:
// If attach was started due to receiving MLE Announce Messages, all rx-on-when-idle devices would
// start attach immediately when receiving such Announce message as in Thread 1.1 specification,
// Section 4.8.1,
@@ -351,7 +351,7 @@
OT_FALL_THROUGH;
- case kAttachBetter:
+ case kBetterPartition:
if (HasChildren() && mPreviousPartitionIdRouter != mLeaderData.GetPartitionId())
{
IgnoreError(BecomeRouter(ThreadStatusTlv::kParentPartitionChange));
@@ -1236,7 +1236,7 @@
#endif
)
{
- IgnoreError(BecomeChild(kAttachBetter));
+ Attach(kBetterPartition);
}
ExitNow(error = kErrorDrop);
@@ -1816,14 +1816,13 @@
if ((mRouterTable.GetActiveRouterCount() > 0) && (mRouterTable.GetLeaderAge() >= mNetworkIdTimeout))
{
LogInfo("Router ID Sequence timeout");
- IgnoreError(BecomeChild(kAttachSame1));
+ Attach(kSamePartition);
}
if (routerStateUpdate && mRouterTable.GetActiveRouterCount() > mRouterDowngradeThreshold)
{
- // downgrade to REED
LogNote("Downgrade to REED");
- IgnoreError(BecomeChild(kAttachSameDowngrade));
+ Attach(kDowngradeToReed);
}
break;
diff --git a/src/core/thread/mle_types.hpp b/src/core/thread/mle_types.hpp
index f939836..be080a6 100644
--- a/src/core/thread/mle_types.hpp
+++ b/src/core/thread/mle_types.hpp
@@ -194,19 +194,6 @@
kRoleLeader = OT_DEVICE_ROLE_LEADER, ///< The Thread Leader role.
};
-/**
- * MLE Attach modes
- *
- */
-enum AttachMode : uint8_t
-{
- kAttachAny = 0, ///< Attach to any Thread partition.
- kAttachSame1 = 1, ///< Attach to the same Thread partition (attempt 1 when losing connectivity).
- kAttachSame2 = 2, ///< Attach to the same Thread partition (attempt 2 when losing connectivity).
- kAttachBetter = 3, ///< Attach to a better (i.e. higher weight/partition id) Thread partition.
- kAttachSameDowngrade = 4, ///< Attach to the same Thread partition during downgrade process.
-};
-
constexpr uint16_t kAloc16Leader = 0xfc00;
constexpr uint16_t kAloc16DhcpAgentStart = 0xfc01;
constexpr uint16_t kAloc16DhcpAgentEnd = 0xfc0f;