diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index b0b79c7fc..2b6e89a56 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -382,6 +382,7 @@ otError Mle::Restore(void) Get().SetCurrentKeySequence(networkInfo.mKeySequence); Get().SetMleFrameCounter(networkInfo.mMleFrameCounter); Get().SetMacFrameCounter(networkInfo.mMacFrameCounter); + mDeviceMode.Set(networkInfo.mDeviceMode); switch (networkInfo.mRole) { @@ -394,7 +395,6 @@ otError Mle::Restore(void) ExitNow(); } - mDeviceMode.Set(networkInfo.mDeviceMode); Get().SetShortAddress(networkInfo.mRloc16); Get().SetExtAddress(networkInfo.mExtAddress); @@ -458,7 +458,6 @@ otError Mle::Store(void) // avoid losing/overwriting previous information when a reboot // occurs after a message is sent but before attaching. - networkInfo.mDeviceMode = mDeviceMode.Get(); networkInfo.mRole = mRole; networkInfo.mRloc16 = GetRloc16(); networkInfo.mPreviousPartitionId = mLeaderData.GetPartitionId(); @@ -491,6 +490,7 @@ otError Mle::Store(void) networkInfo.mKeySequence = Get().GetCurrentKeySequence(); networkInfo.mMleFrameCounter = Get().GetMleFrameCounter() + OPENTHREAD_CONFIG_STORE_FRAME_COUNTER_AHEAD; networkInfo.mMacFrameCounter = Get().GetMacFrameCounter() + OPENTHREAD_CONFIG_STORE_FRAME_COUNTER_AHEAD; + networkInfo.mDeviceMode = mDeviceMode.Get(); SuccessOrExit(error = Get().SaveNetworkInfo(networkInfo)); @@ -842,6 +842,8 @@ otError Mle::SetDeviceMode(DeviceMode aDeviceMode) otLogNoteMle("Mode 0x%02x -> 0x%02x [%s]", oldMode.Get(), mDeviceMode.Get(), mDeviceMode.ToString().AsCString()); + Store(); + switch (mRole) { case OT_DEVICE_ROLE_DISABLED: