aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRongli Sun <rongli@google.com>2024-01-30 08:02:50 +0800
committerGitHub <noreply@github.com>2024-01-29 16:02:50 -0800
commitc73829fdbf5b0019dc611e913674021492c3fa9e (patch)
tree388b53ef35e6477704a09767ae56127b39e177e8
parent4dae833c54b0268a6bc1f805722fad917524db8f (diff)
downloadopenthread-c73829fdbf5b0019dc611e913674021492c3fa9e.tar.gz
[net-diag] add Eui64Tlv support (#9795)
-rw-r--r--include/openthread/instance.h2
-rw-r--r--include/openthread/netdiag.h57
-rw-r--r--src/cli/cli.cpp24
-rw-r--r--src/core/thread/network_diagnostic.cpp13
-rw-r--r--src/core/thread/network_diagnostic_tlvs.hpp7
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.
*
*/