diff --git a/src/core/mac/mac.cpp b/src/core/mac/mac.cpp index e27f5533f..c8a71c5ac 100644 --- a/src/core/mac/mac.cpp +++ b/src/core/mac/mac.cpp @@ -766,6 +766,11 @@ ThreadError Mac::ProcessReceiveSecurity(Frame &aFrame, const Address &aSrcAddr, aFrame.SetSecurityValid(true); + if (keySequence > mKeyManager.GetCurrentKeySequence()) + { + mKeyManager.SetCurrentKeySequence(keySequence); + } + exit: if (error != kThreadError_None) diff --git a/src/core/thread/key_manager.cpp b/src/core/thread/key_manager.cpp index 4ca38d280..51c93db9a 100644 --- a/src/core/thread/key_manager.cpp +++ b/src/core/thread/key_manager.cpp @@ -104,13 +104,16 @@ uint32_t KeyManager::GetCurrentKeySequence() const void KeyManager::SetCurrentKeySequence(uint32_t aKeySequence) { - mKeySequence = aKeySequence; - ComputeKey(mKeySequence, mKey); + if (aKeySequence != mKeySequence) + { + mKeySequence = aKeySequence; + ComputeKey(mKeySequence, mKey); - mMacFrameCounter = 0; - mMleFrameCounter = 0; + mMacFrameCounter = 0; + mMleFrameCounter = 0; - mNetif.SetStateChangedFlags(OT_NET_KEY_SEQUENCE); + mNetif.SetStateChangedFlags(OT_NET_KEY_SEQUENCE); + } } const uint8_t *KeyManager::GetCurrentMacKey() const