[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:
Abtin Keshavarzian
2022-04-14 09:26:43 -07:00
committed by GitHub
parent 5e9f6f1e67
commit ba5ebc7296
19 changed files with 189 additions and 127 deletions
+2 -4
View File
@@ -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));
+6 -11
View File
@@ -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));
+10 -21
View File
@@ -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));
+8 -15
View File
@@ -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");
+2 -4
View File
@@ -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");
+2 -5
View File
@@ -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));
+2 -4
View File
@@ -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");
+2 -4
View File
@@ -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");
+7 -15
View File
@@ -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));
+2 -4
View File
@@ -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));
+4 -7
View File
@@ -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));
+3 -4
View File
@@ -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");
+5 -9
View File
@@ -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());
+2 -3
View File
@@ -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);
+2 -4
View File
@@ -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");
+6 -9
View File
@@ -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));
+3 -4
View File
@@ -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");
+42
View File
@@ -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);
+79
View File
@@ -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.
*