From ba4b238a0029b4041f8f30ddfd812dd7b29cf97d Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Wed, 1 Aug 2018 10:33:03 -0500 Subject: [PATCH] [link-quality] explicitly clear link quality for new child/router (#2941) The child/router entries are generally cleared using `memset()` to avoid explicitly setting all fields to zero. As a result, it is necessary to explicitly clear the link quality state to properly initialize the last RSSI reading. The user-specific constructors are also removed. --- src/core/mac/mac.cpp | 3 +-- src/core/thread/link_quality.cpp | 12 +++++------- src/core/thread/link_quality.hpp | 17 ----------------- src/core/thread/mle_router.cpp | 1 + tests/unit/test_link_quality.cpp | 3 +++ 5 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/core/mac/mac.cpp b/src/core/mac/mac.cpp index ec6f791c0..21bc727c3 100644 --- a/src/core/mac/mac.cpp +++ b/src/core/mac/mac.cpp @@ -195,12 +195,11 @@ Mac::Mac(Instance &aInstance) , mTxFrame(static_cast(otPlatRadioGetTransmitBuffer(&aInstance))) , mOobFrame(NULL) , mKeyIdMode2FrameCounter(0) - , mCcaSuccessRateTracker() , mCcaSampleCount(0) , mEnabled(true) { GenerateExtAddress(&mExtAddress); - + mCcaSuccessRateTracker.Reset(); memset(&mCounters, 0, sizeof(otMacCounters)); otPlatRadioEnable(&GetInstance()); diff --git a/src/core/thread/link_quality.cpp b/src/core/thread/link_quality.cpp index 06675405c..c615b2c8c 100644 --- a/src/core/thread/link_quality.cpp +++ b/src/core/thread/link_quality.cpp @@ -140,18 +140,16 @@ exit: return string; } -LinkQualityInfo::LinkQualityInfo(void) - : mLastRss(OT_RADIO_RSSI_INVALID) -{ - mRssAverager.Reset(); - SetLinkQuality(0); -} - void LinkQualityInfo::Clear(void) { mRssAverager.Reset(); SetLinkQuality(0); mLastRss = OT_RADIO_RSSI_INVALID; + +#if OPENTHREAD_CONFIG_ENABLE_TX_ERROR_RATE_TRACKING + mFrameErrorRate.Reset(); + mMessageErrorRate.Reset(); +#endif } void LinkQualityInfo::AddRss(int8_t aNoiseFloor, int8_t aRss) diff --git a/src/core/thread/link_quality.hpp b/src/core/thread/link_quality.hpp index 0f905ed39..91a00c52d 100644 --- a/src/core/thread/link_quality.hpp +++ b/src/core/thread/link_quality.hpp @@ -67,17 +67,6 @@ public: kMaxRateValue = 0xffff, ///< Indicates value corresponding to maximum (failure/success) rate of 100%. }; - /** - * This constructor initializes a `SuccessRateTracker` instance. - * - * After initialization the tracker starts with success rate 100% (failure rate 0%). - * - */ - SuccessRateTracker(void) - : mFailureRate(0) - { - } - /** * This method resets the tracker to its initialized state, setting success rate to 100%. * @@ -241,12 +230,6 @@ public: */ typedef String InfoString; - /** - * This constructor initializes the object. - * - */ - LinkQualityInfo(void); - /** * This method clears the all the data in the object. * diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index cc7e9ac83..c93e466be 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -3504,6 +3504,7 @@ void MleRouter::RestoreChildren(void) memset(child, 0, sizeof(*child)); child->SetExtAddress(*static_cast(&childInfo.mExtAddress)); + child->GetLinkInfo().Clear(); child->SetRloc16(childInfo.mRloc16); child->SetTimeout(childInfo.mTimeout); child->SetDeviceMode(childInfo.mMode); diff --git a/tests/unit/test_link_quality.cpp b/tests/unit/test_link_quality.cpp index f9fa279e5..feeb73829 100644 --- a/tests/unit/test_link_quality.cpp +++ b/tests/unit/test_link_quality.cpp @@ -93,6 +93,7 @@ void TestLinkQualityData(RssTestData aRssData) size_t i; printf("- - - - - - - - - - - - - - - - - -\n"); + linkInfo.Clear(); min = kMinRssValue; max = kMaxRssValue; @@ -387,6 +388,8 @@ void TestSuccessRateTracker(void) printf("\nTesting SuccessRateTracker\n"); + rateTracker.Reset(); + VerifyOrQuit(rateTracker.GetSuccessRate() == kMaxRate, "SuccessRateTracker: Initial value incorrect"); VerifyOrQuit(rateTracker.GetFailureRate() == 0, "SuccessRateTracker: Initial value incorrect");