[net-diag] add Eui64Tlv support (#9795)

This commit is contained in:
Rongli Sun
2024-01-29 16:02:50 -08:00
committed by GitHub
parent 4dae833c54
commit c73829fdbf
5 changed files with 67 additions and 36 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ extern "C" {
* @note This number versions both OpenThread platform and user APIs.
*
*/
#define OPENTHREAD_API_VERSION (392)
#define OPENTHREAD_API_VERSION (393)
/**
* @addtogroup api-instance
+30 -27
View File
@@ -66,33 +66,35 @@ extern "C" {
enum
{
OT_NETWORK_DIAGNOSTIC_TLV_EXT_ADDRESS = 0, ///< MAC Extended Address TLV
OT_NETWORK_DIAGNOSTIC_TLV_SHORT_ADDRESS = 1, ///< Address16 TLV
OT_NETWORK_DIAGNOSTIC_TLV_MODE = 2, ///< Mode TLV
OT_NETWORK_DIAGNOSTIC_TLV_TIMEOUT = 3, ///< Timeout TLV (the maximum polling time period for SEDs)
OT_NETWORK_DIAGNOSTIC_TLV_CONNECTIVITY = 4, ///< Connectivity TLV
OT_NETWORK_DIAGNOSTIC_TLV_ROUTE = 5, ///< Route64 TLV
OT_NETWORK_DIAGNOSTIC_TLV_LEADER_DATA = 6, ///< Leader Data TLV
OT_NETWORK_DIAGNOSTIC_TLV_NETWORK_DATA = 7, ///< Network Data TLV
OT_NETWORK_DIAGNOSTIC_TLV_IP6_ADDR_LIST = 8, ///< IPv6 Address List TLV
OT_NETWORK_DIAGNOSTIC_TLV_MAC_COUNTERS = 9, ///< MAC Counters TLV
OT_NETWORK_DIAGNOSTIC_TLV_BATTERY_LEVEL = 14, ///< Battery Level TLV
OT_NETWORK_DIAGNOSTIC_TLV_SUPPLY_VOLTAGE = 15, ///< Supply Voltage TLV
OT_NETWORK_DIAGNOSTIC_TLV_CHILD_TABLE = 16, ///< Child Table TLV
OT_NETWORK_DIAGNOSTIC_TLV_CHANNEL_PAGES = 17, ///< Channel Pages TLV
OT_NETWORK_DIAGNOSTIC_TLV_TYPE_LIST = 18, ///< Type List TLV
OT_NETWORK_DIAGNOSTIC_TLV_MAX_CHILD_TIMEOUT = 19, ///< Max Child Timeout TLV
OT_NETWORK_DIAGNOSTIC_TLV_VERSION = 24, ///< Version TLV
OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_NAME = 25, ///< Vendor Name TLV
OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_MODEL = 26, ///< Vendor Model TLV
OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_SW_VERSION = 27, ///< Vendor SW Version TLV
OT_NETWORK_DIAGNOSTIC_TLV_THREAD_STACK_VERSION = 28, ///< Thread Stack Version TLV
OT_NETWORK_DIAGNOSTIC_TLV_CHILD = 29, ///< Child TLV
OT_NETWORK_DIAGNOSTIC_TLV_CHILD_IP6_ADDR_LIST = 30, ///< Child IPv6 Address List TLV
OT_NETWORK_DIAGNOSTIC_TLV_ROUTER_NEIGHBOR = 31, ///< Router Neighbor TLV
OT_NETWORK_DIAGNOSTIC_TLV_ANSWER = 32, ///< Answer TLV
OT_NETWORK_DIAGNOSTIC_TLV_QUERY_ID = 33, ///< Query ID TLV
OT_NETWORK_DIAGNOSTIC_TLV_MLE_COUNTERS = 34, ///< MLE Counters TLV
OT_NETWORK_DIAGNOSTIC_TLV_EXT_ADDRESS = 0, ///< MAC Extended Address TLV
OT_NETWORK_DIAGNOSTIC_TLV_SHORT_ADDRESS = 1, ///< Address16 TLV
OT_NETWORK_DIAGNOSTIC_TLV_MODE = 2, ///< Mode TLV
OT_NETWORK_DIAGNOSTIC_TLV_TIMEOUT = 3, ///< Timeout TLV (the maximum polling time period for SEDs)
OT_NETWORK_DIAGNOSTIC_TLV_CONNECTIVITY = 4, ///< Connectivity TLV
OT_NETWORK_DIAGNOSTIC_TLV_ROUTE = 5, ///< Route64 TLV
OT_NETWORK_DIAGNOSTIC_TLV_LEADER_DATA = 6, ///< Leader Data TLV
OT_NETWORK_DIAGNOSTIC_TLV_NETWORK_DATA = 7, ///< Network Data TLV
OT_NETWORK_DIAGNOSTIC_TLV_IP6_ADDR_LIST = 8, ///< IPv6 Address List TLV
OT_NETWORK_DIAGNOSTIC_TLV_MAC_COUNTERS = 9, ///< MAC Counters TLV
OT_NETWORK_DIAGNOSTIC_TLV_BATTERY_LEVEL = 14, ///< Battery Level TLV
OT_NETWORK_DIAGNOSTIC_TLV_SUPPLY_VOLTAGE = 15, ///< Supply Voltage TLV
OT_NETWORK_DIAGNOSTIC_TLV_CHILD_TABLE = 16, ///< Child Table TLV
OT_NETWORK_DIAGNOSTIC_TLV_CHANNEL_PAGES = 17, ///< Channel Pages TLV
OT_NETWORK_DIAGNOSTIC_TLV_TYPE_LIST = 18, ///< Type List TLV
OT_NETWORK_DIAGNOSTIC_TLV_MAX_CHILD_TIMEOUT = 19, ///< Max Child Timeout TLV
OT_NETWORK_DIAGNOSTIC_TLV_EUI64 = 23, ///< EUI64 TLV
OT_NETWORK_DIAGNOSTIC_TLV_VERSION = 24, ///< Version TLV version number for the protocols and features)
OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_NAME = 25, ///< Vendor Name TLV
OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_MODEL = 26, ///< Vendor Model TLV
OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_SW_VERSION = 27, ///< Vendor SW Version TLV
OT_NETWORK_DIAGNOSTIC_TLV_THREAD_STACK_VERSION =
28, ///< Thread Stack Version TLV (version identifier as UTF-8 string for Thread stack codebase/commit/version)
OT_NETWORK_DIAGNOSTIC_TLV_CHILD = 29, ///< Child TLV
OT_NETWORK_DIAGNOSTIC_TLV_CHILD_IP6_ADDR_LIST = 30, ///< Child IPv6 Address List TLV
OT_NETWORK_DIAGNOSTIC_TLV_ROUTER_NEIGHBOR = 31, ///< Router Neighbor TLV
OT_NETWORK_DIAGNOSTIC_TLV_ANSWER = 32, ///< Answer TLV
OT_NETWORK_DIAGNOSTIC_TLV_QUERY_ID = 33, ///< Query ID TLV
OT_NETWORK_DIAGNOSTIC_TLV_MLE_COUNTERS = 34, ///< MLE Counters TLV
};
@@ -275,6 +277,7 @@ typedef struct otNetworkDiagTlv
union
{
otExtAddress mExtAddress;
otExtAddress mEui64;
uint16_t mAddr16;
otLinkModeConfig mMode;
uint32_t mTimeout;
+16 -8
View File
@@ -7778,9 +7778,9 @@ template <> otError Interpreter::Process<Cmd("networkdiagnostic")>(Arg aArgs[])
/**
* @cli networkdiagnostic get
* @code
* networkdiagnostic get fdde:ad00:beef:0:0:ff:fe00:fc00 0 1 6e
* networkdiagnostic get fdde:ad00:beef:0:0:ff:fe00:fc00 0 1 6 23
* DIAG_GET.rsp/ans: 00080e336e1c41494e1c01020c000608640b0f674074c503
* Ext Address: '0e336e1c41494e1c'
* Ext Address: 0e336e1c41494e1c
* Rloc16: 0x0c00
* Leader Data:
* PartitionId: 0x640b0f67
@@ -7788,6 +7788,7 @@ template <> otError Interpreter::Process<Cmd("networkdiagnostic")>(Arg aArgs[])
* DataVersion: 116
* StableDataVersion: 197
* LeaderRouterId: 0x03
* EUI64: 18b4300000000004
* Done
* @endcode
* @code
@@ -7797,7 +7798,7 @@ template <> otError Interpreter::Process<Cmd("networkdiagnostic")>(Arg aArgs[])
* Rloc16: 0x0c00
* Done
* DIAG_GET.rsp/ans: 00083efcdb7e3f9eb0f201021800
* Ext Address: '3efcdb7e3f9eb0f2'
* Ext Address: 3efcdb7e3f9eb0f2
* Rloc16: 0x1800
* Done
* @endcode
@@ -7820,10 +7821,12 @@ template <> otError Interpreter::Process<Cmd("networkdiagnostic")>(Arg aArgs[])
* - `16`: Child Table TLV
* - `17`: Channel Pages TLV
* - `19`: Max Child Timeout TLV
* - `23`: EUI64 TLV
* - `24`: Version TLV (version number for the protocols and features)
* - `25`: Vendor Name TLV
* - `26`: Vendor Model TLV
* - `27`: Vendor SW Version TLV
* - `28`: Thread Stack Version TLV
* - `28`: Thread Stack Version TLV (version identifier as UTF-8 string for Thread stack codebase/commit/version)
* - `29`: Child TLV
* - `34`: MLE Counters TLV
* @par
@@ -7848,8 +7851,9 @@ template <> otError Interpreter::Process<Cmd("networkdiagnostic")>(Arg aArgs[])
* @cparam networkdiagnostic reset @ca{addr} @ca{type(s)}
* @par
* Sends a network diagnostic request to reset the specified Type Length Values (TLVs)
* on the specified address(es). The only supported TLV value at this time for this
* command is `9` (MAC Counters TLV).
* on the specified address(es). This command only supports the
* following TLV values: `9` (MAC Counters TLV) or `34` (MLE
* Counters TLV)
* @sa otThreadSendDiagnosticReset
*/
else if (aArgs[0] == "reset")
@@ -7912,7 +7916,7 @@ void Interpreter::HandleDiagnosticGetResponse(otError aError,
switch (diagTlv.mType)
{
case OT_NETWORK_DIAGNOSTIC_TLV_EXT_ADDRESS:
OutputFormat("Ext Address: '");
OutputFormat("Ext Address: ");
OutputExtAddressLine(diagTlv.mData.mExtAddress);
break;
case OT_NETWORK_DIAGNOSTIC_TLV_SHORT_ADDRESS:
@@ -7938,7 +7942,7 @@ void Interpreter::HandleDiagnosticGetResponse(otError aError,
OutputLeaderData(kIndentSize, diagTlv.mData.mLeaderData);
break;
case OT_NETWORK_DIAGNOSTIC_TLV_NETWORK_DATA:
OutputFormat("Network Data: '");
OutputFormat("Network Data: ");
OutputBytesLine(diagTlv.mData.mNetworkData.m8, diagTlv.mData.mNetworkData.mCount);
break;
case OT_NETWORK_DIAGNOSTIC_TLV_IP6_ADDR_LIST:
@@ -7979,6 +7983,10 @@ void Interpreter::HandleDiagnosticGetResponse(otError aError,
case OT_NETWORK_DIAGNOSTIC_TLV_MAX_CHILD_TIMEOUT:
OutputLine("Max Child Timeout: %lu", ToUlong(diagTlv.mData.mMaxChildTimeout));
break;
case OT_NETWORK_DIAGNOSTIC_TLV_EUI64:
OutputFormat("EUI64: ");
OutputExtAddressLine(diagTlv.mData.mEui64);
break;
case OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_NAME:
OutputLine("Vendor Name: %s", diagTlv.mData.mVendorName);
break;
+13
View File
@@ -267,6 +267,15 @@ Error Server::AppendDiagTlv(uint8_t aTlvType, Message &aMessage)
error = Tlv::Append<ModeTlv>(aMessage, Get<Mle::MleRouter>().GetDeviceMode().Get());
break;
case Tlv::kEui64:
{
Mac::ExtAddress eui64;
Get<Radio>().GetIeeeEui64(eui64);
error = Tlv::Append<Eui64Tlv>(aMessage, eui64);
break;
}
case Tlv::kVersion:
error = Tlv::Append<VersionTlv>(aMessage, kThreadVersion);
break;
@@ -1196,6 +1205,10 @@ Error Client::GetNextDiagTlv(const Coap::Message &aMessage, Iterator &aIterator,
SuccessOrExit(error = Tlv::Read<MaxChildTimeoutTlv>(aMessage, offset, aTlvInfo.mData.mMaxChildTimeout));
break;
case Tlv::kEui64:
SuccessOrExit(error = Tlv::Read<Eui64Tlv>(aMessage, offset, AsCoreType(&aTlvInfo.mData.mEui64)));
break;
case Tlv::kVersion:
SuccessOrExit(error = Tlv::Read<VersionTlv>(aMessage, offset, aTlvInfo.mData.mVersion));
break;
@@ -84,6 +84,7 @@ public:
kChannelPages = OT_NETWORK_DIAGNOSTIC_TLV_CHANNEL_PAGES,
kTypeList = OT_NETWORK_DIAGNOSTIC_TLV_TYPE_LIST,
kMaxChildTimeout = OT_NETWORK_DIAGNOSTIC_TLV_MAX_CHILD_TIMEOUT,
kEui64 = OT_NETWORK_DIAGNOSTIC_TLV_EUI64,
kVersion = OT_NETWORK_DIAGNOSTIC_TLV_VERSION,
kVendorName = OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_NAME,
kVendorModel = OT_NETWORK_DIAGNOSTIC_TLV_VENDOR_MODEL,
@@ -199,6 +200,12 @@ typedef TlvInfo<Tlv::kChildTable> ChildTableTlv;
*/
typedef UintTlvInfo<Tlv::kMaxChildTimeout, uint32_t> MaxChildTimeoutTlv;
/**
* Defines Eui64 TLV constants and types.
*
*/
typedef SimpleTlvInfo<Tlv::kEui64, Mac::ExtAddress> Eui64Tlv;
/**
* Defines Version TLV constants and types.
*