diff --git a/src/core/thread/key_manager.cpp b/src/core/thread/key_manager.cpp index cc70c472c..062273ddc 100644 --- a/src/core/thread/key_manager.cpp +++ b/src/core/thread/key_manager.cpp @@ -162,11 +162,16 @@ void KeyManager::SetCurrentKeySequence(uint32_t aKeySequence) { VerifyOrExit(aKeySequence != mKeySequence, Get().SignalIfFirst(OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER)); - // Check if the guard timer has expired if key rotation is requested. - if ((aKeySequence == (mKeySequence + 1)) && (mKeySwitchGuardTime != 0) && mKeyRotationTimer.IsRunning() && - mKeySwitchGuardEnabled) + if ((aKeySequence == (mKeySequence + 1)) && mKeyRotationTimer.IsRunning()) { - VerifyOrExit(mHoursSinceKeyRotation >= mKeySwitchGuardTime); + if (mKeySwitchGuardEnabled) + { + // Check if the guard timer has expired if key rotation is requested. + VerifyOrExit(mHoursSinceKeyRotation >= mKeySwitchGuardTime); + StartKeyRotationTimer(); + } + + mKeySwitchGuardEnabled = true; } mKeySequence = aKeySequence; @@ -175,12 +180,6 @@ void KeyManager::SetCurrentKeySequence(uint32_t aKeySequence) mMacFrameCounter = 0; mMleFrameCounter = 0; - if (mKeyRotationTimer.IsRunning()) - { - mKeySwitchGuardEnabled = true; - StartKeyRotationTimer(); - } - Get().Signal(OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER); exit: