From 21181644aa1a0e70aaed8421ab796a26c9b63504 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Fri, 10 Apr 2026 19:37:55 -0700 Subject: [PATCH] [mle] add parameter-less `AppendModeTlv()` helper (#12868) This commit introduces an overloaded version of `AppendModeTlv()` that automatically uses the device's own `GetDeviceMode()`. The new parameter-less version simplifies the common case where a node reports its own mode. The parameterized version is preserved for cases where a specific mode must be provided (e.g., parent reporting one of its children's mode). --- src/core/thread/mle.cpp | 8 +++++--- src/core/thread/mle.hpp | 1 + src/core/thread/mle_p2p.cpp | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 63161816b..188a67a54 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -1231,7 +1231,7 @@ Error Mle::SendChildUpdateRequestToParent(ChildUpdateRequestMode aMode) } VerifyOrExit((message = NewMleMessage(kCommandChildUpdateRequest)) != nullptr, error = kErrorNoBufs); - SuccessOrExit(error = message->AppendModeTlv(mDeviceMode)); + SuccessOrExit(error = message->AppendModeTlv()); switch (aMode) { @@ -3554,6 +3554,8 @@ Error Mle::TxMessage::AppendSourceAddressTlv(void) Error Mle::TxMessage::AppendStatusTlv(Status aStatus) { return Tlv::Append(*this, aStatus); } +Error Mle::TxMessage::AppendModeTlv(void) { return AppendModeTlv(Get().GetDeviceMode()); } + Error Mle::TxMessage::AppendModeTlv(DeviceMode aMode) { return Tlv::Append(*this, aMode.Get()); } Error Mle::TxMessage::AppendTimeoutTlv(uint32_t aTimeout) { return Tlv::Append(*this, aTimeout); } @@ -5017,7 +5019,7 @@ void Mle::Attacher::SendParentRequest(ParentRequestType aType) } VerifyOrExit((message = Get().NewMleMessage(kCommandParentRequest)) != nullptr, error = kErrorNoBufs); - SuccessOrExit(error = message->AppendModeTlv(Get().mDeviceMode)); + SuccessOrExit(error = message->AppendModeTlv()); SuccessOrExit(error = message->AppendChallengeTlv(mParentRequestChallenge)); SuccessOrExit(error = message->AppendScanMaskTlv(scanMask)); SuccessOrExit(error = message->AppendVersionTlv()); @@ -5134,7 +5136,7 @@ Error Mle::Attacher::SendChildIdRequest(void) VerifyOrExit((message = Get().NewMleMessage(kCommandChildIdRequest)) != nullptr, error = kErrorNoBufs); SuccessOrExit(error = message->AppendResponseTlv(mParentCandidate.mRxChallenge)); SuccessOrExit(error = message->AppendLinkAndMleFrameCounterTlvs()); - SuccessOrExit(error = message->AppendModeTlv(Get().mDeviceMode)); + SuccessOrExit(error = message->AppendModeTlv()); SuccessOrExit(error = message->AppendTimeoutTlv(Get().mTimeout)); SuccessOrExit(error = message->AppendVersionTlv()); SuccessOrExit(error = message->AppendSupervisionIntervalTlvIfSleepyChild()); diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp index 6846fb6e1..4c6994b93 100644 --- a/src/core/thread/mle.hpp +++ b/src/core/thread/mle.hpp @@ -1558,6 +1558,7 @@ private: public: // Appending single TLV Error AppendSourceAddressTlv(void); + Error AppendModeTlv(void); Error AppendModeTlv(DeviceMode aMode); Error AppendTimeoutTlv(uint32_t aTimeout); Error AppendChallengeTlv(const TxChallenge &aChallenge); diff --git a/src/core/thread/mle_p2p.cpp b/src/core/thread/mle_p2p.cpp index 7aa28447d..b087363ed 100644 --- a/src/core/thread/mle_p2p.cpp +++ b/src/core/thread/mle_p2p.cpp @@ -174,7 +174,7 @@ void Mle::P2p::SendP2pLinkRequest(Peer *aPeer) VerifyOrExit(aPeer != nullptr, error = kErrorInvalidArgs); VerifyOrExit((message = Get().NewMleMessage(kCommandP2pLinkRequest)) != nullptr, error = kErrorNoBufs); - SuccessOrExit(error = message->AppendModeTlv(Get().GetDeviceMode())); + SuccessOrExit(error = message->AppendModeTlv()); SuccessOrExit(error = message->AppendVersionTlv()); aPeer->GenerateChallenge(); @@ -225,7 +225,7 @@ Error Mle::P2p::SendP2pLinkAcceptVariant(const LinkAcceptInfo &aInfo, bool aIsLi VerifyOrExit((message = Get().NewMleMessage(command)) != nullptr, error = kErrorNoBufs); if (command == kCommandP2pLinkAcceptAndRequest) { - SuccessOrExit(error = message->AppendModeTlv(Get().GetDeviceMode())); + SuccessOrExit(error = message->AppendModeTlv()); SuccessOrExit(error = message->AppendVersionTlv()); }