diff --git a/src/core/thread/dua_manager.cpp b/src/core/thread/dua_manager.cpp index f0e09e426..d8866663f 100644 --- a/src/core/thread/dua_manager.cpp +++ b/src/core/thread/dua_manager.cpp @@ -305,6 +305,19 @@ void DuaManager::HandleNotifierEvents(Events aEvents) { Mle::MleRouter &mle = Get(); +#if OPENTHREAD_CONFIG_DUA_ENABLE + if (aEvents.Contains(kEventThreadNetdataChanged)) + { + Lowpan::Context context; + // Remove a stale DUA address if any. + if (Get().HasUnicastAddress(Get().GetDomainUnicastAddress()) && + (Get().GetContext(Get().GetDomainUnicastAddress(), context) != kErrorNone)) + { + RemoveDomainUnicastAddress(); + } + } +#endif + VerifyOrExit(mle.IsAttached(), mDelay.mValue = 0); if (aEvents.Contains(kEventThreadRoleChanged)) diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 69c898124..5354c6cda 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -4599,10 +4599,9 @@ Error Mle::TxMessage::AppendAddressRegistrationTlv(AddressRegistrationMode aMode counter++; #if OPENTHREAD_CONFIG_DUA_ENABLE - if (Get().HasUnicastAddress(Get().GetDomainUnicastAddress())) + if (Get().HasUnicastAddress(Get().GetDomainUnicastAddress()) && + (Get().GetContext(Get().GetDomainUnicastAddress(), context) == kErrorNone)) { - SuccessOrAssert(Get().GetContext(Get().GetDomainUnicastAddress(), context)); - // Prioritize DUA, compressed entry entry.SetContextId(context.mContextId); entry.SetIid(Get().GetDomainUnicastAddress().GetIid());