diff --git a/src/core/meshcop/announce_begin_client.cpp b/src/core/meshcop/announce_begin_client.cpp index 29b7cdbe8..b1bb69999 100644 --- a/src/core/meshcop/announce_begin_client.cpp +++ b/src/core/meshcop/announce_begin_client.cpp @@ -62,7 +62,7 @@ Error AnnounceBeginClient::SendRequest(uint32_t aChannelMask, { Error error = kErrorNone; MeshCoP::ChannelMaskTlv channelMask; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message = nullptr; VerifyOrExit(Get().IsActive(), error = kErrorInvalidState); @@ -81,9 +81,7 @@ Error AnnounceBeginClient::SendRequest(uint32_t aChannelMask, SuccessOrExit(error = Tlv::Append(*message, aCount)); SuccessOrExit(error = Tlv::Append(*message, aPeriod)); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(aAddress); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index ac8596c92..8bde4b8ee 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -456,7 +456,7 @@ void BorderAgent::HandleRelayTransmit(const Coap::Message &aMessage) Error error = kErrorNone; uint16_t joinerRouterRloc; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); uint16_t offset = 0; VerifyOrExit(aMessage.IsNonConfirmablePostRequest()); @@ -472,11 +472,8 @@ void BorderAgent::HandleRelayTransmit(const Coap::Message &aMessage) SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength() - aMessage.GetOffset())); aMessage.CopyTo(aMessage.GetOffset(), offset, aMessage.GetLength() - aMessage.GetOffset(), *message); - messageInfo.SetSockPort(Tmf::kUdpPort); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); - messageInfo.SetPeerAddr(Get().GetMeshLocal16()); - messageInfo.GetPeerAddr().GetIid().SetLocator(joinerRouterRloc); + messageInfo.SetSockAddrToRlocPeerAddrTo(joinerRouterRloc); + messageInfo.SetSockPortToTmf(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); @@ -495,7 +492,7 @@ Error BorderAgent::ForwardToLeader(const Coap::Message & aMessage, { Error error = kErrorNone; ForwardContext * forwardContext = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message = nullptr; uint16_t offset = 0; @@ -523,10 +520,8 @@ Error BorderAgent::ForwardToLeader(const Coap::Message & aMessage, SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength() - aMessage.GetOffset())); aMessage.CopyTo(aMessage.GetOffset(), offset, aMessage.GetLength() - aMessage.GetOffset(), *message); - SuccessOrExit(error = Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetSockPort(Tmf::kUdpPort); + SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + messageInfo.SetSockPortToTmf(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, HandleCoapResponse, forwardContext)); diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index 86db0fe24..500041bf0 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -686,7 +686,7 @@ Error Commissioner::SendMgmtCommissionerGetRequest(const uint8_t *aTlvs, uint8_t { Error error = kErrorNone; Coap::Message * message; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); MeshCoP::Tlv tlv; VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -706,9 +706,7 @@ Error Commissioner::SendMgmtCommissionerGetRequest(const uint8_t *aTlvs, uint8_t SuccessOrExit(error = message->AppendBytes(aTlvs, aLength)); } - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - SuccessOrExit(error = Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); + SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, Commissioner::HandleMgmtCommissionerGetResponse, this)); @@ -745,7 +743,7 @@ Error Commissioner::SendMgmtCommissionerSetRequest(const Dataset &aDataset, cons { Error error = kErrorNone; Coap::Message * message; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -779,9 +777,7 @@ Error Commissioner::SendMgmtCommissionerSetRequest(const Dataset &aDataset, cons SuccessOrExit(error = message->AppendBytes(aTlvs, aLength)); } - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - SuccessOrExit(error = Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); + SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, Commissioner::HandleMgmtCommissionerSetResponse, this)); @@ -818,7 +814,7 @@ Error Commissioner::SendPetition(void) { Error error = kErrorNone; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); CommissionerIdTlv commissionerId; mTransmitAttempts++; @@ -833,9 +829,7 @@ Error Commissioner::SendPetition(void) SuccessOrExit(error = commissionerId.AppendTo(*message)); - SuccessOrExit(error = Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); + SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); SuccessOrExit( error = Get().SendMessage(*message, messageInfo, Commissioner::HandleLeaderPetitionResponse, this)); @@ -916,7 +910,7 @@ void Commissioner::SendKeepAlive(uint16_t aSessionId) { Error error = kErrorNone; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -928,9 +922,7 @@ void Commissioner::SendKeepAlive(uint16_t aSessionId) SuccessOrExit(error = Tlv::Append(*message, aSessionId)); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - SuccessOrExit(error = Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); + SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, Commissioner::HandleLeaderKeepAliveResponse, this)); @@ -1154,7 +1146,7 @@ Error Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::MessageInfo ExtendedTlv tlv; Coap::Message * message; uint16_t offset; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Kek kek; VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -1181,10 +1173,7 @@ Error Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::MessageInfo SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength())); aMessage.CopyTo(0, offset, aMessage.GetLength(), *message); - messageInfo.SetPeerAddr(Get().GetMeshLocal16()); - messageInfo.GetPeerAddr().GetIid().SetLocator(mJoinerRloc); - messageInfo.SetPeerPort(Tmf::kUdpPort); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); + messageInfo.SetSockAddrToRlocPeerAddrTo(mJoinerRloc); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 54536223a..b1e46eb99 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -255,7 +255,7 @@ void DatasetManager::SendSet(void) { Error error; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Dataset dataset; VerifyOrExit(!mMgmtPending, error = kErrorBusy); @@ -287,9 +287,7 @@ void DatasetManager::SendSet(void) IgnoreError(Read(dataset)); SuccessOrExit(error = message->AppendBytes(dataset.GetBytes(), dataset.GetSize())); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - IgnoreError(Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); + IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); SuccessOrExit( error = Get().SendMessage(*message, messageInfo, &DatasetManager::HandleMgmtSetResponse, this)); @@ -483,7 +481,7 @@ Error DatasetManager::SendSetRequest(const Dataset::Info & aDatasetInfo, { Error error = kErrorNone; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit(!mMgmtPending, error = kErrorBusy); @@ -526,9 +524,7 @@ Error DatasetManager::SendSetRequest(const Dataset::Info & aDatasetInfo, SuccessOrExit(error = message->AppendBytes(aTlvs, aLength)); } - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - IgnoreError(Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); + IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, HandleMgmtSetResponse, this)); mMgmtSetCallback = aCallback; @@ -549,7 +545,7 @@ Error DatasetManager::SendGetRequest(const Dataset::Components &aDatasetComponen { Error error = kErrorNone; Coap::Message * message; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Tlv tlv; uint8_t datasetTlvs[kMaxDatasetTlvs]; uint8_t length; @@ -643,17 +639,14 @@ Error DatasetManager::SendGetRequest(const Dataset::Components &aDatasetComponen } } + IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); + if (aAddress != nullptr) { + // Use leader ALOC if `aAddress` is `nullptr`. messageInfo.SetPeerAddr(AsCoreType(aAddress)); } - else - { - IgnoreError(Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - } - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); LogInfo("sent dataset get request"); diff --git a/src/core/meshcop/energy_scan_client.cpp b/src/core/meshcop/energy_scan_client.cpp index 9c178ba7d..09e8fbdd1 100644 --- a/src/core/meshcop/energy_scan_client.cpp +++ b/src/core/meshcop/energy_scan_client.cpp @@ -71,7 +71,7 @@ Error EnergyScanClient::SendQuery(uint32_t aChannelMas { Error error = kErrorNone; MeshCoP::ChannelMaskTlv channelMask; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message = nullptr; VerifyOrExit(Get().IsActive(), error = kErrorInvalidState); @@ -91,9 +91,7 @@ Error EnergyScanClient::SendQuery(uint32_t aChannelMas SuccessOrExit(error = Tlv::Append(*message, aPeriod)); SuccessOrExit(error = Tlv::Append(*message, aScanDuration)); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(aAddress); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); LogInfo("sent query"); diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 26d2102bf..a298b7e42 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -133,7 +133,7 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a { Error error; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); ExtendedTlv tlv; uint16_t borderAgentRloc; uint16_t offset; @@ -158,10 +158,7 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a SuccessOrExit(error = message->SetLength(offset + tlv.GetLength())); aMessage.CopyTo(aMessage.GetOffset(), offset, tlv.GetLength(), *message); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(Get().GetMeshLocal16()); - messageInfo.GetPeerAddr().GetIid().SetLocator(borderAgentRloc); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(borderAgentRloc); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/meshcop/meshcop_leader.cpp b/src/core/meshcop/meshcop_leader.cpp index f1f6a9f92..efd0914fd 100644 --- a/src/core/meshcop/meshcop_leader.cpp +++ b/src/core/meshcop/meshcop_leader.cpp @@ -230,16 +230,14 @@ exit: void Leader::SendDatasetChanged(const Ip6::Address &aAddress) { Error error = kErrorNone; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message; VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); SuccessOrExit(error = message->InitAsConfirmablePost(UriPath::kDatasetChanged)); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(aAddress); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); LogInfo("sent dataset changed"); diff --git a/src/core/meshcop/panid_query_client.cpp b/src/core/meshcop/panid_query_client.cpp index 50b9a0322..7bacc80c0 100644 --- a/src/core/meshcop/panid_query_client.cpp +++ b/src/core/meshcop/panid_query_client.cpp @@ -68,7 +68,7 @@ Error PanIdQueryClient::SendQuery(uint16_t aPanId, { Error error = kErrorNone; MeshCoP::ChannelMaskTlv channelMask; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message = nullptr; VerifyOrExit(Get().IsActive(), error = kErrorInvalidState); @@ -86,9 +86,7 @@ Error PanIdQueryClient::SendQuery(uint16_t aPanId, SuccessOrExit(error = Tlv::Append(*message, aPanId)); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(aAddress); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); LogInfo("sent panid query"); diff --git a/src/core/thread/address_resolver.cpp b/src/core/thread/address_resolver.cpp index 14cbfe62f..190b2a463 100644 --- a/src/core/thread/address_resolver.cpp +++ b/src/core/thread/address_resolver.cpp @@ -558,7 +558,7 @@ Error AddressResolver::SendAddressQuery(const Ip6::Address &aEid) { Error error; Coap::Message * message; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -568,10 +568,7 @@ Error AddressResolver::SendAddressQuery(const Ip6::Address &aEid) SuccessOrExit(error = Tlv::Append(*message, aEid)); - messageInfo.GetPeerAddr().SetToRealmLocalAllRoutersMulticast(); - - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); @@ -676,7 +673,7 @@ void AddressResolver::SendAddressError(const Ip6::Address & aTarget, { Error error; Coap::Message * message; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((message = Get().NewMessage()) != nullptr, error = kErrorNoBufs); @@ -689,16 +686,13 @@ void AddressResolver::SendAddressError(const Ip6::Address & aTarget, if (aDestination == nullptr) { - messageInfo.GetPeerAddr().SetToRealmLocalAllRoutersMulticast(); + messageInfo.SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast(); } else { - messageInfo.SetPeerAddr(*aDestination); + messageInfo.SetSockAddrToRlocPeerAddrTo(*aDestination); } - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); - SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); LogInfo("Sending address error for target %s", aTarget.ToString().AsCString()); @@ -852,7 +846,7 @@ void AddressResolver::SendAddressQueryResponse(const Ip6::Address & a { Error error; Coap::Message * message; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -869,9 +863,7 @@ void AddressResolver::SendAddressQueryResponse(const Ip6::Address & a SuccessOrExit(error = Tlv::Append(*message, *aLastTransactionTime)); } - messageInfo.SetPeerAddr(aDestination); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(aDestination); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/thread/anycast_locator.cpp b/src/core/thread/anycast_locator.cpp index fc703d29a..703ef4a61 100644 --- a/src/core/thread/anycast_locator.cpp +++ b/src/core/thread/anycast_locator.cpp @@ -62,7 +62,7 @@ Error AnycastLocator::Locate(const Ip6::Address &aAnycastAddress, Callback aCall { Error error = kErrorNone; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((aCallback != nullptr) && Get().IsAnycastLocator(aAnycastAddress), error = kErrorInvalidArgs); @@ -78,9 +78,7 @@ Error AnycastLocator::Locate(const Ip6::Address &aAnycastAddress, Callback aCall IgnoreError(Get().AbortTransaction(HandleResponse, this)); } - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(aAnycastAddress); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(aAnycastAddress); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, HandleResponse, this)); diff --git a/src/core/thread/dua_manager.cpp b/src/core/thread/dua_manager.cpp index 57789bd67..819a22d6a 100644 --- a/src/core/thread/dua_manager.cpp +++ b/src/core/thread/dua_manager.cpp @@ -424,7 +424,7 @@ void DuaManager::PerformNextRegistration(void) Error error = kErrorNone; Mle::MleRouter & mle = Get(); Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Ip6::Address dua; VerifyOrExit(mle.IsAttached(), error = kErrorInvalidState); @@ -517,8 +517,7 @@ void DuaManager::PerformNextRegistration(void) Get().GetServer16()); } - messageInfo.SetPeerPort(Tmf::kUdpPort); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); + messageInfo.SetSockAddrToRloc(); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, &DuaManager::HandleDuaResponse, this)); @@ -726,7 +725,7 @@ void DuaManager::SendAddressNotification(Ip6::Address & aAddress, const Child & aChild) { Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Error error; VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -737,9 +736,7 @@ void DuaManager::SendAddressNotification(Ip6::Address & aAddress, SuccessOrExit(error = Tlv::Append(*message, aStatus)); SuccessOrExit(error = Tlv::Append(*message, aAddress)); - messageInfo.GetPeerAddr().SetToRoutingLocator(Get().GetMeshLocalPrefix(), aChild.GetRloc16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); + messageInfo.SetSockAddrToRlocPeerAddrTo(aChild.GetRloc16()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/thread/energy_scan_server.cpp b/src/core/thread/energy_scan_server.cpp index 4bd56de14..1a48ee1b4 100644 --- a/src/core/thread/energy_scan_server.cpp +++ b/src/core/thread/energy_scan_server.cpp @@ -174,7 +174,7 @@ void EnergyScanServer::SendReport(void) Error error = kErrorNone; MeshCoP::ChannelMaskTlv channelMask; MeshCoP::EnergyListTlv energyList; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message; VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -191,9 +191,8 @@ void EnergyScanServer::SendReport(void) SuccessOrExit(error = message->Append(energyList)); SuccessOrExit(error = message->AppendBytes(mScanResults, mScanResultsLength)); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(mCommissioner); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(mCommissioner); + SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); LogInfo("sent scan results"); diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 5bfcb6ccf..9485e6369 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -3630,7 +3630,7 @@ exit: Error MleRouter::SendAddressSolicit(ThreadStatusTlv::Status aStatus) { Error error = kErrorNone; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message = nullptr; VerifyOrExit(!mAddressSolicitPending); @@ -3653,9 +3653,7 @@ Error MleRouter::SendAddressSolicit(ThreadStatusTlv::Status aStatus) SuccessOrExit(error = AppendXtalAccuracy(*message)); #endif - SuccessOrExit(error = GetLeaderAddress(messageInfo.GetPeerAddr())); - messageInfo.SetSockAddr(GetMeshLocal16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); + SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, &HandleAddressSolicitResponse, this)); mAddressSolicitPending = true; @@ -3670,7 +3668,7 @@ exit: void MleRouter::SendAddressRelease(void) { Error error = kErrorNone; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message; VerifyOrExit((message = Get().NewMessage()) != nullptr, error = kErrorNoBufs); @@ -3679,12 +3677,10 @@ void MleRouter::SendAddressRelease(void) SuccessOrExit(error = message->SetPayloadMarker()); SuccessOrExit(error = Tlv::Append(*message, Rloc16FromRouterId(mRouterId))); - SuccessOrExit(error = Tlv::Append(*message, Get().GetExtAddress())); - messageInfo.SetSockAddr(GetMeshLocal16()); - SuccessOrExit(error = GetLeaderAddress(messageInfo.GetPeerAddr())); - messageInfo.SetPeerPort(Tmf::kUdpPort); + SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc()); + SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); Log(kMessageSend, kTypeAddressRelease, messageInfo.GetPeerAddr()); diff --git a/src/core/thread/mlr_manager.cpp b/src/core/thread/mlr_manager.cpp index 47bfc6b07..a5d77ca6b 100644 --- a/src/core/thread/mlr_manager.cpp +++ b/src/core/thread/mlr_manager.cpp @@ -399,7 +399,7 @@ Error MlrManager::SendMulticastListenerRegistrationMessage(const otIp6Address * Error error = kErrorNone; Mle::MleRouter & mle = Get(); Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Ip6AddressesTlv addressesTlv; VerifyOrExit(Get().HasPrimary(), error = kErrorInvalidState); @@ -444,8 +444,7 @@ Error MlrManager::SendMulticastListenerRegistrationMessage(const otIp6Address * Get().GetServer16()); } - messageInfo.SetPeerPort(Tmf::kUdpPort); - messageInfo.SetSockAddr(mle.GetMeshLocal16()); + messageInfo.SetSockAddrToRloc(); error = Get().SendMessage(*message, messageInfo, aResponseHandler, aResponseContext); diff --git a/src/core/thread/network_data.cpp b/src/core/thread/network_data.cpp index 3f6a5f07e..a2e876ed9 100644 --- a/src/core/thread/network_data.cpp +++ b/src/core/thread/network_data.cpp @@ -642,7 +642,7 @@ Error NetworkData::SendServerDataNotification(uint16_t aRloc16, { Error error = kErrorNone; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((message = Get().NewMessage()) != nullptr, error = kErrorNoBufs); @@ -663,9 +663,7 @@ Error NetworkData::SendServerDataNotification(uint16_t aRloc16, SuccessOrExit(error = Tlv::Append(*message, aRloc16)); } - IgnoreError(Get().GetLeaderAloc(messageInfo.GetPeerAddr())); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerPort(Tmf::kUdpPort); + IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, aHandler, aContext)); LogInfo("Sent server data notification"); diff --git a/src/core/thread/network_diagnostic.cpp b/src/core/thread/network_diagnostic.cpp index 862ddab80..9be76c499 100644 --- a/src/core/thread/network_diagnostic.cpp +++ b/src/core/thread/network_diagnostic.cpp @@ -81,7 +81,7 @@ Error NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address & aDesti { Error error; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); otCoapResponseHandler handler = nullptr; VerifyOrExit((message = Get().NewMessage()) != nullptr, error = kErrorNoBufs); @@ -113,11 +113,10 @@ Error NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address & aDesti } else { - messageInfo.SetSockAddr(Get().GetMeshLocal16()); + messageInfo.SetSockAddrToRloc(); } messageInfo.SetPeerAddr(aDestination); - messageInfo.SetPeerPort(Tmf::kUdpPort); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, handler, this)); @@ -467,7 +466,7 @@ void NetworkDiagnostic::HandleDiagnosticGetQuery(Coap::Message &aMessage, const Error error = kErrorNone; Coap::Message * message = nullptr; NetworkDiagnosticTlv networkDiagnosticTlv; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit(aMessage.IsPostRequest(), error = kErrorDrop); @@ -501,11 +500,10 @@ void NetworkDiagnostic::HandleDiagnosticGetQuery(Coap::Message &aMessage, const } else { - messageInfo.SetSockAddr(Get().GetMeshLocal16()); + messageInfo.SetSockAddrToRloc(); } messageInfo.SetPeerAddr(aMessageInfo.GetPeerAddr()); - messageInfo.SetPeerPort(Tmf::kUdpPort); SuccessOrExit(error = FillRequestedTlvs(aMessage, *message, networkDiagnosticTlv)); @@ -561,7 +559,7 @@ Error NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination, { Error error; Coap::Message * message = nullptr; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); VerifyOrExit((message = Get().NewMessage()) != nullptr, error = kErrorNoBufs); @@ -583,11 +581,10 @@ Error NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination, } else { - messageInfo.SetSockAddr(Get().GetMeshLocal16()); + messageInfo.SetSockAddrToRloc(); } messageInfo.SetPeerAddr(aDestination); - messageInfo.SetPeerPort(Tmf::kUdpPort); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/thread/panid_query_server.cpp b/src/core/thread/panid_query_server.cpp index 92415097e..adac814e3 100644 --- a/src/core/thread/panid_query_server.cpp +++ b/src/core/thread/panid_query_server.cpp @@ -114,7 +114,7 @@ void PanIdQueryServer::SendConflict(void) { Error error = kErrorNone; MeshCoP::ChannelMaskTlv channelMask; - Ip6::MessageInfo messageInfo; + Tmf::MessageInfo messageInfo(GetInstance()); Coap::Message * message; VerifyOrExit((message = Get().NewPriorityMessage()) != nullptr, error = kErrorNoBufs); @@ -128,9 +128,8 @@ void PanIdQueryServer::SendConflict(void) SuccessOrExit(error = Tlv::Append(*message, mPanId)); - messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.SetPeerAddr(mCommissioner); - messageInfo.SetPeerPort(Tmf::kUdpPort); + messageInfo.SetSockAddrToRlocPeerAddrTo(mCommissioner); + SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); LogInfo("sent panid conflict"); diff --git a/src/core/thread/tmf.cpp b/src/core/thread/tmf.cpp index 7dc5ea406..4cf831f5e 100644 --- a/src/core/thread/tmf.cpp +++ b/src/core/thread/tmf.cpp @@ -38,6 +38,48 @@ namespace ot { namespace Tmf { +//---------------------------------------------------------------------------------------------------------------------- +// MessageInfo + +void MessageInfo::SetSockAddrToRloc(void) +{ + SetSockAddr(Get().GetMeshLocal16()); +} + +Error MessageInfo::SetSockAddrToRlocPeerAddrToLeaderAloc(void) +{ + SetSockAddrToRloc(); + return Get().GetLeaderAloc(GetPeerAddr()); +} + +Error MessageInfo::SetSockAddrToRlocPeerAddrToLeaderRloc(void) +{ + SetSockAddrToRloc(); + return Get().GetLeaderAddress(GetPeerAddr()); +} + +void MessageInfo::SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast(void) +{ + SetSockAddrToRloc(); + GetPeerAddr().SetToRealmLocalAllRoutersMulticast(); +} + +void MessageInfo::SetSockAddrToRlocPeerAddrTo(uint16_t aRloc16) +{ + SetSockAddrToRloc(); + SetPeerAddr(Get().GetMeshLocal16()); + GetPeerAddr().GetIid().SetLocator(aRloc16); +} + +void MessageInfo::SetSockAddrToRlocPeerAddrTo(const Ip6::Address &aPeerAddress) +{ + SetSockAddrToRloc(); + SetPeerAddr(aPeerAddress); +} + +//---------------------------------------------------------------------------------------------------------------------- +// Agent + Error Agent::Start(void) { return Coap::Start(kUdpPort, OT_NETIF_THREAD); diff --git a/src/core/thread/tmf.hpp b/src/core/thread/tmf.hpp index 738f665e7..8d1ba9aeb 100644 --- a/src/core/thread/tmf.hpp +++ b/src/core/thread/tmf.hpp @@ -37,12 +37,91 @@ #include "openthread-core-config.h" #include "coap/coap.hpp" +#include "common/locator.hpp" namespace ot { namespace Tmf { constexpr uint16_t kUdpPort = 61631; ///< TMF UDP Port +/** + * This class represents message information for a TMF message. + * + * This is sub-class of `Ip6::MessageInfo` intended for use when sending TMF messages. + * + */ +class MessageInfo : public InstanceLocator, public Ip6::MessageInfo +{ +public: + /** + * This constructor initializes the `MessageInfo`. + * + * The peer port is set to `Tmf::kUdpPort` and all other properties are cleared (set to zero). + * + * @param[in] aInstance The OpenThread instance. + * + */ + explicit MessageInfo(Instance &aInstance) + : InstanceLocator(aInstance) + { + SetPeerPort(kUdpPort); + } + + /** + * This method sets the local socket port to TMF port. + * + */ + void SetSockPortToTmf(void) { SetSockPort(kUdpPort); } + + /** + * This method sets the local socket address to mesh-local RLOC address. + * + */ + void SetSockAddrToRloc(void); + + /** + * This method 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); + + /** + * This method 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. + * + */ + Error SetSockAddrToRlocPeerAddrToLeaderRloc(void); + + /** + * This method sets the local socket address to RLOC address and the peer socket address to realm-local all + * routers multicast address. + * + */ + void SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast(void); + + /** + * This method sets the local socket address to RLOC address and the peer socket address to a router RLOC based on + * a given RLOC16. + * + * @param[in] aRloc16 The RLOC16 to use for peer address. + * + */ + void SetSockAddrToRlocPeerAddrTo(uint16_t aRloc16); + + /** + * This method sets the local socket address to RLOC address and the peer socket address to a given address. + * + * @param[in] aPeerAddress The peer address. + * + */ + void SetSockAddrToRlocPeerAddrTo(const Ip6::Address &aPeerAddress); +}; + /** * This class implements functionality of the Thread TMF agent. *