[network-diagnostic] use Tlv helper methods to append simple TLVs (#4992)

This commit is contained in:
Abtin Keshavarzian
2020-05-21 12:05:13 -07:00
committed by Jonathan Hui
parent 6ad88b49ab
commit ec1ba12dfd
2 changed files with 15 additions and 53 deletions
+14 -52
View File
@@ -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())
+1 -1
View File
@@ -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);