[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.
This commit is contained in:
Abtin Keshavarzian
2025-11-19 14:40:12 -08:00
committed by GitHub
parent 6acb3ff430
commit ce1a751d62
6 changed files with 43 additions and 35 deletions
+2 -2
View File
@@ -48,12 +48,12 @@ otError otDatasetCreateNewNetwork(otInstance *aInstance, otOperationalDataset *a
uint32_t otDatasetGetDelayTimerMinimal(otInstance *aInstance)
{
return AsCoreType(aInstance).Get<MeshCoP::Leader>().GetDelayTimerMinimal();
return AsCoreType(aInstance).Get<MeshCoP::PendingDatasetManager>().GetDelayTimerMinimal();
}
otError otDatasetSetDelayTimerMinimal(otInstance *aInstance, uint32_t aDelayTimerMinimal)
{
return AsCoreType(aInstance).Get<MeshCoP::Leader>().SetDelayTimerMinimal(aDelayTimerMinimal);
return AsCoreType(aInstance).Get<MeshCoP::PendingDatasetManager>().SetDelayTimerMinimal(aDelayTimerMinimal);
}
#endif // OPENTHREAD_FTD
+3
View File
@@ -892,6 +892,9 @@ void ActiveDatasetManager::HandleTimer(Timer &aTimer) { aTimer.Get<ActiveDataset
PendingDatasetManager::PendingDatasetManager(Instance &aInstance)
: DatasetManager(aInstance, Dataset::kPending, PendingDatasetManager::HandleTimer)
, mDelayTimer(aInstance)
#if OPENTHREAD_FTD
, mDelayTimerMinimal(DelayTimerTlv::kMinDelay)
#endif
{
}
+25 -1
View File
@@ -442,7 +442,28 @@ public:
* Starts the Leader functions for maintaining the Active Operational Dataset.
*/
void StartLeader(void);
#endif
/**
* Gets the minimal delay timer.
*
* @retval the minimal delay timer (in ms).
*/
uint32_t GetDelayTimerMinimal(void) const { return mDelayTimerMinimal; }
/**
* Sets the minimal delay timer value.
*
* This method is reserved for testing and demo purposes only. Changing this will render a production application
* non-compliant with the Thread Specification.
*
* @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. It is zero or it is larger than or equal to
* the default minimum value of `DelayTimerTlv::kMinDelay`.
*/
Error SetDelayTimerMinimal(uint32_t aDelayTimerMinimal);
#endif // OPENTHREAD_FTD
private:
#if OPENTHREAD_FTD
@@ -461,6 +482,9 @@ private:
using DelayTimer = TimerMilliIn<PendingDatasetManager, &PendingDatasetManager::HandleDelayTimer>;
DelayTimer mDelayTimer;
#if OPENTHREAD_FTD
uint32_t mDelayTimerMinimal;
#endif
};
DeclareTmfHandler(PendingDatasetManager, kUriPendingGet);
+13 -2
View File
@@ -178,7 +178,7 @@ Error DatasetManager::ProcessSetOrReplaceRequest(MgmtCommand aCommand,
}
else
{
delayTimer = Max(delayTimer, Get<Leader>().GetDelayTimerMinimal());
delayTimer = Max(delayTimer, Get<PendingDatasetManager>().GetDelayTimerMinimal());
}
IgnoreError(aInfo.mDataset.Write<DelayTimerTlv>(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<kUriPendingSet>(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
{
@@ -411,7 +422,7 @@ void PendingDatasetManager::ApplyActiveDataset(Dataset &aDataset)
SuccessOrExit(aDataset.Read<ActiveTimestampTlv>(activeTimestamp));
SuccessOrExit(aDataset.Write<PendingTimestampTlv>(activeTimestamp));
SuccessOrExit(aDataset.Write<DelayTimerTlv>(Get<Leader>().GetDelayTimerMinimal()));
SuccessOrExit(aDataset.Write<DelayTimerTlv>(GetDelayTimerMinimal()));
IgnoreError(DatasetManager::Save(aDataset));
StartDelayTimer(aDataset);
-12
View File
@@ -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<Mle::Mle>().IsLeader());
-18
View File
@@ -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<Leader, &Leader::HandleTimer>;
LeaderTimer mTimer;
uint32_t mDelayTimerMinimal;
CommissionerIdTlv::StringType mCommissionerId;
uint16_t mSessionId;
};