diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index c8acfe313..5c0a9353e 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -3558,15 +3558,10 @@ Error Mle::TxMessage::AppendAddress16Tlv(uint16_t aRloc16) { return Tlv::Append< Error Mle::TxMessage::AppendLeaderDataTlv(void) { - LeaderDataTlv leaderDataTlv; - Get().mLeaderData.SetDataVersion(Get().GetVersion(NetworkData::kFullSet)); Get().mLeaderData.SetStableDataVersion(Get().GetVersion(NetworkData::kStableSubset)); - leaderDataTlv.Init(); - leaderDataTlv.Set(Get().mLeaderData); - - return leaderDataTlv.AppendTo(*this); + return Tlv::Append(*this, LeaderDataTlvValue(Get().mLeaderData)); } Error Mle::TxMessage::AppendNetworkDataTlv(NetworkData::Type aType) @@ -4066,12 +4061,11 @@ exit: Error Mle::RxMessage::ReadLeaderDataTlv(LeaderData &aLeaderData) const { - Error error; - LeaderDataTlv leaderDataTlv; + Error error; + LeaderDataTlvValue tlvValue; - SuccessOrExit(error = Tlv::FindTlv(*this, leaderDataTlv)); - VerifyOrExit(leaderDataTlv.IsValid(), error = kErrorParse); - leaderDataTlv.Get(aLeaderData); + SuccessOrExit(error = Tlv::Find(*this, tlvValue)); + tlvValue.Get(aLeaderData); exit: return error; diff --git a/src/core/thread/mle_tlvs.cpp b/src/core/thread/mle_tlvs.cpp index 050e145a6..bd07d0484 100644 --- a/src/core/thread/mle_tlvs.cpp +++ b/src/core/thread/mle_tlvs.cpp @@ -137,5 +137,23 @@ exit: return isValid; } +LeaderDataTlvValue::LeaderDataTlvValue(const LeaderData &aLeaderData) + : mPartitionId(BigEndian::HostSwap32(aLeaderData.GetPartitionId())) + , mWeighting(aLeaderData.GetWeighting()) + , mDataVersion(aLeaderData.GetDataVersion(NetworkData::kFullSet)) + , mStableDataVersion(aLeaderData.GetDataVersion(NetworkData::kStableSubset)) + , mLeaderRouterId(aLeaderData.GetLeaderRouterId()) +{ +} + +void LeaderDataTlvValue::Get(LeaderData &aLeaderData) const +{ + aLeaderData.SetPartitionId(BigEndian::HostSwap32(mPartitionId)); + aLeaderData.SetWeighting(mWeighting); + aLeaderData.SetDataVersion(mDataVersion); + aLeaderData.SetStableDataVersion(mStableDataVersion); + aLeaderData.SetLeaderRouterId(mLeaderRouterId); +} + } // namespace Mle } // namespace ot diff --git a/src/core/thread/mle_tlvs.hpp b/src/core/thread/mle_tlvs.hpp index 7491c0876..353f21ade 100644 --- a/src/core/thread/mle_tlvs.hpp +++ b/src/core/thread/mle_tlvs.hpp @@ -584,56 +584,30 @@ private: #endif // OPENTHREAD_CONFIG_MLE_LONG_ROUTES_ENABLE /** - * Implements Leader Data TLV generation and parsing. + * Represents Leader Data TLV value. */ OT_TOOL_PACKED_BEGIN -class LeaderDataTlv : public Tlv, public TlvInfo +class LeaderDataTlvValue { public: /** - * Initializes the TLV. + * Default constructor. */ - void Init(void) - { - SetType(kLeaderData); - SetLength(sizeof(*this) - sizeof(Tlv)); - } + LeaderDataTlvValue(void) = default; /** - * Indicates whether or not the TLV appears to be well-formed. + * Initializes the `LeaderDataTlvValue` from a given `LeaderData`. * - * @retval TRUE If the TLV appears to be well-formed. - * @retval FALSE If the TLV does not appear to be well-formed. + * @param[in] aLeaderData The `LeaderData` info to use for initialization. */ - bool IsValid(void) const { return GetLength() >= sizeof(*this) - sizeof(Tlv); } + explicit LeaderDataTlvValue(const LeaderData &aLeaderData); /** - * Gets the Leader Data info from TLV. + * Gets the Leader Data info from TLV value. * * @param[out] aLeaderData A reference to output Leader Data info. */ - void Get(LeaderData &aLeaderData) const - { - aLeaderData.SetPartitionId(BigEndian::HostSwap32(mPartitionId)); - aLeaderData.SetWeighting(mWeighting); - aLeaderData.SetDataVersion(mDataVersion); - aLeaderData.SetStableDataVersion(mStableDataVersion); - aLeaderData.SetLeaderRouterId(mLeaderRouterId); - } - - /** - * Sets the Leader Data. - * - * @param[in] aLeaderData A Leader Data. - */ - void Set(const LeaderData &aLeaderData) - { - mPartitionId = BigEndian::HostSwap32(aLeaderData.GetPartitionId()); - mWeighting = aLeaderData.GetWeighting(); - mDataVersion = aLeaderData.GetDataVersion(NetworkData::kFullSet); - mStableDataVersion = aLeaderData.GetDataVersion(NetworkData::kStableSubset); - mLeaderRouterId = aLeaderData.GetLeaderRouterId(); - } + void Get(LeaderData &aLeaderData) const; private: uint32_t mPartitionId; @@ -643,6 +617,11 @@ private: uint8_t mLeaderRouterId; } OT_TOOL_PACKED_END; +/** + * Defines Leader Data TLV constants and types. + */ +typedef SimpleTlvInfo LeaderDataTlv; + /** * Implements Scan Mask TLV generation and parsing. */ diff --git a/src/core/thread/network_diagnostic.cpp b/src/core/thread/network_diagnostic.cpp index 114447b8b..6cb4a7994 100644 --- a/src/core/thread/network_diagnostic.cpp +++ b/src/core/thread/network_diagnostic.cpp @@ -473,14 +473,8 @@ Error Server::AppendDiagTlv(uint8_t aTlvType, Message &aMessage) break; case Tlv::kLeaderData: - { - LeaderDataTlv tlv; - - tlv.Init(); - tlv.Set(Get().GetLeaderData()); - error = tlv.AppendTo(aMessage); + error = Tlv::Append(aMessage, LeaderDataTlvValue(Get().GetLeaderData())); break; - } case Tlv::kNetworkData: error = Tlv::Append(aMessage, Get().GetBytes(), @@ -1351,12 +1345,10 @@ Error Client::GetNextDiagTlv(const Coap::Message &aMessage, Iterator &aIterator, case Tlv::kLeaderData: { - LeaderDataTlv leaderDataTlv; + LeaderDataTlvValue tlvValue; - VerifyOrExit(!tlv.IsExtended(), error = kErrorParse); - SuccessOrExit(error = aMessage.Read(offset, leaderDataTlv)); - VerifyOrExit(leaderDataTlv.IsValid(), error = kErrorParse); - leaderDataTlv.Get(AsCoreType(&aTlvInfo.mData.mLeaderData)); + SuccessOrExit(error = Tlv::Read(aMessage, offset, tlvValue)); + tlvValue.Get(AsCoreType(&aTlvInfo.mData.mLeaderData)); break; } diff --git a/src/core/thread/network_diagnostic_tlvs.hpp b/src/core/thread/network_diagnostic_tlvs.hpp index 92c042f4e..95b8b494e 100644 --- a/src/core/thread/network_diagnostic_tlvs.hpp +++ b/src/core/thread/network_diagnostic_tlvs.hpp @@ -336,23 +336,14 @@ public: } OT_TOOL_PACKED_END; /** - * Implements Leader Data TLV generation and parsing. + * Represents a Leader Data TLV value. */ -OT_TOOL_PACKED_BEGIN -class LeaderDataTlv : public Mle::LeaderDataTlv -{ -public: - static constexpr uint8_t kType = ot::NetworkDiagnostic::Tlv::kLeaderData; ///< The TLV Type value. +typedef Mle::LeaderDataTlvValue LeaderDataTlvValue; - /** - * Initializes the TLV. - */ - void Init(void) - { - Mle::LeaderDataTlv::Init(); - ot::Tlv::SetType(kType); - } -} OT_TOOL_PACKED_END; +/** + * Defines Leader Data TLV constants and types. + */ +typedef SimpleTlvInfo LeaderDataTlv; /** * Implements Mac Counters TLV generation and parsing.