diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index b55341f9b..26c6541e7 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -157,7 +157,12 @@ Error MleRouter::SetRouterEligible(bool aEligible) { Error error = kErrorNone; - VerifyOrExit(IsFullThreadDevice() || !aEligible, error = kErrorNotCapable); + if (!IsFullThreadDevice()) + { + VerifyOrExit(!aEligible, error = kErrorNotCapable); + } + + VerifyOrExit(aEligible != mRouterEligible); mRouterEligible = aEligible; @@ -168,6 +173,11 @@ Error MleRouter::SetRouterEligible(bool aEligible) break; case kRoleChild: + if (mRouterEligible) + { + mRouterRoleTransition.StartTimeout(); + } + Get().SetBeaconEnabled(mRouterEligible); break;