From ce1a751d62ef00b58d56dc1bf77a0fb6474540b9 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Wed, 19 Nov 2025 14:40:12 -0800 Subject: [PATCH] [dataset] move `DelayTimerMinimal` to `PendingDatasetManager` (#12162) This change relocates the `mDelayTimerMinimal` member and its associated accessor methods, `GetDelayTimerMinimal()` and `SetDelayTimerMinimal()`, from the `MeshCoP::Leader` class to the `PendingDatasetManager` class. This functionality is specific to the handling of the pending operational dataset. Placing it within `PendingDatasetManager` improves code structure and cohesion by grouping related parameters together. --- src/core/api/dataset_ftd_api.cpp | 4 ++-- src/core/meshcop/dataset_manager.cpp | 3 +++ src/core/meshcop/dataset_manager.hpp | 26 +++++++++++++++++++++++- src/core/meshcop/dataset_manager_ftd.cpp | 15 ++++++++++++-- src/core/meshcop/meshcop_leader.cpp | 12 ----------- src/core/meshcop/meshcop_leader.hpp | 18 ---------------- 6 files changed, 43 insertions(+), 35 deletions(-) diff --git a/src/core/api/dataset_ftd_api.cpp b/src/core/api/dataset_ftd_api.cpp index e299b9bdd..9cc350d8e 100644 --- a/src/core/api/dataset_ftd_api.cpp +++ b/src/core/api/dataset_ftd_api.cpp @@ -48,12 +48,12 @@ otError otDatasetCreateNewNetwork(otInstance *aInstance, otOperationalDataset *a uint32_t otDatasetGetDelayTimerMinimal(otInstance *aInstance) { - return AsCoreType(aInstance).Get().GetDelayTimerMinimal(); + return AsCoreType(aInstance).Get().GetDelayTimerMinimal(); } otError otDatasetSetDelayTimerMinimal(otInstance *aInstance, uint32_t aDelayTimerMinimal) { - return AsCoreType(aInstance).Get().SetDelayTimerMinimal(aDelayTimerMinimal); + return AsCoreType(aInstance).Get().SetDelayTimerMinimal(aDelayTimerMinimal); } #endif // OPENTHREAD_FTD diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 38aba5b48..de4901cf0 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -892,6 +892,9 @@ void ActiveDatasetManager::HandleTimer(Timer &aTimer) { aTimer.Get; DelayTimer mDelayTimer; +#if OPENTHREAD_FTD + uint32_t mDelayTimerMinimal; +#endif }; DeclareTmfHandler(PendingDatasetManager, kUriPendingGet); diff --git a/src/core/meshcop/dataset_manager_ftd.cpp b/src/core/meshcop/dataset_manager_ftd.cpp index 6c4c9de3c..b306614bb 100644 --- a/src/core/meshcop/dataset_manager_ftd.cpp +++ b/src/core/meshcop/dataset_manager_ftd.cpp @@ -178,7 +178,7 @@ Error DatasetManager::ProcessSetOrReplaceRequest(MgmtCommand aCommand, } else { - delayTimer = Max(delayTimer, Get().GetDelayTimerMinimal()); + delayTimer = Max(delayTimer, Get().GetDelayTimerMinimal()); } IgnoreError(aInfo.mDataset.Write(delayTimer)); @@ -393,6 +393,17 @@ exit: void PendingDatasetManager::StartLeader(void) { StartDelayTimer(); } +Error PendingDatasetManager::SetDelayTimerMinimal(uint32_t aDelayTimerMinimal) +{ + Error error = kErrorNone; + + VerifyOrExit((aDelayTimerMinimal != 0 && aDelayTimerMinimal < DelayTimerTlv::kMinDelay), error = kErrorInvalidArgs); + mDelayTimerMinimal = aDelayTimerMinimal; + +exit: + return error; +} + template <> void PendingDatasetManager::HandleTmf(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo) { @@ -411,7 +422,7 @@ void PendingDatasetManager::ApplyActiveDataset(Dataset &aDataset) SuccessOrExit(aDataset.Read(activeTimestamp)); SuccessOrExit(aDataset.Write(activeTimestamp)); - SuccessOrExit(aDataset.Write(Get().GetDelayTimerMinimal())); + SuccessOrExit(aDataset.Write(GetDelayTimerMinimal())); IgnoreError(DatasetManager::Save(aDataset)); StartDelayTimer(aDataset); diff --git a/src/core/meshcop/meshcop_leader.cpp b/src/core/meshcop/meshcop_leader.cpp index 301db843f..5f6e96e00 100644 --- a/src/core/meshcop/meshcop_leader.cpp +++ b/src/core/meshcop/meshcop_leader.cpp @@ -45,7 +45,6 @@ RegisterLogModule("MeshCoPLeader"); Leader::Leader(Instance &aInstance) : InstanceLocator(aInstance) , mTimer(aInstance) - , mDelayTimerMinimal(DelayTimerTlv::kMinDelay) , mSessionId(Random::NonCrypto::GetUint16()) { } @@ -201,17 +200,6 @@ exit: LogWarnOnError(error, "send dataset changed"); } -Error Leader::SetDelayTimerMinimal(uint32_t aDelayTimerMinimal) -{ - Error error = kErrorNone; - - VerifyOrExit((aDelayTimerMinimal != 0 && aDelayTimerMinimal < DelayTimerTlv::kMinDelay), error = kErrorInvalidArgs); - mDelayTimerMinimal = aDelayTimerMinimal; - -exit: - return error; -} - void Leader::HandleTimer(void) { VerifyOrExit(Get().IsLeader()); diff --git a/src/core/meshcop/meshcop_leader.hpp b/src/core/meshcop/meshcop_leader.hpp index 3574489fa..ad8172f62 100644 --- a/src/core/meshcop/meshcop_leader.hpp +++ b/src/core/meshcop/meshcop_leader.hpp @@ -75,23 +75,6 @@ public: */ void SendDatasetChanged(const Ip6::Address &aAddress); - /** - * Sets minimal delay timer. - * - * @param[in] aDelayTimerMinimal The value of minimal delay timer (in ms). - * - * @retval kErrorNone Successfully set the minimal delay timer. - * @retval kErrorInvalidArgs If @p aDelayTimerMinimal is not valid. - */ - Error SetDelayTimerMinimal(uint32_t aDelayTimerMinimal); - - /** - * Gets minimal delay timer. - * - * @retval the minimal delay timer (in ms). - */ - uint32_t GetDelayTimerMinimal(void) const { return mDelayTimerMinimal; } - /** * Sets empty Commissioner Data TLV in the Thread Network Data. */ @@ -132,7 +115,6 @@ private: using LeaderTimer = TimerMilliIn; LeaderTimer mTimer; - uint32_t mDelayTimerMinimal; CommissionerIdTlv::StringType mCommissionerId; uint16_t mSessionId; };