From b4ac18a2734b5a3db70f7587a1a216d7edc235fb Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Mon, 15 Nov 2021 10:17:02 -0800 Subject: [PATCH] [dua] assume child does not have DUA if no space to store one (#7164) --- src/core/thread/mle_router.cpp | 43 ++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 9fa9709bd..f54f91599 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -2111,23 +2111,6 @@ Error MleRouter::UpdateChildAddresses(const Message &aMessage, uint16_t aOffset, address.Clear(); address.SetPrefix(context.mPrefix); address.SetIid(entry.GetIid()); - -#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_TMF_PROXY_DUA_ENABLE - if (Get().IsDomainUnicast(address)) - { - hasDua = true; - - if (oldDuaPtr != nullptr) - { - Get().UpdateChildDomainUnicastAddress( - aChild, oldDua != address ? ChildDuaState::kChanged : ChildDuaState::kUnchanged); - } - else - { - Get().UpdateChildDomainUnicastAddress(aChild, ChildDuaState::kAdded); - } - } -#endif } else { @@ -2152,11 +2135,37 @@ Error MleRouter::UpdateChildAddresses(const Message &aMessage, uint16_t aOffset, if (error == kErrorNone) { storedCount++; + +#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_TMF_PROXY_DUA_ENABLE + if (Get().IsDomainUnicast(address)) + { + hasDua = true; + + if (oldDuaPtr != nullptr) + { + Get().UpdateChildDomainUnicastAddress( + aChild, oldDua != address ? ChildDuaState::kChanged : ChildDuaState::kUnchanged); + } + else + { + Get().UpdateChildDomainUnicastAddress(aChild, ChildDuaState::kAdded); + } + } +#endif + otLogInfoMle("Child 0x%04x IPv6 address[%d]=%s", aChild.GetRloc16(), storedCount, address.ToString().AsCString()); } else { +#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_TMF_PROXY_DUA_ENABLE + if (Get().IsDomainUnicast(address)) + { + // if not able to store DUA, then assume child does not have one + hasDua = false; + } +#endif + otLogWarnMle("Error %s adding IPv6 address %s to child 0x%04x", ErrorToString(error), address.ToString().AsCString(), aChild.GetRloc16()); }