diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index a5d09473c..63f96a4ba 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -477,6 +477,11 @@ ThreadError Mle::BecomeChild(otMleAttachFilter aFilter) if (aFilter != kMleAttachBetterPartition) { memset(&mParent, 0, sizeof(mParent)); + + if (mDeviceMode & ModeTlv::kModeFFD) + { + mNetif.GetMle().StopAdvertiseTimer(); + } } if (aFilter == kMleAttachAnyPartition) diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index b53c8120d..75843721a 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -504,6 +504,11 @@ bool MleRouter::HandleAdvertiseTimer(void) return true; } +void MleRouter::StopAdvertiseTimer(void) +{ + mAdvertiseTimer.Stop(); +} + void MleRouter::ResetAdvertiseInterval(void) { VerifyOrExit(mDeviceState == kDeviceStateRouter || mDeviceState == kDeviceStateLeader,); diff --git a/src/core/thread/mle_router_ftd.hpp b/src/core/thread/mle_router_ftd.hpp index e3b9a866f..e71fb7f81 100644 --- a/src/core/thread/mle_router_ftd.hpp +++ b/src/core/thread/mle_router_ftd.hpp @@ -637,6 +637,7 @@ private: ThreadError HandleDiscoveryRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo); ThreadError ProcessRouteTlv(const RouteTlv &aRoute); + void StopAdvertiseTimer(void); void ResetAdvertiseInterval(void); ThreadError SendAddressSolicit(ThreadStatusTlv::Status aStatus); ThreadError SendAddressRelease(void); diff --git a/src/core/thread/mle_router_mtd.hpp b/src/core/thread/mle_router_mtd.hpp index a3aa09370..20606fcab 100644 --- a/src/core/thread/mle_router_mtd.hpp +++ b/src/core/thread/mle_router_mtd.hpp @@ -163,6 +163,7 @@ private: ThreadError HandleNetworkDataUpdateRouter(void) { return kThreadError_None; } ThreadError HandleDiscoveryRequest(const Message &, const Ip6::MessageInfo &) { return kThreadError_Drop; } + void StopAdvertiseTimer(void) { } ThreadError ProcessRouteTlv(const RouteTlv &aRoute) { (void)aRoute; return kThreadError_None; } };