mirror of
https://github.com/espressif/openthread.git
synced 2026-07-26 05:53:45 +00:00
[tmf] add Tmf::MessageInfo (#7589)
This commit adds `Tmf::MessageInfo` which is a sub-class of the `Ip6::MessageInfo` class intended for use when sending TMF messages. The peer port number is by default set to the TMF port from the constructor. This class also provides helper methods for commonly used patterns, e.g., source or `SockAddr` set to device's RLOC address and/or the destination or `PeerAddr` set to leader ALOC or RLOC, or a given address.
This commit is contained in:
@@ -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<MeshCoP::Commissioner>().IsActive(), error = kErrorInvalidState);
|
||||
@@ -81,9 +81,7 @@ Error AnnounceBeginClient::SendRequest(uint32_t aChannelMask,
|
||||
SuccessOrExit(error = Tlv::Append<MeshCoP::CountTlv>(*message, aCount));
|
||||
SuccessOrExit(error = Tlv::Append<MeshCoP::PeriodTlv>(*message, aPeriod));
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(aAddress);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
|
||||
@@ -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<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetPeerAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.GetPeerAddr().GetIid().SetLocator(joinerRouterRloc);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(joinerRouterRloc);
|
||||
messageInfo.SetSockPortToTmf();
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetSockPort(Tmf::kUdpPort);
|
||||
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
messageInfo.SetSockPortToTmf();
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, HandleCoapResponse, forwardContext));
|
||||
|
||||
|
||||
@@ -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<Tmf::Agent>().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<Mle::MleRouter>().GetMeshLocal16());
|
||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||
|
||||
@@ -779,9 +777,7 @@ Error Commissioner::SendMgmtCommissionerSetRequest(const Dataset &aDataset, cons
|
||||
SuccessOrExit(error = message->AppendBytes(aTlvs, aLength));
|
||||
}
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
SuccessOrExit(
|
||||
error = Get<Tmf::Agent>().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<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||
|
||||
@@ -928,9 +922,7 @@ void Commissioner::SendKeepAlive(uint16_t aSessionId)
|
||||
|
||||
SuccessOrExit(error = Tlv::Append<CommissionerSessionIdTlv>(*message, aSessionId));
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Tmf::Agent>().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<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.GetPeerAddr().GetIid().SetLocator(mJoinerRloc);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(mJoinerRloc);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
|
||||
@@ -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<Mle::MleRouter>().GetMeshLocal16());
|
||||
IgnoreError(Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
SuccessOrExit(
|
||||
error = Get<Tmf::Agent>().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<Mle::MleRouter>().GetMeshLocal16());
|
||||
IgnoreError(Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
}
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
LogInfo("sent dataset get request");
|
||||
|
||||
@@ -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<MeshCoP::Commissioner>().IsActive(), error = kErrorInvalidState);
|
||||
@@ -91,9 +91,7 @@ Error EnergyScanClient::SendQuery(uint32_t aChannelMas
|
||||
SuccessOrExit(error = Tlv::Append<MeshCoP::PeriodTlv>(*message, aPeriod));
|
||||
SuccessOrExit(error = Tlv::Append<MeshCoP::ScanDurationTlv>(*message, aScanDuration));
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(aAddress);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
LogInfo("sent query");
|
||||
|
||||
@@ -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<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.GetPeerAddr().GetIid().SetLocator(borderAgentRloc);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(borderAgentRloc);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
|
||||
@@ -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<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||
|
||||
SuccessOrExit(error = message->InitAsConfirmablePost(UriPath::kDatasetChanged));
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(aAddress);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
LogInfo("sent dataset changed");
|
||||
|
||||
@@ -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<MeshCoP::Commissioner>().IsActive(), error = kErrorInvalidState);
|
||||
@@ -86,9 +86,7 @@ Error PanIdQueryClient::SendQuery(uint16_t aPanId,
|
||||
|
||||
SuccessOrExit(error = Tlv::Append<MeshCoP::PanIdTlv>(*message, aPanId));
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(aAddress);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
LogInfo("sent panid query");
|
||||
|
||||
@@ -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<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||
|
||||
@@ -568,10 +568,7 @@ Error AddressResolver::SendAddressQuery(const Ip6::Address &aEid)
|
||||
|
||||
SuccessOrExit(error = Tlv::Append<ThreadTargetTlv>(*message, aEid));
|
||||
|
||||
messageInfo.GetPeerAddr().SetToRealmLocalAllRoutersMulticast();
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast();
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Tmf::Agent>().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<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||
|
||||
@@ -869,9 +863,7 @@ void AddressResolver::SendAddressQueryResponse(const Ip6::Address & a
|
||||
SuccessOrExit(error = Tlv::Append<ThreadLastTransactionTimeTlv>(*message, *aLastTransactionTime));
|
||||
}
|
||||
|
||||
messageInfo.SetPeerAddr(aDestination);
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(aDestination);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
|
||||
@@ -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<Mle::Mle>().IsAnycastLocator(aAnycastAddress),
|
||||
error = kErrorInvalidArgs);
|
||||
@@ -78,9 +78,7 @@ Error AnycastLocator::Locate(const Ip6::Address &aAnycastAddress, Callback aCall
|
||||
IgnoreError(Get<Tmf::Agent>().AbortTransaction(HandleResponse, this));
|
||||
}
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(aAnycastAddress);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(aAnycastAddress);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, HandleResponse, this));
|
||||
|
||||
|
||||
@@ -424,7 +424,7 @@ void DuaManager::PerformNextRegistration(void)
|
||||
Error error = kErrorNone;
|
||||
Mle::MleRouter & mle = Get<Mle::MleRouter>();
|
||||
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<BackboneRouter::Leader>().GetServer16());
|
||||
}
|
||||
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetSockAddrToRloc();
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||
@@ -737,9 +736,7 @@ void DuaManager::SendAddressNotification(Ip6::Address & aAddress,
|
||||
SuccessOrExit(error = Tlv::Append<ThreadStatusTlv>(*message, aStatus));
|
||||
SuccessOrExit(error = Tlv::Append<ThreadTargetTlv>(*message, aAddress));
|
||||
|
||||
messageInfo.GetPeerAddr().SetToRoutingLocator(Get<Mle::MleRouter>().GetMeshLocalPrefix(), aChild.GetRloc16());
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(aChild.GetRloc16());
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
|
||||
@@ -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<Tmf::Agent>().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<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(mCommissioner);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(mCommissioner);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
LogInfo("sent scan results");
|
||||
|
||||
@@ -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<Tmf::Agent>().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<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||
@@ -3679,12 +3677,10 @@ void MleRouter::SendAddressRelease(void)
|
||||
SuccessOrExit(error = message->SetPayloadMarker());
|
||||
|
||||
SuccessOrExit(error = Tlv::Append<ThreadRloc16Tlv>(*message, Rloc16FromRouterId(mRouterId)));
|
||||
|
||||
SuccessOrExit(error = Tlv::Append<ThreadExtMacAddressTlv>(*message, Get<Mac::Mac>().GetExtAddress()));
|
||||
|
||||
messageInfo.SetSockAddr(GetMeshLocal16());
|
||||
SuccessOrExit(error = GetLeaderAddress(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc());
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
Log(kMessageSend, kTypeAddressRelease, messageInfo.GetPeerAddr());
|
||||
|
||||
@@ -399,7 +399,7 @@ Error MlrManager::SendMulticastListenerRegistrationMessage(const otIp6Address *
|
||||
Error error = kErrorNone;
|
||||
Mle::MleRouter & mle = Get<Mle::MleRouter>();
|
||||
Coap::Message * message = nullptr;
|
||||
Ip6::MessageInfo messageInfo;
|
||||
Tmf::MessageInfo messageInfo(GetInstance());
|
||||
Ip6AddressesTlv addressesTlv;
|
||||
|
||||
VerifyOrExit(Get<BackboneRouter::Leader>().HasPrimary(), error = kErrorInvalidState);
|
||||
@@ -444,8 +444,7 @@ Error MlrManager::SendMulticastListenerRegistrationMessage(const otIp6Address *
|
||||
Get<BackboneRouter::Leader>().GetServer16());
|
||||
}
|
||||
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddr(mle.GetMeshLocal16());
|
||||
messageInfo.SetSockAddrToRloc();
|
||||
|
||||
error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, aResponseHandler, aResponseContext);
|
||||
|
||||
|
||||
@@ -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<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||
|
||||
@@ -663,9 +663,7 @@ Error NetworkData::SendServerDataNotification(uint16_t aRloc16,
|
||||
SuccessOrExit(error = Tlv::Append<ThreadRloc16Tlv>(*message, aRloc16));
|
||||
}
|
||||
|
||||
IgnoreError(Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, aHandler, aContext));
|
||||
|
||||
LogInfo("Sent server data notification");
|
||||
|
||||
@@ -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<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||
@@ -113,11 +113,10 @@ Error NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address & aDesti
|
||||
}
|
||||
else
|
||||
{
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetSockAddrToRloc();
|
||||
}
|
||||
|
||||
messageInfo.SetPeerAddr(aDestination);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().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<Mle::MleRouter>().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<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||
|
||||
@@ -583,11 +581,10 @@ Error NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination,
|
||||
}
|
||||
else
|
||||
{
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetSockAddrToRloc();
|
||||
}
|
||||
|
||||
messageInfo.SetPeerAddr(aDestination);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
|
||||
@@ -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<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||
@@ -128,9 +128,8 @@ void PanIdQueryServer::SendConflict(void)
|
||||
|
||||
SuccessOrExit(error = Tlv::Append<MeshCoP::PanIdTlv>(*message, mPanId));
|
||||
|
||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
messageInfo.SetPeerAddr(mCommissioner);
|
||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
||||
messageInfo.SetSockAddrToRlocPeerAddrTo(mCommissioner);
|
||||
|
||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||
|
||||
LogInfo("sent panid conflict");
|
||||
|
||||
@@ -38,6 +38,48 @@
|
||||
namespace ot {
|
||||
namespace Tmf {
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// MessageInfo
|
||||
|
||||
void MessageInfo::SetSockAddrToRloc(void)
|
||||
{
|
||||
SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
||||
}
|
||||
|
||||
Error MessageInfo::SetSockAddrToRlocPeerAddrToLeaderAloc(void)
|
||||
{
|
||||
SetSockAddrToRloc();
|
||||
return Get<Mle::MleRouter>().GetLeaderAloc(GetPeerAddr());
|
||||
}
|
||||
|
||||
Error MessageInfo::SetSockAddrToRlocPeerAddrToLeaderRloc(void)
|
||||
{
|
||||
SetSockAddrToRloc();
|
||||
return Get<Mle::MleRouter>().GetLeaderAddress(GetPeerAddr());
|
||||
}
|
||||
|
||||
void MessageInfo::SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast(void)
|
||||
{
|
||||
SetSockAddrToRloc();
|
||||
GetPeerAddr().SetToRealmLocalAllRoutersMulticast();
|
||||
}
|
||||
|
||||
void MessageInfo::SetSockAddrToRlocPeerAddrTo(uint16_t aRloc16)
|
||||
{
|
||||
SetSockAddrToRloc();
|
||||
SetPeerAddr(Get<Mle::MleRouter>().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);
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user