mirror of
https://github.com/espressif/openthread.git
synced 2026-09-13 04:30:08 +00:00
[network-diagnostic] use Tlv helper methods to append simple TLVs (#4992)
This commit is contained in:
committed by
Jonathan Hui
parent
6ad88b49ab
commit
ec1ba12dfd
@@ -106,12 +106,7 @@ otError NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address &aDestination,
|
|||||||
|
|
||||||
if (aCount > 0)
|
if (aCount > 0)
|
||||||
{
|
{
|
||||||
TypeListTlv tlv;
|
SuccessOrExit(error = Tlv::AppendTlv(*message, NetworkDataTlv::kTypeList, aTlvTypes, aCount));
|
||||||
tlv.Init();
|
|
||||||
tlv.SetLength(aCount);
|
|
||||||
|
|
||||||
SuccessOrExit(error = message->Append(&tlv, sizeof(tlv)));
|
|
||||||
SuccessOrExit(error = message->Append(aTlvTypes, aCount));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aDestination.IsLinkLocal() || aDestination.IsLinkLocalMulticast())
|
if (aDestination.IsLinkLocal() || aDestination.IsLinkLocalMulticast())
|
||||||
@@ -292,7 +287,7 @@ void NetworkDiagnostic::FillMacCountersTlv(MacCountersTlv &aMacCountersTlv)
|
|||||||
aMacCountersTlv.SetIfOutDiscards(macCounters.mTxErrBusyChannel);
|
aMacCountersTlv.SetIfOutDiscards(macCounters.mTxErrBusyChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
otError NetworkDiagnostic::FillRequestedTlvs(Message & aRequest,
|
otError NetworkDiagnostic::FillRequestedTlvs(const Message & aRequest,
|
||||||
Message & aResponse,
|
Message & aResponse,
|
||||||
NetworkDiagnosticTlv &aNetworkDiagnosticTlv)
|
NetworkDiagnosticTlv &aNetworkDiagnosticTlv)
|
||||||
{
|
{
|
||||||
@@ -311,44 +306,25 @@ otError NetworkDiagnostic::FillRequestedTlvs(Message & aRequest,
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case NetworkDiagnosticTlv::kExtMacAddress:
|
case NetworkDiagnosticTlv::kExtMacAddress:
|
||||||
{
|
SuccessOrExit(
|
||||||
ExtMacAddressTlv tlv;
|
error = Tlv::AppendTlv(aResponse, type, Get<Mac::Mac>().GetExtAddress().m8, sizeof(Mac::ExtAddress)));
|
||||||
tlv.Init();
|
|
||||||
tlv.SetMacAddr(Get<Mac::Mac>().GetExtAddress());
|
|
||||||
SuccessOrExit(error = tlv.AppendTo(aResponse));
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case NetworkDiagnosticTlv::kAddress16:
|
case NetworkDiagnosticTlv::kAddress16:
|
||||||
{
|
SuccessOrExit(error = Tlv::AppendUint16Tlv(aResponse, type, Get<Mle::MleRouter>().GetRloc16()));
|
||||||
Address16Tlv tlv;
|
|
||||||
tlv.Init();
|
|
||||||
tlv.SetRloc16(Get<Mle::MleRouter>().GetRloc16());
|
|
||||||
SuccessOrExit(error = tlv.AppendTo(aResponse));
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case NetworkDiagnosticTlv::kMode:
|
case NetworkDiagnosticTlv::kMode:
|
||||||
{
|
SuccessOrExit(error = Tlv::AppendUint8Tlv(aResponse, type, Get<Mle::MleRouter>().GetDeviceMode().Get()));
|
||||||
ModeTlv tlv;
|
|
||||||
tlv.Init();
|
|
||||||
tlv.SetMode(Get<Mle::MleRouter>().GetDeviceMode());
|
|
||||||
SuccessOrExit(error = tlv.AppendTo(aResponse));
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case NetworkDiagnosticTlv::kTimeout:
|
case NetworkDiagnosticTlv::kTimeout:
|
||||||
{
|
|
||||||
if (!Get<Mle::MleRouter>().IsRxOnWhenIdle())
|
if (!Get<Mle::MleRouter>().IsRxOnWhenIdle())
|
||||||
{
|
{
|
||||||
TimeoutTlv tlv;
|
SuccessOrExit(error = Tlv::AppendUint32Tlv(aResponse, type, Get<Mle::MleRouter>().GetTimeout()));
|
||||||
tlv.Init();
|
|
||||||
tlv.SetTimeout(Get<Mle::MleRouter>().GetTimeout());
|
|
||||||
SuccessOrExit(error = tlv.AppendTo(aResponse));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
#if OPENTHREAD_FTD
|
#if OPENTHREAD_FTD
|
||||||
case NetworkDiagnosticTlv::kConnectivity:
|
case NetworkDiagnosticTlv::kConnectivity:
|
||||||
@@ -388,17 +364,11 @@ otError NetworkDiagnostic::FillRequestedTlvs(Message & aRequest,
|
|||||||
|
|
||||||
case NetworkDiagnosticTlv::kNetworkData:
|
case NetworkDiagnosticTlv::kNetworkData:
|
||||||
{
|
{
|
||||||
NetworkDataTlv tlv;
|
uint8_t netData[NetworkData::NetworkData::kMaxSize];
|
||||||
uint8_t length;
|
uint8_t length = sizeof(netData);
|
||||||
|
|
||||||
tlv.Init();
|
IgnoreError(Get<NetworkData::Leader>().GetNetworkData(/* aStableOnly */ false, netData, length));
|
||||||
|
SuccessOrExit(error = Tlv::AppendTlv(aResponse, type, netData, length));
|
||||||
length = sizeof(NetworkDataTlv) - sizeof(Tlv); // sizeof( NetworkDataTlv::mNetworkData )
|
|
||||||
IgnoreError(
|
|
||||||
Get<NetworkData::Leader>().GetNetworkData(/* aStableOnly */ false, tlv.GetNetworkData(), length));
|
|
||||||
tlv.SetLength(length);
|
|
||||||
|
|
||||||
SuccessOrExit(error = tlv.AppendTo(aResponse));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -470,14 +440,11 @@ otError NetworkDiagnostic::FillRequestedTlvs(Message & aRequest,
|
|||||||
#if OPENTHREAD_FTD
|
#if OPENTHREAD_FTD
|
||||||
case NetworkDiagnosticTlv::kMaxChildTimeout:
|
case NetworkDiagnosticTlv::kMaxChildTimeout:
|
||||||
{
|
{
|
||||||
uint32_t maxTimeout = 0;
|
uint32_t maxTimeout;
|
||||||
|
|
||||||
if (Get<Mle::MleRouter>().GetMaxChildTimeout(maxTimeout) == OT_ERROR_NONE)
|
if (Get<Mle::MleRouter>().GetMaxChildTimeout(maxTimeout) == OT_ERROR_NONE)
|
||||||
{
|
{
|
||||||
MaxChildTimeoutTlv tlv;
|
SuccessOrExit(error = Tlv::AppendUint32Tlv(aResponse, type, maxTimeout));
|
||||||
tlv.Init();
|
|
||||||
tlv.SetTimeout(maxTimeout);
|
|
||||||
SuccessOrExit(error = tlv.AppendTo(aResponse));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -638,12 +605,7 @@ otError NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination,
|
|||||||
|
|
||||||
if (aCount > 0)
|
if (aCount > 0)
|
||||||
{
|
{
|
||||||
TypeListTlv tlv;
|
SuccessOrExit(error = Tlv::AppendTlv(*message, NetworkDataTlv::kTypeList, aTlvTypes, aCount));
|
||||||
tlv.Init();
|
|
||||||
tlv.SetLength(aCount);
|
|
||||||
|
|
||||||
SuccessOrExit(error = message->Append(&tlv, sizeof(tlv)));
|
|
||||||
SuccessOrExit(error = message->Append(aTlvTypes, aCount));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aDestination.IsLinkLocal() || aDestination.IsLinkLocalMulticast())
|
if (aDestination.IsLinkLocal() || aDestination.IsLinkLocalMulticast())
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ private:
|
|||||||
otError AppendIp6AddressList(Message &aMessage);
|
otError AppendIp6AddressList(Message &aMessage);
|
||||||
otError AppendChildTable(Message &aMessage);
|
otError AppendChildTable(Message &aMessage);
|
||||||
void FillMacCountersTlv(MacCountersTlv &aMacCountersTlv);
|
void FillMacCountersTlv(MacCountersTlv &aMacCountersTlv);
|
||||||
otError FillRequestedTlvs(Message &aRequest, Message &aResponse, NetworkDiagnosticTlv &aNetworkDiagnosticTlv);
|
otError FillRequestedTlvs(const Message &aRequest, Message &aResponse, NetworkDiagnosticTlv &aNetworkDiagnosticTlv);
|
||||||
|
|
||||||
static void HandleDiagnosticGetRequest(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo);
|
static void HandleDiagnosticGetRequest(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo);
|
||||||
void HandleDiagnosticGetRequest(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
void HandleDiagnosticGetRequest(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||||
|
|||||||
Reference in New Issue
Block a user