diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 8ad0d009f..63161816b 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -1261,8 +1261,7 @@ Error Mle::SendChildUpdateRequestToParent(ChildUpdateRequestMode aMode) break; case kRoleChild: - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); SuccessOrExit(error = message->AppendTimeoutTlv((aMode == kAppendZeroTimeout) ? 0 : mTimeout)); SuccessOrExit(error = message->AppendSupervisionIntervalTlvIfSleepyChild()); #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE @@ -3545,6 +3544,9 @@ exit: return message; } +//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// TxMessage - Append single TLV + Error Mle::TxMessage::AppendSourceAddressTlv(void) { return Tlv::Append(*this, Get().GetRloc16()); @@ -3589,17 +3591,6 @@ Error Mle::TxMessage::AppendMleFrameCounterTlv(void) return Tlv::Append(*this, Get().GetMleFrameCounter()); } -Error Mle::TxMessage::AppendLinkAndMleFrameCounterTlvs(void) -{ - Error error; - - SuccessOrExit(error = AppendLinkFrameCounterTlv()); - error = AppendMleFrameCounterTlv(); - -exit: - return error; -} - Error Mle::TxMessage::AppendAddress16Tlv(uint16_t aRloc16) { return Tlv::Append(*this, aRloc16); } Error Mle::TxMessage::AppendLeaderDataTlv(void) @@ -3827,17 +3818,6 @@ exit: return error; } -Error Mle::TxMessage::AppendActiveAndPendingTimestampTlvs(void) -{ - Error error; - - SuccessOrExit(error = AppendActiveTimestampTlv()); - error = AppendPendingTimestampTlv(); - -exit: - return error; -} - #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE Error Mle::TxMessage::AppendCslChannelTlv(void) { @@ -3873,6 +3853,45 @@ Error Mle::TxMessage::AppendCslClockAccuracyTlv(void) } #endif +//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// TxMessage - Append multiple TLVs + +Error Mle::TxMessage::AppendLinkAndMleFrameCounterTlvs(void) +{ + Error error; + + SuccessOrExit(error = AppendLinkFrameCounterTlv()); + error = AppendMleFrameCounterTlv(); + +exit: + return error; +} + +Error Mle::TxMessage::AppendSourceAddressAndLeaderDataTlvs(void) +{ + Error error; + + SuccessOrExit(error = AppendSourceAddressTlv()); + error = AppendLeaderDataTlv(); + +exit: + return error; +} + +Error Mle::TxMessage::AppendActiveAndPendingTimestampTlvs(void) +{ + Error error; + + SuccessOrExit(error = AppendActiveTimestampTlv()); + error = AppendPendingTimestampTlv(); + +exit: + return error; +} + +//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// TxMessage - Misc + Error Mle::TxMessage::SendTo(const Ip6::Address &aDestination) { Error error = kErrorNone; diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp index 5b4fd44f0..6846fb6e1 100644 --- a/src/core/thread/mle.hpp +++ b/src/core/thread/mle.hpp @@ -1556,6 +1556,7 @@ private: class TxMessage : public Message { public: + // Appending single TLV Error AppendSourceAddressTlv(void); Error AppendModeTlv(DeviceMode aMode); Error AppendTimeoutTlv(uint32_t aTimeout); @@ -1563,7 +1564,6 @@ private: Error AppendResponseTlv(const RxChallenge &aResponse); Error AppendLinkFrameCounterTlv(void); Error AppendMleFrameCounterTlv(void); - Error AppendLinkAndMleFrameCounterTlvs(void); Error AppendAddress16Tlv(uint16_t aRloc16); Error AppendNetworkDataTlv(NetworkData::Type aType); Error AppendTlvRequestTlv(const uint8_t *aTlvs, uint8_t aTlvsLength); @@ -1578,7 +1578,6 @@ private: Error AppendXtalAccuracyTlv(void); Error AppendActiveTimestampTlv(void); Error AppendPendingTimestampTlv(void); - Error AppendActiveAndPendingTimestampTlvs(void); #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE Error AppendTimeRequestTlv(void); Error AppendTimeParameterTlv(void); @@ -1603,6 +1602,11 @@ private: return AppendTlvRequestTlv(aTlvArray, kArrayLength); } + // Appending multiple TLVs + Error AppendLinkAndMleFrameCounterTlvs(void); + Error AppendSourceAddressAndLeaderDataTlvs(void); + Error AppendActiveAndPendingTimestampTlvs(void); + Error SendTo(const Ip6::Address &aDestination); private: diff --git a/src/core/thread/mle_ftd.cpp b/src/core/thread/mle_ftd.cpp index 9d1c70534..dd999ec41 100644 --- a/src/core/thread/mle_ftd.cpp +++ b/src/core/thread/mle_ftd.cpp @@ -539,8 +539,7 @@ void Mle::SendAdvertisement(const Ip6::Address &aDestination) VerifyOrExit(!mAddressSolicitPending); VerifyOrExit((message = NewMleMessage(kCommandAdvertisement)) != nullptr, error = kErrorNoBufs); - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); switch (mRole) { @@ -588,8 +587,7 @@ void Mle::SendLinkRequest(Router *aRouter) break; case kRoleChild: - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); break; case kRoleRouter: @@ -603,8 +601,7 @@ void Mle::SendLinkRequest(Router *aRouter) SuccessOrExit(error = message->AppendTlvRequestTlv(kValidNeighborTlvs)); } - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); break; case kRoleDisabled: @@ -1800,8 +1797,7 @@ void Mle::SendParentResponse(const ParentResponseInfo &aInfo) VerifyOrExit((message = NewMleMessage(kCommandParentResponse)) != nullptr, error = kErrorNoBufs); message->SetDirectTransmission(); - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); SuccessOrExit(error = message->AppendLinkAndMleFrameCounterTlvs()); SuccessOrExit(error = message->AppendResponseTlv(aInfo.mRxChallenge)); #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE @@ -2886,8 +2882,7 @@ Error Mle::SendChildIdResponse(Child &aChild) TxMessage *message; VerifyOrExit((message = NewMleMessage(kCommandChildIdResponse)) != nullptr, error = kErrorNoBufs); - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); if ((aChild.GetRloc16() == 0) || !HasMatchingRouterIdWith(aChild.GetRloc16())) @@ -2975,8 +2970,7 @@ Error Mle::SendChildUpdateRequestToChild(Child &aChild) Get().RemoveMessagesForChild(aChild, IsMessageChildUpdateRequest); VerifyOrExit((message = NewMleMessage(kCommandChildUpdateRequest)) != nullptr, error = kErrorNoBufs); - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); SuccessOrExit(error = message->AppendNetworkDataTlv(aChild.GetNetworkDataType())); SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); @@ -3148,8 +3142,7 @@ void Mle::SendDataResponse(const Ip6::Address &aDestination, const TlvList &aTlv } VerifyOrExit((message = NewMleMessage(kCommandDataResponse)) != nullptr, error = kErrorNoBufs); - SuccessOrExit(error = message->AppendSourceAddressTlv()); - SuccessOrExit(error = message->AppendLeaderDataTlv()); + SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs()); SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); for (uint8_t tlvType : aTlvList)