From 5127e7e5c0fc1918f062baa5b869e9c99e013636 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Mon, 17 Jun 2024 09:23:43 -0700 Subject: [PATCH] [mle] enhance RLOC and ALOC address generation (#10391) This commit enhances the generation of RLOC and ALOC addresses in the `Mle` class. Methods retrieving RLOC/ALOC addresses no longer return an `Error` and are now `void`. The previous check for a valid `GetRloc16()` value, which returned `kErrorDetach` if unset, is removed because this scenario only occurred before the device's initial attachment. Post-attachment, the RLOC16 remains valid even if the device is detached. This change simplifies the code since RLOC/ALOC address retrieval happens after the initial attachment. Additional enhancements include: - Changing the input parameter order in `GetCommissionerAloc()` to match `GetServiceAloc()`. - Using `Ip6::Address::SetToRoutingLocator()` to construct RLOC addresses, harmonizing address generation and improving code readability. --- src/core/api/thread_api.cpp | 16 +++++++- src/core/meshcop/border_agent.cpp | 4 +- src/core/meshcop/commissioner.cpp | 10 ++--- src/core/meshcop/dataset_manager.cpp | 4 +- src/core/meshcop/dataset_manager_ftd.cpp | 2 +- src/core/net/nd_agent.cpp | 4 +- src/core/thread/address_resolver.cpp | 2 +- src/core/thread/dua_manager.cpp | 2 +- src/core/thread/mesh_forwarder_ftd.cpp | 3 +- src/core/thread/mle.cpp | 34 ++++------------- src/core/thread/mle.hpp | 45 +++++------------------ src/core/thread/mle_router.cpp | 6 +-- src/core/thread/mlr_manager.cpp | 2 +- src/core/thread/network_data_notifier.cpp | 2 +- src/core/thread/network_data_service.cpp | 5 ++- src/core/thread/tmf.cpp | 11 +++--- src/core/thread/tmf.hpp | 12 ++---- src/core/utils/mesh_diag.cpp | 6 +-- 18 files changed, 63 insertions(+), 107 deletions(-) diff --git a/src/core/api/thread_api.cpp b/src/core/api/thread_api.cpp index 5d41308d6..91ac5f318 100644 --- a/src/core/api/thread_api.cpp +++ b/src/core/api/thread_api.cpp @@ -79,7 +79,13 @@ exit: otError otThreadGetLeaderRloc(otInstance *aInstance, otIp6Address *aLeaderRloc) { - return AsCoreType(aInstance).Get().GetLeaderAddress(AsCoreType(aLeaderRloc)); + Error error = kErrorNone; + + VerifyOrExit(AsCoreType(aInstance).Get().GetRloc16() != Mac::kShortAddrInvalid, error = kErrorDetached); + AsCoreType(aInstance).Get().GetLeaderRloc(AsCoreType(aLeaderRloc)); + +exit: + return error; } otLinkModeConfig otThreadGetLinkMode(otInstance *aInstance) @@ -189,7 +195,13 @@ const otIp6Address *otThreadGetRealmLocalAllThreadNodesMulticastAddress(otInstan otError otThreadGetServiceAloc(otInstance *aInstance, uint8_t aServiceId, otIp6Address *aServiceAloc) { - return AsCoreType(aInstance).Get().GetServiceAloc(aServiceId, AsCoreType(aServiceAloc)); + Error error = kErrorNone; + + VerifyOrExit(AsCoreType(aInstance).Get().GetRloc16() != Mac::kShortAddrInvalid, error = kErrorDetached); + AsCoreType(aInstance).Get().GetServiceAloc(aServiceId, AsCoreType(aServiceAloc)); + +exit: + return error; } const char *otThreadGetNetworkName(otInstance *aInstance) diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 24e7331d8..ef82c3965 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -200,7 +200,7 @@ void BorderAgent::HandleCoapResponse(const ForwardContext &aForwardContext, SuccessOrExit(error = Tlv::Find(*aResponse, sessionId)); - IgnoreError(Get().GetCommissionerAloc(mCommissionerAloc.GetAddress(), sessionId)); + Get().GetCommissionerAloc(sessionId, mCommissionerAloc.GetAddress()); Get().AddUnicastAddress(mCommissionerAloc); IgnoreError(Get().AddReceiver(mUdpReceiver)); @@ -561,7 +561,7 @@ Error BorderAgent::ForwardToLeader(const Coap::Message &aMessage, const Ip6::Mes SuccessOrExit(error = message->AppendBytesFromMessage(aMessage, aMessage.GetOffset(), aMessage.GetLength() - aMessage.GetOffset())); - SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); messageInfo.SetSockPortToTmf(); SuccessOrExit(error = diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index 0068e32c8..c3987e82c 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -639,7 +639,7 @@ Error Commissioner::SendMgmtCommissionerGetRequest(const uint8_t *aTlvs, uint8_t SuccessOrExit(error = message->AppendBytes(aTlvs, aLength)); } - SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, Commissioner::HandleMgmtCommissionerGetResponse, this)); @@ -710,7 +710,7 @@ Error Commissioner::SendMgmtCommissionerSetRequest(const CommissioningDataset &a SuccessOrExit(error = message->AppendBytes(aTlvs, aLength)); } - SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, Commissioner::HandleMgmtCommissionerSetResponse, this)); @@ -763,7 +763,7 @@ Error Commissioner::SendPetition(void) SuccessOrExit(error = Tlv::Append(*message, mCommissionerId)); - SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); SuccessOrExit( error = Get().SendMessage(*message, messageInfo, Commissioner::HandleLeaderPetitionResponse, this)); @@ -811,7 +811,7 @@ void Commissioner::HandleLeaderPetitionResponse(Coap::Message *aMessage ExitNow(); } - IgnoreError(Get().GetCommissionerAloc(mCommissionerAloc.GetAddress(), mSessionId)); + Get().GetCommissionerAloc(mSessionId, mCommissionerAloc.GetAddress()); Get().AddUnicastAddress(mCommissionerAloc); SetState(kStateActive); @@ -850,7 +850,7 @@ void Commissioner::SendKeepAlive(uint16_t aSessionId) SuccessOrExit(error = Tlv::Append(*message, aSessionId)); - SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, Commissioner::HandleLeaderKeepAliveResponse, this)); diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index c55e03c39..8038af1fb 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -483,7 +483,7 @@ Error DatasetManager::SendSetRequest(const Dataset &aDataset) VerifyOrExit(message != nullptr, error = kErrorNoBufs); SuccessOrExit(error = message->AppendBytes(aDataset.GetBytes(), aDataset.GetLength())); - IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, HandleMgmtSetResponse, this)); mMgmtPending = true; @@ -708,7 +708,7 @@ Error DatasetManager::SendGetRequest(const Dataset::Components &aDatasetComponen SuccessOrExit(error = Tlv::AppendTlv(*message, Tlv::kGet, tlvList.GetArrayBuffer(), tlvList.GetLength())); } - IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); if (aAddress != nullptr) { diff --git a/src/core/meshcop/dataset_manager_ftd.cpp b/src/core/meshcop/dataset_manager_ftd.cpp index 927d24543..956a5fa58 100644 --- a/src/core/meshcop/dataset_manager_ftd.cpp +++ b/src/core/meshcop/dataset_manager_ftd.cpp @@ -241,7 +241,7 @@ Error DatasetManager::HandleSetOrReplace(MgmtCommand aCommand, Ip6::Address destination; SuccessOrExit(Get().FindCommissioningSessionId(localSessionId)); - SuccessOrExit(Get().GetCommissionerAloc(destination, localSessionId)); + Get().GetCommissionerAloc(localSessionId, destination); Get().SendDatasetChanged(destination); } diff --git a/src/core/net/nd_agent.cpp b/src/core/net/nd_agent.cpp index e05dd283f..1af8b58c5 100644 --- a/src/core/net/nd_agent.cpp +++ b/src/core/net/nd_agent.cpp @@ -101,10 +101,10 @@ void Agent::UpdateService(void) if (error == kErrorNone) { - uint16_t rloc = Mle::kAloc16NeighborDiscoveryAgentStart + lowpanContext.mContextId - 1; + uint16_t aloc16 = Mle::kAloc16NeighborDiscoveryAgentStart + lowpanContext.mContextId - 1; mAloc.InitAsThreadOrigin(); - mAloc.GetAddress().SetToAnycastLocator(Get().GetMeshLocalPrefix(), rloc); + mAloc.GetAddress().SetToAnycastLocator(Get().GetMeshLocalPrefix(), aloc16); mAloc.mMeshLocal = true; Get().AddUnicastAddress(mAloc); ExitNow(); diff --git a/src/core/thread/address_resolver.cpp b/src/core/thread/address_resolver.cpp index 6fedd1568..db0390386 100644 --- a/src/core/thread/address_resolver.cpp +++ b/src/core/thread/address_resolver.cpp @@ -822,7 +822,7 @@ void AddressResolver::HandleTmf(Coap::Message &aMessage, const if (child.RemoveIp6Address(target) == kErrorNone) { - SuccessOrExit(error = Get().GetLocatorAddress(destination, child.GetRloc16())); + destination.SetToRoutingLocator(Get().GetMeshLocalPrefix(), child.GetRloc16()); SendAddressError(target, meshLocalIid, &destination); ExitNow(); diff --git a/src/core/thread/dua_manager.cpp b/src/core/thread/dua_manager.cpp index 3f1ce2de1..808ed9250 100644 --- a/src/core/thread/dua_manager.cpp +++ b/src/core/thread/dua_manager.cpp @@ -512,7 +512,7 @@ void DuaManager::PerformNextRegistration(void) uint8_t pbbrServiceId; SuccessOrExit(error = Get().GetServiceId(pbbrServiceId)); - SuccessOrExit(error = mle.GetServiceAloc(pbbrServiceId, messageInfo.GetPeerAddr())); + mle.GetServiceAloc(pbbrServiceId, messageInfo.GetPeerAddr()); } else { diff --git a/src/core/thread/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp index 387fe2426..2daae86b5 100644 --- a/src/core/thread/mesh_forwarder_ftd.cpp +++ b/src/core/thread/mesh_forwarder_ftd.cpp @@ -654,8 +654,7 @@ void MeshForwarder::SendDestinationUnreachable(uint16_t aMeshSource, const Ip6:: { Ip6::MessageInfo messageInfo; - messageInfo.GetPeerAddr() = Get().GetMeshLocalRloc(); - messageInfo.GetPeerAddr().GetIid().SetLocator(aMeshSource); + messageInfo.GetPeerAddr().SetToRoutingLocator(Get().GetMeshLocalPrefix(), aMeshSource); IgnoreError(Get().SendError(Ip6::Icmp::Header::kTypeDstUnreach, Ip6::Icmp::Header::kCodeDstUnreachNoRoute, messageInfo, aIp6Headers)); diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index a5d136b78..57b1beff9 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -998,40 +998,21 @@ void Mle::SetLeaderData(uint32_t aPartitionId, uint8_t aWeighting, uint8_t aLead mLeaderData.SetLeaderRouterId(aLeaderRouterId); } -Error Mle::GetLeaderAddress(Ip6::Address &aAddress) const +void Mle::GetLeaderRloc(Ip6::Address &aAddress) const { - Error error = kErrorNone; - - VerifyOrExit(GetRloc16() != Mac::kShortAddrInvalid, error = kErrorDetached); - aAddress.SetToRoutingLocator(mMeshLocalPrefix, GetLeaderRloc16()); - -exit: - return error; } -Error Mle::GetLocatorAddress(Ip6::Address &aAddress, uint16_t aLocator) const +void Mle::GetLeaderAloc(Ip6::Address &aAddress) const { aAddress.SetToAnycastLocator(mMeshLocalPrefix, kAloc16Leader); } + +void Mle::GetCommissionerAloc(uint16_t aSessionId, Ip6::Address &aAddress) const { - Error error = kErrorNone; - - VerifyOrExit(GetRloc16() != Mac::kShortAddrInvalid, error = kErrorDetached); - - memcpy(&aAddress, &mMeshLocalRloc.GetAddress(), 14); - aAddress.GetIid().SetLocator(aLocator); - -exit: - return error; + aAddress.SetToAnycastLocator(mMeshLocalPrefix, CommissionerAloc16FromId(aSessionId)); } -Error Mle::GetServiceAloc(uint8_t aServiceId, Ip6::Address &aAddress) const +void Mle::GetServiceAloc(uint8_t aServiceId, Ip6::Address &aAddress) const { - Error error = kErrorNone; - - VerifyOrExit(GetRloc16() != Mac::kShortAddrInvalid, error = kErrorDetached); aAddress.SetToAnycastLocator(mMeshLocalPrefix, ServiceAlocFromId(aServiceId)); - -exit: - return error; } const LeaderData &Mle::GetLeaderData(void) @@ -3884,8 +3865,7 @@ void Mle::InformPreviousParent(void) SuccessOrExit(error = message->SetLength(0)); messageInfo.SetSockAddr(GetMeshLocalEid()); - messageInfo.SetPeerAddr(GetMeshLocalRloc()); - messageInfo.GetPeerAddr().GetIid().SetLocator(mPreviousParentRloc); + messageInfo.GetPeerAddr().SetToRoutingLocator(mMeshLocalPrefix, mPreviousParentRloc); SuccessOrExit(error = Get().SendDatagram(*message, messageInfo, Ip6::kProtoNone)); diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp index e2ba6159b..d920e95fa 100644 --- a/src/core/thread/mle.hpp +++ b/src/core/thread/mle.hpp @@ -558,51 +558,36 @@ public: /** * Retrieves the Leader's RLOC. * - * @param[out] aAddress A reference to the Leader's RLOC. - * - * @retval kErrorNone Successfully retrieved the Leader's RLOC. - * @retval kErrorDetached The Thread interface is not currently attached to a Thread Partition. + * @param[out] aAddress A reference to an address to return the Leader's RLOC. * */ - Error GetLeaderAddress(Ip6::Address &aAddress) const; + void GetLeaderRloc(Ip6::Address &aAddress) const; /** * Retrieves the Leader's ALOC. * - * @param[out] aAddress A reference to the Leader's ALOC. - * - * @retval kErrorNone Successfully retrieved the Leader's ALOC. - * @retval kErrorDetached The Thread interface is not currently attached to a Thread Partition. + * @param[out] aAddress A reference to an address to return the Leader's ALOC. * */ - Error GetLeaderAloc(Ip6::Address &aAddress) const { return GetLocatorAddress(aAddress, kAloc16Leader); } + void GetLeaderAloc(Ip6::Address &aAddress) const; /** - * Computes the Commissioner's ALOC. + * Retrieves the Commissioner's ALOC for a given session ID. * - * @param[out] aAddress A reference to the Commissioner's ALOC. * @param[in] aSessionId Commissioner session id. - * - * @retval kErrorNone Successfully retrieved the Commissioner's ALOC. - * @retval kErrorDetached The Thread interface is not currently attached to a Thread Partition. + * @param[out] aAddress A reference to an address to return the Commissioner's ALOC. * */ - Error GetCommissionerAloc(Ip6::Address &aAddress, uint16_t aSessionId) const - { - return GetLocatorAddress(aAddress, CommissionerAloc16FromId(aSessionId)); - } + void GetCommissionerAloc(uint16_t aSessionId, Ip6::Address &aAddress) const; /** * Retrieves the Service ALOC for given Service ID. * * @param[in] aServiceId Service ID to get ALOC for. - * @param[out] aAddress A reference to the Service ALOC. - * - * @retval kErrorNone Successfully retrieved the Service ALOC. - * @retval kErrorDetached The Thread interface is not currently attached to a Thread Partition. + * @param[out] aAddress A reference to an address to return the Service ALOC. * */ - Error GetServiceAloc(uint8_t aServiceId, Ip6::Address &aAddress) const; + void GetServiceAloc(uint8_t aServiceId, Ip6::Address &aAddress) const; /** * Returns the most recently received Leader Data. @@ -677,18 +662,6 @@ public: */ void RequestShorterChildIdRequest(void); - /** - * Gets the RLOC or ALOC of a given RLOC16 or ALOC16. - * - * @param[out] aAddress A reference to the RLOC or ALOC. - * @param[in] aLocator RLOC16 or ALOC16. - * - * @retval kErrorNone If got the RLOC or ALOC successfully. - * @retval kErrorDetached If device is detached. - * - */ - Error GetLocatorAddress(Ip6::Address &aAddress, uint16_t aLocator) const; - /** * Schedules a Child Update Request. * diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index bfef47222..615b6a308 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -450,7 +450,7 @@ void MleRouter::SetStateRouterOrLeader(DeviceRole aRole, uint16_t aRloc16, Leade if (aRole == kRoleLeader) { - IgnoreError(GetLeaderAloc(mLeaderAloc.GetAddress())); + GetLeaderAloc(mLeaderAloc.GetAddress()); Get().AddUnicastAddress(mLeaderAloc); Get().RegisterReceiver(TimeTicker::kMleRouter); Get().Start(aStartMode); @@ -3293,7 +3293,7 @@ Error MleRouter::SendAddressSolicit(ThreadStatusTlv::Status aStatus) SuccessOrExit(error = Tlv::Append(*message, otPlatTimeGetXtalAccuracy())); #endif - SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, &HandleAddressSolicitResponse, this)); mAddressSolicitPending = true; @@ -3317,7 +3317,7 @@ void MleRouter::SendAddressRelease(void) SuccessOrExit(error = Tlv::Append(*message, Rloc16FromRouterId(mRouterId))); SuccessOrExit(error = Tlv::Append(*message, Get().GetExtAddress())); - SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/thread/mlr_manager.cpp b/src/core/thread/mlr_manager.cpp index df770fe4f..76d7378c3 100644 --- a/src/core/thread/mlr_manager.cpp +++ b/src/core/thread/mlr_manager.cpp @@ -401,7 +401,7 @@ Error MlrManager::SendMlrMessage(const Ip6::Address *aAddresses, uint8_t pbbrServiceId; SuccessOrExit(error = Get().GetServiceId(pbbrServiceId)); - SuccessOrExit(error = mle.GetServiceAloc(pbbrServiceId, messageInfo.GetPeerAddr())); + mle.GetServiceAloc(pbbrServiceId, messageInfo.GetPeerAddr()); } else { diff --git a/src/core/thread/network_data_notifier.cpp b/src/core/thread/network_data_notifier.cpp index e451a73e4..e5eebe62c 100644 --- a/src/core/thread/network_data_notifier.cpp +++ b/src/core/thread/network_data_notifier.cpp @@ -216,7 +216,7 @@ Error Notifier::SendServerDataNotification(uint16_t aOldRloc16, const NetworkDat SuccessOrExit(error = Tlv::Append(*message, aOldRloc16)); } - IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, HandleCoapResponse, this)); LogInfo("Sent %s", UriToString()); diff --git a/src/core/thread/network_data_service.cpp b/src/core/thread/network_data_service.cpp index dbd8be7b0..2eb0edf21 100644 --- a/src/core/thread/network_data_service.cpp +++ b/src/core/thread/network_data_service.cpp @@ -182,8 +182,9 @@ Error Manager::GetNextDnsSrpAnycastInfo(Iterator &aIterator, DnsSrpAnycast::Info } while (tlv->GetServiceDataLength() < sizeof(DnsSrpAnycast::ServiceData)); tlv->GetServiceData(serviceData); - aInfo.mAnycastAddress.SetToAnycastLocator(Get().GetMeshLocalPrefix(), - Mle::ServiceAlocFromId(tlv->GetServiceId())); + + Get().GetServiceAloc(tlv->GetServiceId(), aInfo.mAnycastAddress); + aInfo.mSequenceNumber = reinterpret_cast(serviceData.GetBytes())->GetSequenceNumber(); diff --git a/src/core/thread/tmf.cpp b/src/core/thread/tmf.cpp index c695ed682..8585ae114 100644 --- a/src/core/thread/tmf.cpp +++ b/src/core/thread/tmf.cpp @@ -44,16 +44,16 @@ namespace Tmf { void MessageInfo::SetSockAddrToRloc(void) { SetSockAddr(Get().GetMeshLocalRloc()); } -Error MessageInfo::SetSockAddrToRlocPeerAddrToLeaderAloc(void) +void MessageInfo::SetSockAddrToRlocPeerAddrToLeaderAloc(void) { SetSockAddrToRloc(); - return Get().GetLeaderAloc(GetPeerAddr()); + Get().GetLeaderAloc(GetPeerAddr()); } -Error MessageInfo::SetSockAddrToRlocPeerAddrToLeaderRloc(void) +void MessageInfo::SetSockAddrToRlocPeerAddrToLeaderRloc(void) { SetSockAddrToRloc(); - return Get().GetLeaderAddress(GetPeerAddr()); + Get().GetLeaderRloc(GetPeerAddr()); } void MessageInfo::SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast(void) @@ -65,8 +65,7 @@ void MessageInfo::SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast(void) void MessageInfo::SetSockAddrToRlocPeerAddrTo(uint16_t aRloc16) { SetSockAddrToRloc(); - SetPeerAddr(Get().GetMeshLocalRloc()); - GetPeerAddr().GetIid().SetLocator(aRloc16); + GetPeerAddr().SetToRoutingLocator(Get().GetMeshLocalPrefix(), aRloc16); } void MessageInfo::SetSockAddrToRlocPeerAddrTo(const Ip6::Address &aPeerAddress) diff --git a/src/core/thread/tmf.hpp b/src/core/thread/tmf.hpp index c90e24257..27518705a 100644 --- a/src/core/thread/tmf.hpp +++ b/src/core/thread/tmf.hpp @@ -99,20 +99,14 @@ public: /** * Sets the local socket address to RLOC address and the peer socket address to leader ALOC. * - * @retval kErrorNone Successfully set the addresses. - * @retval kErrorDetached Cannot set leader ALOC since device is currently detached. - * */ - Error SetSockAddrToRlocPeerAddrToLeaderAloc(void); + void SetSockAddrToRlocPeerAddrToLeaderAloc(void); /** * Sets the local socket address to RLOC address and the peer socket address to leader RLOC. - * - * @retval kErrorNone Successfully set the addresses. - * @retval kErrorDetached Cannot set leader RLOC since device is currently detached. - * +q * */ - Error SetSockAddrToRlocPeerAddrToLeaderRloc(void); + void SetSockAddrToRlocPeerAddrToLeaderRloc(void); /** * Sets the local socket address to RLOC address and the peer socket address to realm-local all diff --git a/src/core/utils/mesh_diag.cpp b/src/core/utils/mesh_diag.cpp index 4d5745498..e8092eb25 100644 --- a/src/core/utils/mesh_diag.cpp +++ b/src/core/utils/mesh_diag.cpp @@ -98,8 +98,7 @@ Error MeshDiag::DiscoverTopology(const DiscoverConfig &aConfig, DiscoverCallback continue; } - destination = Get().GetMeshLocalRloc(); - destination.GetIid().SetLocator(Mle::Rloc16FromRouterId(routerId)); + destination.SetToRoutingLocator(Get().GetMeshLocalPrefix(), Mle::Rloc16FromRouterId(routerId)); SuccessOrExit(error = Get().SendCommand(kUriDiagnosticGetRequest, Message::kPriorityLow, destination, tlvs, tlvsLength, HandleDiagGetResponse, this)); @@ -176,8 +175,7 @@ Error MeshDiag::SendQuery(uint16_t aRloc16, const uint8_t *aTlvs, uint8_t aTlvsL VerifyOrExit(Mle::IsActiveRouter(aRloc16), error = kErrorInvalidArgs); VerifyOrExit(Get().IsAllocated(Mle::RouterIdFromRloc16(aRloc16)), error = kErrorNotFound); - destination = Get().GetMeshLocalRloc(); - destination.GetIid().SetLocator(aRloc16); + destination.SetToRoutingLocator(Get().GetMeshLocalPrefix(), aRloc16); SuccessOrExit(error = Get().SendCommand(kUriDiagnosticGetQuery, Message::kPriorityNormal, destination, aTlvs, aTlvsLength));