diff --git a/src/core/common/instance.cpp b/src/core/common/instance.cpp index 2d5e62bc7..213749cf3 100644 --- a/src/core/common/instance.cpp +++ b/src/core/common/instance.cpp @@ -37,6 +37,7 @@ #include "common/logging.hpp" #include "common/new.hpp" +#include "radio/trel_link.hpp" #include "utils/heap.hpp" namespace ot { @@ -176,6 +177,10 @@ void Instance::AfterInit(void) Get().Init(); IgnoreError(Get().Restore()); +#if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE + Get().AfterInit(); +#endif + #endif // OPENTHREAD_MTD || OPENTHREAD_FTD #if OPENTHREAD_ENABLE_VENDOR_EXTENSION diff --git a/src/core/radio/trel_interface.cpp b/src/core/radio/trel_interface.cpp index 9e602ab54..b541b94fd 100644 --- a/src/core/radio/trel_interface.cpp +++ b/src/core/radio/trel_interface.cpp @@ -54,7 +54,7 @@ void Interface::Init(void) { Ip6::Address ip6Address; - VerifyOrExit(!mInitialized); + OT_ASSERT(!mInitialized); ip6Address.SetToLinkLocalAddress(Get().GetExtAddress()); otPlatTrelUdp6Init(&GetInstance(), &ip6Address, kUdpPort); @@ -63,9 +63,6 @@ void Interface::Init(void) otPlatTrelUdp6SubscribeMulticastAddress(&GetInstance(), &ip6Address); mInitialized = true; - -exit: - return; } void Interface::HandleExtAddressChange(void) diff --git a/src/core/radio/trel_link.cpp b/src/core/radio/trel_link.cpp index 5e6d1ca55..eb8e0c151 100644 --- a/src/core/radio/trel_link.cpp +++ b/src/core/radio/trel_link.cpp @@ -65,17 +65,14 @@ Link::Link(Instance &aInstance) mRxFrame.SetRadioType(Mac::kRadioTypeTrel); #endif - // `mTxTasklet` is used for initializing the interface (in addition - // to handling `Send()` requests). Invoking `Interface::Init()` from - // a tasklet ensures that it happens after the constructors for - // `Instance` and all its objects are done, allowing the interface - // to safely use any of the core object methods (e.g., get the - // randomly generated MAC address). - - mTxTasklet.Post(); mTimer.Start(kAckWaitWindow); } +void Link::AfterInit(void) +{ + mInterface.Init(); +} + void Link::Enable(void) { if (mState == kStateDisabled) @@ -120,11 +117,6 @@ void Link::HandleTxTasklet(Tasklet &aTasklet) void Link::HandleTxTasklet(void) { - if (!mInterface.IsInitialized()) - { - mInterface.Init(); - } - BeginTransmit(); } diff --git a/src/core/radio/trel_link.hpp b/src/core/radio/trel_link.hpp index c36f8fdef..15d183f68 100644 --- a/src/core/radio/trel_link.hpp +++ b/src/core/radio/trel_link.hpp @@ -166,6 +166,7 @@ private: kStateTransmit, }; + void AfterInit(void); void SetState(State aState); void BeginTransmit(void); void InvokeSendDone(Error aError) { InvokeSendDone(aError, nullptr); }