diff options
author | Rongli Sun <rongli@google.com> | 2024-01-30 08:02:50 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-29 16:02:50 -0800 |
commit | c73829fdbf5b0019dc611e913674021492c3fa9e (patch) | |
tree | 388b53ef35e6477704a09767ae56127b39e177e8 | |
parent | 4dae833c54b0268a6bc1f805722fad917524db8f (diff) | |
download | openthread-c73829fdbf5b0019dc611e913674021492c3fa9e.tar.gz |
[net-diag] add Eui64Tlv support (#9795)
-rw-r--r-- | include/openthread/instance.h | 2 | ||||
-rw-r--r-- | include/openthread/netdiag.h | 57 | ||||
-rw-r--r-- | src/cli/cli.cpp | 24 | ||||
-rw-r--r-- | src/core/thread/network_diagnostic.cpp | 13 | ||||
-rw-r--r-- | src/core/thread/network_diagnostic_tlvs.hpp | 7 |
5 files changed, 67 insertions, 36 deletions
diff --git a/include/openthread/instance.h b/include/openthread/instance.h index f94151c36..cab6333a3 100644 --- a/include/openthread/instance.h +++ b/include/openthread/instance.h @@ -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 diff --git a/include/openthread/netdiag.h b/include/openthread/netdiag.h index 040ad75d1..955595257 100644 --- a/include/openthread/netdiag.h +++ b/include/openthread/netdiag.h @@ -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; diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index eecfeecf2..78c1ee807 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -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; diff --git a/src/core/thread/network_diagnostic.cpp b/src/core/thread/network_diagnostic.cpp index c331dc428..724b6a9cb 100644 --- a/src/core/thread/network_diagnostic.cpp +++ b/src/core/thread/network_diagnostic.cpp @@ -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; diff --git a/src/core/thread/network_diagnostic_tlvs.hpp b/src/core/thread/network_diagnostic_tlvs.hpp index e867e0fa0..2efa744f4 100644 --- a/src/core/thread/network_diagnostic_tlvs.hpp +++ b/src/core/thread/network_diagnostic_tlvs.hpp @@ -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, @@ -200,6 +201,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. * */ |