diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 82d112e23..cff7228df 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -327,7 +327,12 @@ void Mle::Restore(void) Get().SetCurrentKeySequence(networkInfo.GetKeySequence()); Get().SetMleFrameCounter(networkInfo.GetMleFrameCounter()); Get().SetAllMacFrameCounters(networkInfo.GetMacFrameCounter()); + +#if OPENTHREAD_MTD + mDeviceMode.Set(networkInfo.GetDeviceMode() & ~DeviceMode::kModeFullThreadDevice); +#else mDeviceMode.Set(networkInfo.GetDeviceMode()); +#endif // force re-attach when version mismatch. VerifyOrExit(networkInfo.GetVersion() == kThreadVersion); @@ -343,7 +348,12 @@ void Mle::Restore(void) ExitNow(); } - Get().SetShortAddress(networkInfo.GetRloc16()); +#if OPENTHREAD_MTD + if (!IsActiveRouter(networkInfo.GetRloc16())) +#endif + { + Get().SetShortAddress(networkInfo.GetRloc16()); + } Get().SetExtAddress(networkInfo.GetExtAddress()); mMeshLocal64.GetAddress().SetIid(networkInfo.GetMeshLocalIid()); @@ -755,6 +765,10 @@ Error Mle::SetDeviceMode(DeviceMode aDeviceMode) Error error = kErrorNone; DeviceMode oldMode = mDeviceMode; +#if OPENTHREAD_MTD + VerifyOrExit(!aDeviceMode.IsFullThreadDevice(), error = kErrorInvalidArgs); +#endif + VerifyOrExit(aDeviceMode.IsValid(), error = kErrorInvalidArgs); VerifyOrExit(mDeviceMode != aDeviceMode); mDeviceMode = aDeviceMode;