mirror of
https://github.com/espressif/openthread.git
synced 2026-10-02 22:07:36 +00:00
[mle] add API to configure the store frame counter ahead (#10576)
Currently the OPENTHREAD_CONFIG_STORE_FRAME_COUNTER_AHEAD is hard-coded in the OT core, yet sometimes it is desired to modify this value which requires re-building of the OT libraries and forces re-certification of the end product. Implement `otThreadSetStoreFrameCounterAhead` and `otThreadGetStoreFrameCounterAhead` to allow API clients to configure the store frame counter ahead parameter at run-time. This extension offloads product makers from the need of re-certification in case the store frame counter ahead must be tuned. Signed-off-by: Marcin Kajor <[email protected]>
This commit is contained in:
@@ -204,6 +204,7 @@ ot_option(OT_DNS_UPSTREAM_QUERY OPENTHREAD_CONFIG_DNS_UPSTREAM_QUERY_ENABLE "All
|
|||||||
ot_option(OT_DNSSD_DISCOVERY_PROXY OPENTHREAD_CONFIG_DNSSD_DISCOVERY_PROXY_ENABLE "DNS-SD discovery proxy")
|
ot_option(OT_DNSSD_DISCOVERY_PROXY OPENTHREAD_CONFIG_DNSSD_DISCOVERY_PROXY_ENABLE "DNS-SD discovery proxy")
|
||||||
ot_option(OT_DNSSD_SERVER OPENTHREAD_CONFIG_DNSSD_SERVER_ENABLE "DNS-SD server")
|
ot_option(OT_DNSSD_SERVER OPENTHREAD_CONFIG_DNSSD_SERVER_ENABLE "DNS-SD server")
|
||||||
ot_option(OT_DUA OPENTHREAD_CONFIG_DUA_ENABLE "Domain Unicast Address (DUA)")
|
ot_option(OT_DUA OPENTHREAD_CONFIG_DUA_ENABLE "Domain Unicast Address (DUA)")
|
||||||
|
ot_option(OT_DYNAMIC_STORE_FRAME_AHEAD_COUNTER OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE "dynamic store frame ahead counter")
|
||||||
ot_option(OT_ECDSA OPENTHREAD_CONFIG_ECDSA_ENABLE "ECDSA")
|
ot_option(OT_ECDSA OPENTHREAD_CONFIG_ECDSA_ENABLE "ECDSA")
|
||||||
ot_option(OT_EXTERNAL_HEAP OPENTHREAD_CONFIG_HEAP_EXTERNAL_ENABLE "external heap")
|
ot_option(OT_EXTERNAL_HEAP OPENTHREAD_CONFIG_HEAP_EXTERNAL_ENABLE "external heap")
|
||||||
ot_option(OT_FIREWALL OPENTHREAD_POSIX_CONFIG_FIREWALL_ENABLE "firewall")
|
ot_option(OT_FIREWALL OPENTHREAD_POSIX_CONFIG_FIREWALL_ENABLE "firewall")
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ extern "C" {
|
|||||||
* @note This number versions both OpenThread platform and user APIs.
|
* @note This number versions both OpenThread platform and user APIs.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define OPENTHREAD_API_VERSION (439)
|
#define OPENTHREAD_API_VERSION (440)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup api-instance
|
* @addtogroup api-instance
|
||||||
|
|||||||
@@ -1167,6 +1167,33 @@ otError otThreadDetachGracefully(otInstance *aInstance, otDetachGracefullyCallba
|
|||||||
*/
|
*/
|
||||||
void otConvertDurationInSecondsToString(uint32_t aDuration, char *aBuffer, uint16_t aSize);
|
void otConvertDurationInSecondsToString(uint32_t aDuration, char *aBuffer, uint16_t aSize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the store frame counter ahead.
|
||||||
|
*
|
||||||
|
* Requires `OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE` to be enabled.
|
||||||
|
*
|
||||||
|
* The OpenThread stack stores the MLE and MAC security frame counter values in non-volatile storage,
|
||||||
|
* ensuring they persist across device resets. These saved values are set to be ahead of their current
|
||||||
|
* values by the "frame counter ahead" value.
|
||||||
|
*
|
||||||
|
* @param[in] aInstance A pointer to an OpenThread instance.
|
||||||
|
* @param[in] aStoreFrameCounterAhead The store frame counter ahead to set.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void otThreadSetStoreFrameCounterAhead(otInstance *aInstance, uint32_t aStoreFrameCounterAhead);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the store frame counter ahead.
|
||||||
|
*
|
||||||
|
* Requires `OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE` to be enabled.
|
||||||
|
*
|
||||||
|
* @param[in] aInstance A pointer to an OpenThread instance.
|
||||||
|
*
|
||||||
|
* @returns The current store frame counter ahead.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
uint32_t otThreadGetStoreFrameCounterAhead(otInstance *aInstance);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -510,6 +510,18 @@ otError otThreadDetachGracefully(otInstance *aInstance, otDetachGracefullyCallba
|
|||||||
return AsCoreType(aInstance).Get<Mle::MleRouter>().DetachGracefully(aCallback, aContext);
|
return AsCoreType(aInstance).Get<Mle::MleRouter>().DetachGracefully(aCallback, aContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE
|
||||||
|
void otThreadSetStoreFrameCounterAhead(otInstance *aInstance, uint32_t aStoreFrameCounterAhead)
|
||||||
|
{
|
||||||
|
return AsCoreType(aInstance).Get<Mle::Mle>().SetStoreFrameCounterAhead(aStoreFrameCounterAhead);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t otThreadGetStoreFrameCounterAhead(otInstance *aInstance)
|
||||||
|
{
|
||||||
|
return AsCoreType(aInstance).Get<Mle::Mle>().GetStoreFrameCounterAhead();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // OPENTHREAD_FTD || OPENTHREAD_MTD
|
#endif // OPENTHREAD_FTD || OPENTHREAD_MTD
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_UPTIME_ENABLE
|
#if OPENTHREAD_CONFIG_UPTIME_ENABLE
|
||||||
|
|||||||
@@ -348,6 +348,16 @@
|
|||||||
#define OPENTHREAD_CONFIG_MLE_LINK_METRICS_SERIES_MTD 2
|
#define OPENTHREAD_CONFIG_MLE_LINK_METRICS_SERIES_MTD 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE
|
||||||
|
*
|
||||||
|
* Enable setting the store frame counter ahead.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE
|
||||||
|
#define OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ Mle::Mle(Instance &aInstance)
|
|||||||
, mAttachCounter(0)
|
, mAttachCounter(0)
|
||||||
, mAnnounceDelay(kAnnounceTimeout)
|
, mAnnounceDelay(kAnnounceTimeout)
|
||||||
, mAlternatePanId(Mac::kPanIdBroadcast)
|
, mAlternatePanId(Mac::kPanIdBroadcast)
|
||||||
|
, mStoreFrameCounterAhead(kDefaultStoreFrameCounterAhead)
|
||||||
, mTimeout(kDefaultChildTimeout)
|
, mTimeout(kDefaultChildTimeout)
|
||||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||||
, mCslTimeout(kDefaultCslTimeout)
|
, mCslTimeout(kDefaultCslTimeout)
|
||||||
@@ -501,8 +502,8 @@ Error Mle::Store(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
networkInfo.SetKeySequence(Get<KeyManager>().GetCurrentKeySequence());
|
networkInfo.SetKeySequence(Get<KeyManager>().GetCurrentKeySequence());
|
||||||
networkInfo.SetMleFrameCounter(Get<KeyManager>().GetMleFrameCounter() + kStoreFrameCounterAhead);
|
networkInfo.SetMleFrameCounter(Get<KeyManager>().GetMleFrameCounter() + mStoreFrameCounterAhead);
|
||||||
networkInfo.SetMacFrameCounter(Get<KeyManager>().GetMaximumMacFrameCounter() + kStoreFrameCounterAhead);
|
networkInfo.SetMacFrameCounter(Get<KeyManager>().GetMaximumMacFrameCounter() + mStoreFrameCounterAhead);
|
||||||
networkInfo.SetDeviceMode(mDeviceMode.Get());
|
networkInfo.SetDeviceMode(mDeviceMode.Get());
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Settings>().Save(networkInfo));
|
SuccessOrExit(error = Get<Settings>().Save(networkInfo));
|
||||||
|
|||||||
+28
-6
@@ -737,6 +737,27 @@ public:
|
|||||||
return (&aAddress == &mLinkLocalAllThreadNodes) || (&aAddress == &mRealmLocalAllThreadNodes);
|
return (&aAddress == &mLinkLocalAllThreadNodes) || (&aAddress == &mRealmLocalAllThreadNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE
|
||||||
|
/**
|
||||||
|
* Sets the store frame counter ahead.
|
||||||
|
*
|
||||||
|
* @param[in] aStoreFrameCounterAhead The store frame counter ahead to set.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void SetStoreFrameCounterAhead(uint32_t aStoreFrameCounterAhead)
|
||||||
|
{
|
||||||
|
mStoreFrameCounterAhead = aStoreFrameCounterAhead;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current store frame counter ahead.
|
||||||
|
*
|
||||||
|
* @returns The current store frame counter ahead.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
uint32_t GetStoreFrameCounterAhead(void) { return mStoreFrameCounterAhead; }
|
||||||
|
#endif // OPENTHREAD_CONFIG_DYNAMIC_STORE_FRAME_AHEAD_COUNTER_ENABLE
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||||
/**
|
/**
|
||||||
* Gets the CSL timeout.
|
* Gets the CSL timeout.
|
||||||
@@ -829,12 +850,12 @@ private:
|
|||||||
static constexpr uint8_t kMaxServiceAlocs = OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_MAX_ALOCS;
|
static constexpr uint8_t kMaxServiceAlocs = OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_MAX_ALOCS;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static constexpr uint8_t kMleHopLimit = 255;
|
static constexpr uint8_t kMleHopLimit = 255;
|
||||||
static constexpr uint8_t kMleSecurityTagSize = 4;
|
static constexpr uint8_t kMleSecurityTagSize = 4;
|
||||||
static constexpr uint32_t kStoreFrameCounterAhead = OPENTHREAD_CONFIG_STORE_FRAME_COUNTER_AHEAD;
|
static constexpr uint32_t kDefaultStoreFrameCounterAhead = OPENTHREAD_CONFIG_STORE_FRAME_COUNTER_AHEAD;
|
||||||
static constexpr uint8_t kMaxIpAddressesToRegister = OPENTHREAD_CONFIG_MLE_IP_ADDRS_TO_REGISTER;
|
static constexpr uint8_t kMaxIpAddressesToRegister = OPENTHREAD_CONFIG_MLE_IP_ADDRS_TO_REGISTER;
|
||||||
static constexpr uint32_t kDefaultChildTimeout = OPENTHREAD_CONFIG_MLE_CHILD_TIMEOUT_DEFAULT;
|
static constexpr uint32_t kDefaultChildTimeout = OPENTHREAD_CONFIG_MLE_CHILD_TIMEOUT_DEFAULT;
|
||||||
static constexpr uint32_t kDefaultCslTimeout = OPENTHREAD_CONFIG_CSL_TIMEOUT;
|
static constexpr uint32_t kDefaultCslTimeout = OPENTHREAD_CONFIG_CSL_TIMEOUT;
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Enumerations
|
// Enumerations
|
||||||
@@ -1431,6 +1452,7 @@ private:
|
|||||||
uint16_t mAttachCounter;
|
uint16_t mAttachCounter;
|
||||||
uint16_t mAnnounceDelay;
|
uint16_t mAnnounceDelay;
|
||||||
uint16_t mAlternatePanId;
|
uint16_t mAlternatePanId;
|
||||||
|
uint32_t mStoreFrameCounterAhead;
|
||||||
uint32_t mTimeout;
|
uint32_t mTimeout;
|
||||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||||
uint32_t mCslTimeout;
|
uint32_t mCslTimeout;
|
||||||
|
|||||||
Reference in New Issue
Block a user