diff --git a/include/openthread/thread.h b/include/openthread/thread.h index 260343d5d..648d2883d 100644 --- a/include/openthread/thread.h +++ b/include/openthread/thread.h @@ -730,6 +730,14 @@ otError otThreadSendDiagnosticReset(otInstance * aInstance, */ const otIpCounters *otThreadGetIp6Counters(otInstance *aInstance); +/** + * Reset the IPv6 counters. + * + * @param[in] aInstance A pointer to an OpenThread instance. + * + */ +void otThreadResetIp6Counters(otInstance *aInstance); + /** * Get the Thread MLE counters. * diff --git a/src/core/api/thread_api.cpp b/src/core/api/thread_api.cpp index 3359514c6..835cb5229 100644 --- a/src/core/api/thread_api.cpp +++ b/src/core/api/thread_api.cpp @@ -454,6 +454,13 @@ const otIpCounters *otThreadGetIp6Counters(otInstance *aInstance) return &instance.Get().GetCounters(); } +void otThreadResetIp6Counters(otInstance *aInstance) +{ + Instance &instance = *static_cast(aInstance); + + instance.Get().ResetCounters(); +} + const otMleCounters *otThreadGetMleCounters(otInstance *aInstance) { Instance &instance = *static_cast(aInstance); diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 6508103d5..15302c491 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -78,10 +78,7 @@ MeshForwarder::MeshForwarder(Instance &aInstance) { mFragTag = Random::NonCrypto::GetUint16(); - mIpCounters.mTxSuccess = 0; - mIpCounters.mRxSuccess = 0; - mIpCounters.mTxFailure = 0; - mIpCounters.mRxFailure = 0; + ResetCounters(); #if OPENTHREAD_FTD memset(mFragmentEntries, 0, sizeof(mFragmentEntries)); diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp index b81ee45b6..a412094bc 100644 --- a/src/core/thread/mesh_forwarder.hpp +++ b/src/core/thread/mesh_forwarder.hpp @@ -297,6 +297,12 @@ public: */ const otIpCounters &GetCounters(void) const { return mIpCounters; } + /** + * This method resets the IP level counters. + * + */ + void ResetCounters(void) { memset(&mIpCounters, 0, sizeof(mIpCounters)); } + #if OPENTHREAD_FTD /** * This method returns a reference to the resolving queue.