mirror of
https://github.com/espressif/openthread.git
synced 2026-10-21 15:08:19 +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;
|
Error error = kErrorNone;
|
||||||
MeshCoP::ChannelMaskTlv channelMask;
|
MeshCoP::ChannelMaskTlv channelMask;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
|
|
||||||
VerifyOrExit(Get<MeshCoP::Commissioner>().IsActive(), error = kErrorInvalidState);
|
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::CountTlv>(*message, aCount));
|
||||||
SuccessOrExit(error = Tlv::Append<MeshCoP::PeriodTlv>(*message, aPeriod));
|
SuccessOrExit(error = Tlv::Append<MeshCoP::PeriodTlv>(*message, aPeriod));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||||
messageInfo.SetPeerAddr(aAddress);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
|
|||||||
@@ -456,7 +456,7 @@ void BorderAgent::HandleRelayTransmit(const Coap::Message &aMessage)
|
|||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
uint16_t joinerRouterRloc;
|
uint16_t joinerRouterRloc;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
uint16_t offset = 0;
|
uint16_t offset = 0;
|
||||||
|
|
||||||
VerifyOrExit(aMessage.IsNonConfirmablePostRequest());
|
VerifyOrExit(aMessage.IsNonConfirmablePostRequest());
|
||||||
@@ -472,11 +472,8 @@ void BorderAgent::HandleRelayTransmit(const Coap::Message &aMessage)
|
|||||||
SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength() - aMessage.GetOffset()));
|
SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength() - aMessage.GetOffset()));
|
||||||
aMessage.CopyTo(aMessage.GetOffset(), offset, aMessage.GetLength() - aMessage.GetOffset(), *message);
|
aMessage.CopyTo(aMessage.GetOffset(), offset, aMessage.GetLength() - aMessage.GetOffset(), *message);
|
||||||
|
|
||||||
messageInfo.SetSockPort(Tmf::kUdpPort);
|
messageInfo.SetSockAddrToRlocPeerAddrTo(joinerRouterRloc);
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockPortToTmf();
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
messageInfo.SetPeerAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
messageInfo.GetPeerAddr().GetIid().SetLocator(joinerRouterRloc);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
@@ -495,7 +492,7 @@ Error BorderAgent::ForwardToLeader(const Coap::Message & aMessage,
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
ForwardContext * forwardContext = nullptr;
|
ForwardContext * forwardContext = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
uint16_t offset = 0;
|
uint16_t offset = 0;
|
||||||
|
|
||||||
@@ -523,10 +520,8 @@ Error BorderAgent::ForwardToLeader(const Coap::Message & aMessage,
|
|||||||
SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength() - aMessage.GetOffset()));
|
SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength() - aMessage.GetOffset()));
|
||||||
aMessage.CopyTo(aMessage.GetOffset(), offset, aMessage.GetLength() - aMessage.GetOffset(), *message);
|
aMessage.CopyTo(aMessage.GetOffset(), offset, aMessage.GetLength() - aMessage.GetOffset(), *message);
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
messageInfo.SetSockPortToTmf();
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
messageInfo.SetSockPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, HandleCoapResponse, forwardContext));
|
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;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
MeshCoP::Tlv tlv;
|
MeshCoP::Tlv tlv;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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));
|
SuccessOrExit(error = message->AppendBytes(aTlvs, aLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo,
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo,
|
||||||
Commissioner::HandleMgmtCommissionerGetResponse, this));
|
Commissioner::HandleMgmtCommissionerGetResponse, this));
|
||||||
|
|
||||||
@@ -745,7 +743,7 @@ Error Commissioner::SendMgmtCommissionerSetRequest(const Dataset &aDataset, cons
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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));
|
SuccessOrExit(error = message->AppendBytes(aTlvs, aLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo,
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo,
|
||||||
Commissioner::HandleMgmtCommissionerSetResponse, this));
|
Commissioner::HandleMgmtCommissionerSetResponse, this));
|
||||||
|
|
||||||
@@ -818,7 +814,7 @@ Error Commissioner::SendPetition(void)
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
CommissionerIdTlv commissionerId;
|
CommissionerIdTlv commissionerId;
|
||||||
|
|
||||||
mTransmitAttempts++;
|
mTransmitAttempts++;
|
||||||
@@ -833,9 +829,7 @@ Error Commissioner::SendPetition(void)
|
|||||||
|
|
||||||
SuccessOrExit(error = commissionerId.AppendTo(*message));
|
SuccessOrExit(error = commissionerId.AppendTo(*message));
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
SuccessOrExit(
|
SuccessOrExit(
|
||||||
error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, Commissioner::HandleLeaderPetitionResponse, this));
|
error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, Commissioner::HandleLeaderPetitionResponse, this));
|
||||||
|
|
||||||
@@ -916,7 +910,7 @@ void Commissioner::SendKeepAlive(uint16_t aSessionId)
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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));
|
SuccessOrExit(error = Tlv::Append<CommissionerSessionIdTlv>(*message, aSessionId));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
SuccessOrExit(error = Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo,
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo,
|
||||||
Commissioner::HandleLeaderKeepAliveResponse, this));
|
Commissioner::HandleLeaderKeepAliveResponse, this));
|
||||||
|
|
||||||
@@ -1154,7 +1146,7 @@ Error Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::MessageInfo
|
|||||||
ExtendedTlv tlv;
|
ExtendedTlv tlv;
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
uint16_t offset;
|
uint16_t offset;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Kek kek;
|
Kek kek;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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()));
|
SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength()));
|
||||||
aMessage.CopyTo(0, offset, aMessage.GetLength(), *message);
|
aMessage.CopyTo(0, offset, aMessage.GetLength(), *message);
|
||||||
|
|
||||||
messageInfo.SetPeerAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(mJoinerRloc);
|
||||||
messageInfo.GetPeerAddr().GetIid().SetLocator(mJoinerRloc);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ void DatasetManager::SendSet(void)
|
|||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Dataset dataset;
|
Dataset dataset;
|
||||||
|
|
||||||
VerifyOrExit(!mMgmtPending, error = kErrorBusy);
|
VerifyOrExit(!mMgmtPending, error = kErrorBusy);
|
||||||
@@ -287,9 +287,7 @@ void DatasetManager::SendSet(void)
|
|||||||
IgnoreError(Read(dataset));
|
IgnoreError(Read(dataset));
|
||||||
SuccessOrExit(error = message->AppendBytes(dataset.GetBytes(), dataset.GetSize()));
|
SuccessOrExit(error = message->AppendBytes(dataset.GetBytes(), dataset.GetSize()));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
IgnoreError(Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(
|
SuccessOrExit(
|
||||||
error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, &DatasetManager::HandleMgmtSetResponse, this));
|
error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, &DatasetManager::HandleMgmtSetResponse, this));
|
||||||
|
|
||||||
@@ -483,7 +481,7 @@ Error DatasetManager::SendSetRequest(const Dataset::Info & aDatasetInfo,
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit(!mMgmtPending, error = kErrorBusy);
|
VerifyOrExit(!mMgmtPending, error = kErrorBusy);
|
||||||
|
|
||||||
@@ -526,9 +524,7 @@ Error DatasetManager::SendSetRequest(const Dataset::Info & aDatasetInfo,
|
|||||||
SuccessOrExit(error = message->AppendBytes(aTlvs, aLength));
|
SuccessOrExit(error = message->AppendBytes(aTlvs, aLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
IgnoreError(Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, HandleMgmtSetResponse, this));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, HandleMgmtSetResponse, this));
|
||||||
mMgmtSetCallback = aCallback;
|
mMgmtSetCallback = aCallback;
|
||||||
@@ -549,7 +545,7 @@ Error DatasetManager::SendGetRequest(const Dataset::Components &aDatasetComponen
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Tlv tlv;
|
Tlv tlv;
|
||||||
uint8_t datasetTlvs[kMaxDatasetTlvs];
|
uint8_t datasetTlvs[kMaxDatasetTlvs];
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
@@ -643,17 +639,14 @@ Error DatasetManager::SendGetRequest(const Dataset::Components &aDatasetComponen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
|
|
||||||
if (aAddress != nullptr)
|
if (aAddress != nullptr)
|
||||||
{
|
{
|
||||||
|
// Use leader ALOC if `aAddress` is `nullptr`.
|
||||||
messageInfo.SetPeerAddr(AsCoreType(aAddress));
|
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));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
LogInfo("sent dataset get request");
|
LogInfo("sent dataset get request");
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ Error EnergyScanClient::SendQuery(uint32_t aChannelMas
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
MeshCoP::ChannelMaskTlv channelMask;
|
MeshCoP::ChannelMaskTlv channelMask;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
|
|
||||||
VerifyOrExit(Get<MeshCoP::Commissioner>().IsActive(), error = kErrorInvalidState);
|
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::PeriodTlv>(*message, aPeriod));
|
||||||
SuccessOrExit(error = Tlv::Append<MeshCoP::ScanDurationTlv>(*message, aScanDuration));
|
SuccessOrExit(error = Tlv::Append<MeshCoP::ScanDurationTlv>(*message, aScanDuration));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||||
messageInfo.SetPeerAddr(aAddress);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
LogInfo("sent query");
|
LogInfo("sent query");
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a
|
|||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
ExtendedTlv tlv;
|
ExtendedTlv tlv;
|
||||||
uint16_t borderAgentRloc;
|
uint16_t borderAgentRloc;
|
||||||
uint16_t offset;
|
uint16_t offset;
|
||||||
@@ -158,10 +158,7 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a
|
|||||||
SuccessOrExit(error = message->SetLength(offset + tlv.GetLength()));
|
SuccessOrExit(error = message->SetLength(offset + tlv.GetLength()));
|
||||||
aMessage.CopyTo(aMessage.GetOffset(), offset, tlv.GetLength(), *message);
|
aMessage.CopyTo(aMessage.GetOffset(), offset, tlv.GetLength(), *message);
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(borderAgentRloc);
|
||||||
messageInfo.SetPeerAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
messageInfo.GetPeerAddr().GetIid().SetLocator(borderAgentRloc);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
|
|||||||
@@ -230,16 +230,14 @@ exit:
|
|||||||
void Leader::SendDatasetChanged(const Ip6::Address &aAddress)
|
void Leader::SendDatasetChanged(const Ip6::Address &aAddress)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
||||||
|
|
||||||
SuccessOrExit(error = message->InitAsConfirmablePost(UriPath::kDatasetChanged));
|
SuccessOrExit(error = message->InitAsConfirmablePost(UriPath::kDatasetChanged));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||||
messageInfo.SetPeerAddr(aAddress);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
LogInfo("sent dataset changed");
|
LogInfo("sent dataset changed");
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ Error PanIdQueryClient::SendQuery(uint16_t aPanId,
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
MeshCoP::ChannelMaskTlv channelMask;
|
MeshCoP::ChannelMaskTlv channelMask;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
|
|
||||||
VerifyOrExit(Get<MeshCoP::Commissioner>().IsActive(), error = kErrorInvalidState);
|
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));
|
SuccessOrExit(error = Tlv::Append<MeshCoP::PanIdTlv>(*message, aPanId));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(aAddress);
|
||||||
messageInfo.SetPeerAddr(aAddress);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
LogInfo("sent panid query");
|
LogInfo("sent panid query");
|
||||||
|
|||||||
@@ -558,7 +558,7 @@ Error AddressResolver::SendAddressQuery(const Ip6::Address &aEid)
|
|||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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));
|
SuccessOrExit(error = Tlv::Append<ThreadTargetTlv>(*message, aEid));
|
||||||
|
|
||||||
messageInfo.GetPeerAddr().SetToRealmLocalAllRoutersMulticast();
|
messageInfo.SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast();
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
@@ -676,7 +673,7 @@ void AddressResolver::SendAddressError(const Ip6::Address & aTarget,
|
|||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||||
|
|
||||||
@@ -689,16 +686,13 @@ void AddressResolver::SendAddressError(const Ip6::Address & aTarget,
|
|||||||
|
|
||||||
if (aDestination == nullptr)
|
if (aDestination == nullptr)
|
||||||
{
|
{
|
||||||
messageInfo.GetPeerAddr().SetToRealmLocalAllRoutersMulticast();
|
messageInfo.SetSockAddrToRlocPeerAddrToRealmLocalAllRoutersMulticast();
|
||||||
}
|
}
|
||||||
else
|
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));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
LogInfo("Sending address error for target %s", aTarget.ToString().AsCString());
|
LogInfo("Sending address error for target %s", aTarget.ToString().AsCString());
|
||||||
@@ -852,7 +846,7 @@ void AddressResolver::SendAddressQueryResponse(const Ip6::Address & a
|
|||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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));
|
SuccessOrExit(error = Tlv::Append<ThreadLastTransactionTimeTlv>(*message, *aLastTransactionTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetPeerAddr(aDestination);
|
messageInfo.SetSockAddrToRlocPeerAddrTo(aDestination);
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ Error AnycastLocator::Locate(const Ip6::Address &aAnycastAddress, Callback aCall
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((aCallback != nullptr) && Get<Mle::Mle>().IsAnycastLocator(aAnycastAddress),
|
VerifyOrExit((aCallback != nullptr) && Get<Mle::Mle>().IsAnycastLocator(aAnycastAddress),
|
||||||
error = kErrorInvalidArgs);
|
error = kErrorInvalidArgs);
|
||||||
@@ -78,9 +78,7 @@ Error AnycastLocator::Locate(const Ip6::Address &aAnycastAddress, Callback aCall
|
|||||||
IgnoreError(Get<Tmf::Agent>().AbortTransaction(HandleResponse, this));
|
IgnoreError(Get<Tmf::Agent>().AbortTransaction(HandleResponse, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(aAnycastAddress);
|
||||||
messageInfo.SetPeerAddr(aAnycastAddress);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, HandleResponse, this));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, HandleResponse, this));
|
||||||
|
|
||||||
|
|||||||
@@ -424,7 +424,7 @@ void DuaManager::PerformNextRegistration(void)
|
|||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Mle::MleRouter & mle = Get<Mle::MleRouter>();
|
Mle::MleRouter & mle = Get<Mle::MleRouter>();
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Ip6::Address dua;
|
Ip6::Address dua;
|
||||||
|
|
||||||
VerifyOrExit(mle.IsAttached(), error = kErrorInvalidState);
|
VerifyOrExit(mle.IsAttached(), error = kErrorInvalidState);
|
||||||
@@ -517,8 +517,7 @@ void DuaManager::PerformNextRegistration(void)
|
|||||||
Get<BackboneRouter::Leader>().GetServer16());
|
Get<BackboneRouter::Leader>().GetServer16());
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
messageInfo.SetSockAddrToRloc();
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, &DuaManager::HandleDuaResponse, this));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, &DuaManager::HandleDuaResponse, this));
|
||||||
|
|
||||||
@@ -726,7 +725,7 @@ void DuaManager::SendAddressNotification(Ip6::Address & aAddress,
|
|||||||
const Child & aChild)
|
const Child & aChild)
|
||||||
{
|
{
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Error error;
|
Error error;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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<ThreadStatusTlv>(*message, aStatus));
|
||||||
SuccessOrExit(error = Tlv::Append<ThreadTargetTlv>(*message, aAddress));
|
SuccessOrExit(error = Tlv::Append<ThreadTargetTlv>(*message, aAddress));
|
||||||
|
|
||||||
messageInfo.GetPeerAddr().SetToRoutingLocator(Get<Mle::MleRouter>().GetMeshLocalPrefix(), aChild.GetRloc16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(aChild.GetRloc16());
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ void EnergyScanServer::SendReport(void)
|
|||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
MeshCoP::ChannelMaskTlv channelMask;
|
MeshCoP::ChannelMaskTlv channelMask;
|
||||||
MeshCoP::EnergyListTlv energyList;
|
MeshCoP::EnergyListTlv energyList;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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->Append(energyList));
|
||||||
SuccessOrExit(error = message->AppendBytes(mScanResults, mScanResultsLength));
|
SuccessOrExit(error = message->AppendBytes(mScanResults, mScanResultsLength));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(mCommissioner);
|
||||||
messageInfo.SetPeerAddr(mCommissioner);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
LogInfo("sent scan results");
|
LogInfo("sent scan results");
|
||||||
|
|||||||
@@ -3630,7 +3630,7 @@ exit:
|
|||||||
Error MleRouter::SendAddressSolicit(ThreadStatusTlv::Status aStatus)
|
Error MleRouter::SendAddressSolicit(ThreadStatusTlv::Status aStatus)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
|
|
||||||
VerifyOrExit(!mAddressSolicitPending);
|
VerifyOrExit(!mAddressSolicitPending);
|
||||||
@@ -3653,9 +3653,7 @@ Error MleRouter::SendAddressSolicit(ThreadStatusTlv::Status aStatus)
|
|||||||
SuccessOrExit(error = AppendXtalAccuracy(*message));
|
SuccessOrExit(error = AppendXtalAccuracy(*message));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SuccessOrExit(error = GetLeaderAddress(messageInfo.GetPeerAddr()));
|
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc());
|
||||||
messageInfo.SetSockAddr(GetMeshLocal16());
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, &HandleAddressSolicitResponse, this));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, &HandleAddressSolicitResponse, this));
|
||||||
mAddressSolicitPending = true;
|
mAddressSolicitPending = true;
|
||||||
@@ -3670,7 +3668,7 @@ exit:
|
|||||||
void MleRouter::SendAddressRelease(void)
|
void MleRouter::SendAddressRelease(void)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||||
@@ -3679,12 +3677,10 @@ void MleRouter::SendAddressRelease(void)
|
|||||||
SuccessOrExit(error = message->SetPayloadMarker());
|
SuccessOrExit(error = message->SetPayloadMarker());
|
||||||
|
|
||||||
SuccessOrExit(error = Tlv::Append<ThreadRloc16Tlv>(*message, Rloc16FromRouterId(mRouterId)));
|
SuccessOrExit(error = Tlv::Append<ThreadRloc16Tlv>(*message, Rloc16FromRouterId(mRouterId)));
|
||||||
|
|
||||||
SuccessOrExit(error = Tlv::Append<ThreadExtMacAddressTlv>(*message, Get<Mac::Mac>().GetExtAddress()));
|
SuccessOrExit(error = Tlv::Append<ThreadExtMacAddressTlv>(*message, Get<Mac::Mac>().GetExtAddress()));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(GetMeshLocal16());
|
SuccessOrExit(error = messageInfo.SetSockAddrToRlocPeerAddrToLeaderRloc());
|
||||||
SuccessOrExit(error = GetLeaderAddress(messageInfo.GetPeerAddr()));
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
Log(kMessageSend, kTypeAddressRelease, messageInfo.GetPeerAddr());
|
Log(kMessageSend, kTypeAddressRelease, messageInfo.GetPeerAddr());
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ Error MlrManager::SendMulticastListenerRegistrationMessage(const otIp6Address *
|
|||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Mle::MleRouter & mle = Get<Mle::MleRouter>();
|
Mle::MleRouter & mle = Get<Mle::MleRouter>();
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Ip6AddressesTlv addressesTlv;
|
Ip6AddressesTlv addressesTlv;
|
||||||
|
|
||||||
VerifyOrExit(Get<BackboneRouter::Leader>().HasPrimary(), error = kErrorInvalidState);
|
VerifyOrExit(Get<BackboneRouter::Leader>().HasPrimary(), error = kErrorInvalidState);
|
||||||
@@ -444,8 +444,7 @@ Error MlrManager::SendMulticastListenerRegistrationMessage(const otIp6Address *
|
|||||||
Get<BackboneRouter::Leader>().GetServer16());
|
Get<BackboneRouter::Leader>().GetServer16());
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
messageInfo.SetSockAddrToRloc();
|
||||||
messageInfo.SetSockAddr(mle.GetMeshLocal16());
|
|
||||||
|
|
||||||
error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, aResponseHandler, aResponseContext);
|
error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, aResponseHandler, aResponseContext);
|
||||||
|
|
||||||
|
|||||||
@@ -642,7 +642,7 @@ Error NetworkData::SendServerDataNotification(uint16_t aRloc16,
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
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));
|
SuccessOrExit(error = Tlv::Append<ThreadRloc16Tlv>(*message, aRloc16));
|
||||||
}
|
}
|
||||||
|
|
||||||
IgnoreError(Get<Mle::MleRouter>().GetLeaderAloc(messageInfo.GetPeerAddr()));
|
IgnoreError(messageInfo.SetSockAddrToRlocPeerAddrToLeaderAloc());
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, aHandler, aContext));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, aHandler, aContext));
|
||||||
|
|
||||||
LogInfo("Sent server data notification");
|
LogInfo("Sent server data notification");
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ Error NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address & aDesti
|
|||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
otCoapResponseHandler handler = nullptr;
|
otCoapResponseHandler handler = nullptr;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||||
@@ -113,11 +113,10 @@ Error NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address & aDesti
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRloc();
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetPeerAddr(aDestination);
|
messageInfo.SetPeerAddr(aDestination);
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, handler, this));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo, handler, this));
|
||||||
|
|
||||||
@@ -467,7 +466,7 @@ void NetworkDiagnostic::HandleDiagnosticGetQuery(Coap::Message &aMessage, const
|
|||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
NetworkDiagnosticTlv networkDiagnosticTlv;
|
NetworkDiagnosticTlv networkDiagnosticTlv;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit(aMessage.IsPostRequest(), error = kErrorDrop);
|
VerifyOrExit(aMessage.IsPostRequest(), error = kErrorDrop);
|
||||||
|
|
||||||
@@ -501,11 +500,10 @@ void NetworkDiagnostic::HandleDiagnosticGetQuery(Coap::Message &aMessage, const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRloc();
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetPeerAddr(aMessageInfo.GetPeerAddr());
|
messageInfo.SetPeerAddr(aMessageInfo.GetPeerAddr());
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = FillRequestedTlvs(aMessage, *message, networkDiagnosticTlv));
|
SuccessOrExit(error = FillRequestedTlvs(aMessage, *message, networkDiagnosticTlv));
|
||||||
|
|
||||||
@@ -561,7 +559,7 @@ Error NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination,
|
|||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
Coap::Message * message = nullptr;
|
Coap::Message * message = nullptr;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
VerifyOrExit((message = Get<Tmf::Agent>().NewMessage()) != nullptr, error = kErrorNoBufs);
|
||||||
|
|
||||||
@@ -583,11 +581,10 @@ Error NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRloc();
|
||||||
}
|
}
|
||||||
|
|
||||||
messageInfo.SetPeerAddr(aDestination);
|
messageInfo.SetPeerAddr(aDestination);
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ void PanIdQueryServer::SendConflict(void)
|
|||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
MeshCoP::ChannelMaskTlv channelMask;
|
MeshCoP::ChannelMaskTlv channelMask;
|
||||||
Ip6::MessageInfo messageInfo;
|
Tmf::MessageInfo messageInfo(GetInstance());
|
||||||
Coap::Message * message;
|
Coap::Message * message;
|
||||||
|
|
||||||
VerifyOrExit((message = Get<Tmf::Agent>().NewPriorityMessage()) != nullptr, error = kErrorNoBufs);
|
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));
|
SuccessOrExit(error = Tlv::Append<MeshCoP::PanIdTlv>(*message, mPanId));
|
||||||
|
|
||||||
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
|
messageInfo.SetSockAddrToRlocPeerAddrTo(mCommissioner);
|
||||||
messageInfo.SetPeerAddr(mCommissioner);
|
|
||||||
messageInfo.SetPeerPort(Tmf::kUdpPort);
|
|
||||||
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = Get<Tmf::Agent>().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
LogInfo("sent panid conflict");
|
LogInfo("sent panid conflict");
|
||||||
|
|||||||
@@ -38,6 +38,48 @@
|
|||||||
namespace ot {
|
namespace ot {
|
||||||
namespace Tmf {
|
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)
|
Error Agent::Start(void)
|
||||||
{
|
{
|
||||||
return Coap::Start(kUdpPort, OT_NETIF_THREAD);
|
return Coap::Start(kUdpPort, OT_NETIF_THREAD);
|
||||||
|
|||||||
@@ -37,12 +37,91 @@
|
|||||||
#include "openthread-core-config.h"
|
#include "openthread-core-config.h"
|
||||||
|
|
||||||
#include "coap/coap.hpp"
|
#include "coap/coap.hpp"
|
||||||
|
#include "common/locator.hpp"
|
||||||
|
|
||||||
namespace ot {
|
namespace ot {
|
||||||
namespace Tmf {
|
namespace Tmf {
|
||||||
|
|
||||||
constexpr uint16_t kUdpPort = 61631; ///< TMF UDP Port
|
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.
|
* This class implements functionality of the Thread TMF agent.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user