From 47272e42700407d2f90782eaabac243cef9dcfa7 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Wed, 18 Oct 2023 10:44:50 -0700 Subject: [PATCH] [meshcop-leader] simplify adding `CommissioningData` (#9540) This commit contains smaller changes in` MeshCoP::Leader` class: - Changes `CommissioningData` to be a `private` type in this class - Adds `Init()` to `CommisioningData()` to init all sub-tlvs. --- src/core/meshcop/meshcop_leader.cpp | 36 +++++++++++++++---------- src/core/meshcop/meshcop_leader.hpp | 28 +++++++++---------- src/core/thread/network_data_leader.cpp | 2 +- src/core/thread/network_data_leader.hpp | 2 +- 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/src/core/meshcop/meshcop_leader.cpp b/src/core/meshcop/meshcop_leader.cpp index 08d99c6d6..922a1539e 100644 --- a/src/core/meshcop/meshcop_leader.cpp +++ b/src/core/meshcop/meshcop_leader.cpp @@ -87,18 +87,8 @@ template <> void Leader::HandleTmf(Coap::Message &aMessage, ResignCommissioner(); } - data.mBorderAgentLocator.Init(); - data.mBorderAgentLocator.SetBorderAgentLocator(aMessageInfo.GetPeerAddr().GetIid().GetLocator()); - - data.mCommissionerSessionId.Init(); - data.mCommissionerSessionId.SetCommissionerSessionId(++mSessionId); - - data.mSteeringData.Init(); - data.mSteeringData.SetLength(1); - data.mSteeringData.Clear(); - - SuccessOrExit( - Get().SetCommissioningData(reinterpret_cast(&data), data.GetLength())); + data.Init(aMessageInfo.GetPeerAddr().GetIid().GetLocator(), ++mSessionId); + SuccessOrExit(Get().SetCommissioningData(&data, data.GetLength())); mCommissionerId = commissionerId; @@ -263,8 +253,7 @@ void Leader::SetEmptyCommissionerData(void) sessionIdTlv.Init(); sessionIdTlv.SetCommissionerSessionId(++mSessionId); - IgnoreError(Get().SetCommissioningData(reinterpret_cast(&sessionIdTlv), - sizeof(Tlv) + sessionIdTlv.GetLength())); + IgnoreError(Get().SetCommissioningData(&sessionIdTlv, sizeof(CommissionerSessionIdTlv))); } void Leader::ResignCommissioner(void) @@ -275,6 +264,25 @@ void Leader::ResignCommissioner(void) LogInfo("commissioner inactive"); } +void Leader::CommissioningData::Init(uint16_t aBorderAgentRloc16, uint16_t aSessionId) +{ + mBorderAgentLocatorTlv.Init(); + mBorderAgentLocatorTlv.SetBorderAgentLocator(aBorderAgentRloc16); + + mSessionIdTlv.Init(); + mSessionIdTlv.SetCommissionerSessionId(aSessionId); + + mSteeringDataTlv.Init(); + mSteeringDataTlv.SetLength(1); + mSteeringDataTlv.Clear(); +} + +uint8_t Leader::CommissioningData::GetLength(void) const +{ + return static_cast(sizeof(BorderAgentLocatorTlv) + sizeof(CommissionerSessionIdTlv) + + mSteeringDataTlv.GetSize()); +} + } // namespace MeshCoP } // namespace ot diff --git a/src/core/meshcop/meshcop_leader.hpp b/src/core/meshcop/meshcop_leader.hpp index 7a78ff9f2..864771203 100644 --- a/src/core/meshcop/meshcop_leader.hpp +++ b/src/core/meshcop/meshcop_leader.hpp @@ -49,21 +49,6 @@ namespace ot { namespace MeshCoP { -OT_TOOL_PACKED_BEGIN -class CommissioningData -{ -public: - uint8_t GetLength(void) const - { - return sizeof(Tlv) + mBorderAgentLocator.GetLength() + sizeof(Tlv) + mCommissionerSessionId.GetLength() + - sizeof(Tlv) + mSteeringData.GetLength(); - } - - BorderAgentLocatorTlv mBorderAgentLocator; - CommissionerSessionIdTlv mCommissionerSessionId; - SteeringDataTlv mSteeringData; -} OT_TOOL_PACKED_END; - class Leader : public InstanceLocator, private NonCopyable { friend class Tmf::Agent; @@ -113,6 +98,19 @@ public: private: static constexpr uint32_t kTimeoutLeaderPetition = 50; // TIMEOUT_LEAD_PET (seconds) + OT_TOOL_PACKED_BEGIN + class CommissioningData + { + public: + void Init(uint16_t aBorderAgentRloc16, uint16_t aSessionId); + uint8_t GetLength(void) const; + + private: + BorderAgentLocatorTlv mBorderAgentLocatorTlv; + CommissionerSessionIdTlv mSessionIdTlv; + SteeringDataTlv mSteeringDataTlv; + } OT_TOOL_PACKED_END; + void HandleTimer(void); template void HandleTmf(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); diff --git a/src/core/thread/network_data_leader.cpp b/src/core/thread/network_data_leader.cpp index 752a0e5ab..707d25b1c 100644 --- a/src/core/thread/network_data_leader.cpp +++ b/src/core/thread/network_data_leader.cpp @@ -428,7 +428,7 @@ exit: return error; } -Error LeaderBase::SetCommissioningData(const uint8_t *aValue, uint8_t aValueLength) +Error LeaderBase::SetCommissioningData(const void *aValue, uint8_t aValueLength) { Error error = kErrorNone; CommissioningDataTlv *commissioningDataTlv; diff --git a/src/core/thread/network_data_leader.hpp b/src/core/thread/network_data_leader.hpp index a696b5588..bf25963b0 100644 --- a/src/core/thread/network_data_leader.hpp +++ b/src/core/thread/network_data_leader.hpp @@ -240,7 +240,7 @@ public: * @retval kErrorNoBufs Insufficient space to add the Commissioning Data. * */ - Error SetCommissioningData(const uint8_t *aValue, uint8_t aValueLength); + Error SetCommissioningData(const void *aValue, uint8_t aValueLength); /** * Checks if the steering data includes a Joiner.