From ca738afc8f2ea7cab97db426ecb4e8c7e70fe4a8 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Wed, 31 Dec 2025 14:49:01 -0800 Subject: [PATCH] [core] use `Tlv::AppendTlv` helper to simplify TLV appends (#12252) This commit updates various modules to use the `Tlv::AppendTlv` helper method when appending a TLV with its value to a `Message`. --- src/core/meshcop/commissioner.cpp | 6 +---- src/core/thread/link_metrics.cpp | 7 +---- src/core/thread/link_metrics_tlvs.hpp | 31 ++++------------------- src/core/thread/mle.cpp | 8 ++---- src/core/thread/network_data_notifier.cpp | 8 ++---- 5 files changed, 11 insertions(+), 49 deletions(-) diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index f4deb4d8c..312dd5ea8 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -606,17 +606,13 @@ Error Commissioner::SendMgmtCommissionerGetRequest(const uint8_t *aTlvs, uint8_t Error error = kErrorNone; OwnedPtr message; Tmf::MessageInfo messageInfo(GetInstance()); - Tlv tlv; message.Reset(Get().NewPriorityConfirmablePostMessage(kUriCommissionerGet)); VerifyOrExit(message != nullptr, error = kErrorNoBufs); if (aLength > 0) { - tlv.SetType(Tlv::kGet); - tlv.SetLength(aLength); - SuccessOrExit(error = message->Append(tlv)); - SuccessOrExit(error = message->AppendBytes(aTlvs, aLength)); + SuccessOrExit(error = Tlv::AppendTlv(*message, Tlv::kGet, aTlvs, aLength)); } messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); diff --git a/src/core/thread/link_metrics.cpp b/src/core/thread/link_metrics.cpp index f362939ac..01fd3f192 100644 --- a/src/core/thread/link_metrics.cpp +++ b/src/core/thread/link_metrics.cpp @@ -99,12 +99,7 @@ Error Initiator::AppendLinkMetricsQueryTlv(Message &aMessage, const QueryInfo &a if (aInfo.mTypeIdCount != 0) { - QueryOptionsSubTlv queryOptionsTlv; - - queryOptionsTlv.Init(); - queryOptionsTlv.SetLength(aInfo.mTypeIdCount); - SuccessOrExit(error = aMessage.Append(queryOptionsTlv)); - SuccessOrExit(error = aMessage.AppendBytes(aInfo.mTypeIds, aInfo.mTypeIdCount)); + SuccessOrExit(error = Tlv::AppendTlv(aMessage, QueryOptionsSubTlv::kType, aInfo.mTypeIds, aInfo.mTypeIdCount)); } error = Tlv::EndTlv(aMessage, tlvBookmark); diff --git a/src/core/thread/link_metrics_tlvs.hpp b/src/core/thread/link_metrics_tlvs.hpp index 36cc0ee80..24a323b14 100644 --- a/src/core/thread/link_metrics_tlvs.hpp +++ b/src/core/thread/link_metrics_tlvs.hpp @@ -79,6 +79,11 @@ typedef UintTlvInfo QueryIdSubTlv; */ typedef UintTlvInfo StatusSubTlv; +/** + * Defines Query Option Sub-TLV constants and types. + */ +typedef TlvInfo QueryOptionsSubTlv; + /** * Implements Link Metrics Report Sub-TLV generation and parsing. */ @@ -160,32 +165,6 @@ private: } mMetricsValue; } OT_TOOL_PACKED_END; -/** - * Implements Link Metrics Query Options Sub-TLV generation and parsing. - */ -OT_TOOL_PACKED_BEGIN -class QueryOptionsSubTlv : public Tlv, public TlvInfo -{ -public: - /** - * Initializes the TLV. - */ - void Init(void) - { - SetType(SubTlv::kQueryOptions); - SetLength(0); - } - - /** - * Indicates whether or not the TLV appears to be well-formed. - * - * @retval TRUE If the TLV appears to be well-formed. - * @retval FALSE If the TLV does not appear to be well-formed. - */ - bool IsValid(void) const { return GetLength() >= sizeof(uint8_t); } - -} OT_TOOL_PACKED_END; - /** * Defines Link Metrics Forward Probing Registration Sub-TLV. */ diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 1a524a10e..f065593c7 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -3041,15 +3041,11 @@ Error Mle::SendLinkMetricsManagementRequest(const Ip6::Address &aDestination, co { Error error = kErrorNone; TxMessage *message = NewMleMessage(kCommandLinkMetricsManagementRequest); - Tlv tlv; VerifyOrExit(message != nullptr, error = kErrorNoBufs); - tlv.SetType(Tlv::kLinkMetricsManagement); - tlv.SetLength(static_cast(aSubTlv.GetSize())); - - SuccessOrExit(error = message->Append(tlv)); - SuccessOrExit(error = aSubTlv.AppendTo(*message)); + SuccessOrExit(error = Tlv::AppendTlv(*message, Tlv::kLinkMetricsManagement, &aSubTlv, + static_cast(aSubTlv.GetSize()))); error = message->SendTo(aDestination); diff --git a/src/core/thread/network_data_notifier.cpp b/src/core/thread/network_data_notifier.cpp index 0e3fdf929..b61cc9232 100644 --- a/src/core/thread/network_data_notifier.cpp +++ b/src/core/thread/network_data_notifier.cpp @@ -192,12 +192,8 @@ Error Notifier::SendServerDataNotification(uint16_t aOldRloc16, const NetworkDat if (aNetworkData != nullptr) { - ThreadTlv tlv; - - tlv.SetType(ThreadTlv::kThreadNetworkData); - tlv.SetLength(aNetworkData->GetLength()); - SuccessOrExit(error = message->Append(tlv)); - SuccessOrExit(error = message->AppendBytes(aNetworkData->GetBytes(), aNetworkData->GetLength())); + SuccessOrExit(error = Tlv::AppendTlv(*message, ThreadTlv::kThreadNetworkData, aNetworkData->GetBytes(), + aNetworkData->GetLength())); #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BORDER_ROUTER_SIGNAL_NETWORK_DATA_FULL Get().CheckForNetDataGettingFull(*aNetworkData, aOldRloc16);