From 5c5f79d96dec8d28cfbb3316c1882e1e99958e92 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Fri, 26 May 2023 00:37:21 -0400 Subject: [PATCH] Align Thread Network Diagnostics XML to the spec. Spec changes happened in https://github.com/CHIP-Specifications/connectedhomeip-spec/pull/6169 and https://github.com/CHIP-Specifications/connectedhomeip-spec/pull/6338 Fixes https://github.com/project-chip/connectedhomeip/issues/25339 --- .../linux/AllClustersCommandDelegate.cpp | 10 ++-- .../GenericFaultTestEventTriggerDelegate.cpp | 11 ++-- src/app/common/templates/config-data.yaml | 2 - .../thread-network-diagnostics-cluster.xml | 20 ++++---- .../CHIP/templates/availability.yaml | 50 +++++++++++++++++-- .../Linux/DiagnosticDataProviderImpl.cpp | 6 +-- ...nericThreadStackManagerImpl_OpenThread.hpp | 26 +++++----- .../BL702/DiagnosticDataProviderImpl.cpp | 6 +-- .../DiagnosticDataProviderImpl.cpp | 8 +-- .../mt793x/DiagnosticDataProviderImpl.cpp | 6 +-- .../qpg/DiagnosticDataProviderImpl.cpp | 8 +-- .../silabs/DiagnosticDataProviderImpl.cpp | 6 +-- .../webos/DiagnosticDataProviderImpl.cpp | 6 +-- 13 files changed, 106 insertions(+), 59 deletions(-) diff --git a/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp b/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp index 503bab4f001066..e3118377d51772 100644 --- a/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp +++ b/examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp @@ -214,12 +214,12 @@ void AllClustersAppCommandHandler::OnGeneralFaultEventHandler(uint32_t eventId) GeneralFaults current; // On Linux Simulation, set following radio faults statically. - ReturnOnFailure(previous.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnOnFailure(previous.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); + ReturnOnFailure(previous.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kHardwareFailure))); + ReturnOnFailure(previous.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kNetworkJammed))); - ReturnOnFailure(current.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnOnFailure(current.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); - ReturnOnFailure(current.add(EMBER_ZCL_NETWORK_FAULT_ENUM_CONNECTION_FAILED)); + ReturnOnFailure(current.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kHardwareFailure))); + ReturnOnFailure(current.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kNetworkJammed))); + ReturnOnFailure(current.add(to_underlying(Clusters::GeneralDiagnostics::NetworkFaultEnum::kConnectionFailed))); Clusters::GeneralDiagnosticsServer::Instance().OnNetworkFaultsDetect(previous, current); } else diff --git a/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp b/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp index 3d4fd54f5b8b4b..41062c7cb4fe21 100644 --- a/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp +++ b/src/app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.cpp @@ -67,12 +67,13 @@ CHIP_ERROR GenericFaultTestEventTriggerDelegate::HandleEventTrigger(uint64_t eve GeneralFaults networkFaultsCurrent; // Network faults injections - ReturnErrorOnFailure(networkFaultsPrevious.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnErrorOnFailure(networkFaultsPrevious.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); + using app::Clusters::GeneralDiagnostics::NetworkFaultEnum; + ReturnErrorOnFailure(networkFaultsPrevious.add(to_underlying(NetworkFaultEnum::kHardwareFailure))); + ReturnErrorOnFailure(networkFaultsPrevious.add(to_underlying(NetworkFaultEnum::kNetworkJammed))); - ReturnErrorOnFailure(networkFaultsCurrent.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnErrorOnFailure(networkFaultsCurrent.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); - ReturnErrorOnFailure(networkFaultsCurrent.add(EMBER_ZCL_NETWORK_FAULT_ENUM_CONNECTION_FAILED)); + ReturnErrorOnFailure(networkFaultsCurrent.add(to_underlying(NetworkFaultEnum::kHardwareFailure))); + ReturnErrorOnFailure(networkFaultsCurrent.add(to_underlying(NetworkFaultEnum::kNetworkJammed))); + ReturnErrorOnFailure(networkFaultsCurrent.add(to_underlying(NetworkFaultEnum::kConnectionFailed))); app::Clusters::GeneralDiagnosticsServer::Instance().OnNetworkFaultsDetect(networkFaultsPrevious, networkFaultsCurrent); } diff --git a/src/app/common/templates/config-data.yaml b/src/app/common/templates/config-data.yaml index 1d73fff9b0bcfe..d07c3e35246bfd 100644 --- a/src/app/common/templates/config-data.yaml +++ b/src/app/common/templates/config-data.yaml @@ -8,10 +8,8 @@ WeakEnums: - EnhancedColorMode - InterfaceTypeEnum - MoveMode - - NetworkFaultEnum - PHYRateEnum - RadioFaultEnum - - RoutingRole - StepMode DefineBitmaps: diff --git a/src/app/zap-templates/zcl/data-model/chip/thread-network-diagnostics-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/thread-network-diagnostics-cluster.xml index dc97fab3cea554..bfd9197647cb93 100644 --- a/src/app/zap-templates/zcl/data-model/chip/thread-network-diagnostics-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/thread-network-diagnostics-cluster.xml @@ -13,14 +13,14 @@ limitations under the License. --> - + - + @@ -35,7 +35,7 @@ limitations under the License. - + @@ -52,7 +52,7 @@ limitations under the License. - + @@ -92,14 +92,14 @@ limitations under the License. THREAD_NETWORK_DIAGNOSTICS_CLUSTER The Thread Network Diagnostics Cluster provides a means to acquire standardized diagnostics metrics that MAY be used by a Node to assist a user or Administrative Node in diagnosing potential problems Channel - RoutingRole + RoutingRole NetworkName PanId ExtendedPanId MeshLocalPrefix OverrunCount - NeighborTable - RouteTable + NeighborTable + RouteTable PartitionId Weighting DataVersion @@ -153,7 +153,7 @@ limitations under the License. SecurityPolicy ChannelPage0Mask OperationalDatasetComponents - ActiveNetworkFaultsList + ActiveNetworkFaultsList Reception of this command SHALL reset the OverrunCount attributes to 0 @@ -163,8 +163,8 @@ limitations under the License. Indicate a change in the set of network faults currently detected by the Node - - + + diff --git a/src/darwin/Framework/CHIP/templates/availability.yaml b/src/darwin/Framework/CHIP/templates/availability.yaml index 10663dbac8e7d0..f5ade269221210 100644 --- a/src/darwin/Framework/CHIP/templates/availability.yaml +++ b/src/darwin/Framework/CHIP/templates/availability.yaml @@ -3125,8 +3125,11 @@ - NetworkFaultType - RadioFaultType ThreadNetworkDiagnostics: - - NetworkFault - - RoutingRole + # NetworkFaultEnum and RoutingRoleEnum were originally just named + # NetworkFault and RoutingRole, but we generate the same API for + # both of those names, so the name can just change here. + - NetworkFaultEnum + - RoutingRoleEnum - ThreadConnectionStatus WiFiNetworkDiagnostics: # AssociationFailureCauseEnum was originally just named @@ -3519,12 +3522,15 @@ - BLEFault - EthernetFault ThreadNetworkDiagnostics: - NetworkFault: + # NetworkFaultEnum and RoutingRoleEnum were originally just named + # NetworkFault and RoutingRole, but we generate the same API for + # both of those names, so the name can just change here. + NetworkFaultEnum: - Unspecified - LinkDown - HardwareFailure - NetworkJammed - RoutingRole: + RoutingRoleEnum: - Unspecified - Unassigned - SleepyEndDevice @@ -7418,6 +7424,9 @@ - ProductAppearanceStruct TemperatureControl: - TemperatureLevelStruct + ThreadNetworkDiagnostics: + - NeighborTableStruct + - RouteTableStruct struct fields: AccessControl: AccessControlTargetStruct: @@ -7436,6 +7445,33 @@ TemperatureLevelStruct: - label - temperatureLevel + ThreadNetworkDiagnostics: + NeighborTableStruct: + - extAddress + - age + - rloc16 + - linkFrameCounter + - mleFrameCounter + - lqi + - averageRssi + - lastRssi + - frameErrorRate + - messageErrorRate + - rxOnWhenIdle + - fullThreadDevice + - fullNetworkData + - isChild + RouteTableStruct: + - extAddress + - rloc16 + - routerId + - nextHop + - pathCost + - lqiIn + - lqiOut + - age + - allocated + - linkEstablished events: RefrigeratorAlarm: - Notify @@ -7872,6 +7908,9 @@ structs: AccessControl: - Target + ThreadNetworkDiagnostics: + - NeighborTable + - RouteTable bitmaps: Groups: - GroupClusterFeature @@ -7891,6 +7930,9 @@ structs: AccessControl: AccessControlTargetStruct: Target + ThreadNetworkDiagnostics: + NeighborTableStruct: NeighborTable + RouteTableStruct: RouteTable enum values: TimeSynchronization: TimeSourceEnum: diff --git a/src/platform/Linux/DiagnosticDataProviderImpl.cpp b/src/platform/Linux/DiagnosticDataProviderImpl.cpp index 3d14605e9de316..b4351970ac9206 100644 --- a/src/platform/Linux/DiagnosticDataProviderImpl.cpp +++ b/src/platform/Linux/DiagnosticDataProviderImpl.cpp @@ -426,9 +426,9 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetActiveNetworkFaults(GeneralFaults::_WriteThreadNetw break; case ThreadNetworkDiagnostics::Attributes::RoutingRole::Id: { - ThreadNetworkDiagnostics::RoutingRole routingRole; + using ThreadNetworkDiagnostics::RoutingRoleEnum; + RoutingRoleEnum routingRole; otDeviceRole otRole = otThreadGetDeviceRole(mOTInst); if (otRole == OT_DEVICE_ROLE_DISABLED) { - routingRole = EMBER_ZCL_ROUTING_ROLE_UNSPECIFIED; + routingRole = RoutingRoleEnum::kUnspecified; } else if (otRole == OT_DEVICE_ROLE_DETACHED) { - routingRole = EMBER_ZCL_ROUTING_ROLE_UNASSIGNED; + routingRole = RoutingRoleEnum::kUnassigned; } else if (otRole == OT_DEVICE_ROLE_ROUTER) { - routingRole = EMBER_ZCL_ROUTING_ROLE_ROUTER; + routingRole = RoutingRoleEnum::kRouter; } else if (otRole == OT_DEVICE_ROLE_LEADER) { - routingRole = EMBER_ZCL_ROUTING_ROLE_LEADER; + routingRole = RoutingRoleEnum::kLeader; } else if (otRole == OT_DEVICE_ROLE_CHILD) { @@ -1086,17 +1087,17 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::_WriteThreadNetw if (linkMode.mRxOnWhenIdle) { - routingRole = EMBER_ZCL_ROUTING_ROLE_END_DEVICE; + routingRole = RoutingRoleEnum::kEndDevice; #if CHIP_DEVICE_CONFIG_THREAD_FTD if (otThreadIsRouterEligible(mOTInst)) { - routingRole = EMBER_ZCL_ROUTING_ROLE_REED; + routingRole = RoutingRoleEnum::kReed; } #endif } else { - routingRole = EMBER_ZCL_ROUTING_ROLE_SLEEPY_END_DEVICE; + routingRole = RoutingRoleEnum::kSleepyEndDevice; } } @@ -1149,7 +1150,7 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::_WriteThreadNetw while (otThreadGetNextNeighborInfo(mOTInst, &iterator, &neighInfo) == OT_ERROR_NONE) { - ThreadNetworkDiagnostics::Structs::NeighborTable::Type neighborTable; + ThreadNetworkDiagnostics::Structs::NeighborTableStruct::Type neighborTable; app::DataModel::Nullable averageRssi; app::DataModel::Nullable lastRssi; @@ -1209,7 +1210,7 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::_WriteThreadNetw { if (otThreadGetRouterInfo(mOTInst, i, &routerInfo) == OT_ERROR_NONE) { - ThreadNetworkDiagnostics::Structs::RouteTable::Type routeTable; + ThreadNetworkDiagnostics::Structs::RouteTableStruct::Type routeTable; routeTable.extAddress = Encoding::BigEndian::Get64(routerInfo.mExtAddress.m8); routeTable.rloc16 = routerInfo.mRloc16; @@ -1233,7 +1234,7 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::_WriteThreadNetw otError otErr = otThreadGetParentInfo(mOTInst, &routerInfo); ReturnErrorOnFailure(MapOpenThreadError(otErr)); - ThreadNetworkDiagnostics::Structs::RouteTable::Type routeTable; + ThreadNetworkDiagnostics::Structs::RouteTableStruct::Type routeTable; routeTable.extAddress = Encoding::BigEndian::Get64(routerInfo.mExtAddress.m8); routeTable.rloc16 = routerInfo.mRloc16; @@ -1661,7 +1662,8 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::_WriteThreadNetw case ThreadNetworkDiagnostics::Attributes::ActiveNetworkFaultsList::Id: { err = encoder.EncodeList([](const auto & aEncoder) -> CHIP_ERROR { // TODO activeNetworkFaultsList isn't tracked. Encode the list of 4 entries at 0 none the less - ThreadNetworkDiagnostics::NetworkFault activeNetworkFaultsList[4] = { ThreadNetworkDiagnostics::NetworkFault(0) }; + ThreadNetworkDiagnostics::NetworkFaultEnum activeNetworkFaultsList[4] = { ThreadNetworkDiagnostics::NetworkFaultEnum( + 0) }; for (auto fault : activeNetworkFaultsList) { ReturnErrorOnFailure(aEncoder.Encode(fault)); diff --git a/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp b/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp index 4716c9cad033ff..acdf61e27caa26 100644 --- a/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp +++ b/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp @@ -233,9 +233,9 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetActiveRadioFaults(GeneralFaults & networkFaults) { #if CHIP_CONFIG_TEST - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_CONNECTION_FAILED)); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kHardwareFailure))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kNetworkJammed))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kConnectionFailed))); #endif return CHIP_NO_ERROR; diff --git a/src/platform/cc13xx_26xx/DiagnosticDataProviderImpl.cpp b/src/platform/cc13xx_26xx/DiagnosticDataProviderImpl.cpp index 07eefd23ca3b9a..ead676bcf81bfe 100644 --- a/src/platform/cc13xx_26xx/DiagnosticDataProviderImpl.cpp +++ b/src/platform/cc13xx_26xx/DiagnosticDataProviderImpl.cpp @@ -229,9 +229,11 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetActiveRadioFaults(GeneralFaults & networkFaults) { #if CHIP_CONFIG_TEST - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_CONNECTION_FAILED)); + using app::Clusters::GeneralDiagnostics::NetworkFaultEnum; + + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kHardwareFailure))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kNetworkJammed))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kConnectionFailed))); #endif return CHIP_NO_ERROR; diff --git a/src/platform/mt793x/DiagnosticDataProviderImpl.cpp b/src/platform/mt793x/DiagnosticDataProviderImpl.cpp index faf5407c832b54..504c4e3161c7ed 100644 --- a/src/platform/mt793x/DiagnosticDataProviderImpl.cpp +++ b/src/platform/mt793x/DiagnosticDataProviderImpl.cpp @@ -192,9 +192,9 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetActiveRadioFaults(GeneralFaults & networkFaults) { #if CHIP_CONFIG_TEST - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_CONNECTION_FAILED)); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kHardwareFailure))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kNetworkJammed))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kConnectionFailed))); #endif return CHIP_NO_ERROR; diff --git a/src/platform/qpg/DiagnosticDataProviderImpl.cpp b/src/platform/qpg/DiagnosticDataProviderImpl.cpp index 01f58a4d179f10..2a0ef745f50719 100644 --- a/src/platform/qpg/DiagnosticDataProviderImpl.cpp +++ b/src/platform/qpg/DiagnosticDataProviderImpl.cpp @@ -171,9 +171,11 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetActiveNetworkFaults(GeneralFaults & networkFaults) { #if CHIP_CONFIG_TEST - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_HARDWARE_FAILURE)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_NETWORK_JAMMED)); - ReturnErrorOnFailure(networkFaults.add(EMBER_ZCL_NETWORK_FAULT_ENUM_CONNECTION_FAILED)); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kHardwareFailure))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kNetworkJammed))); + ReturnErrorOnFailure(networkFaults.add(to_underlying(NetworkFaultEnum::kConnectionFailed))); #endif return CHIP_NO_ERROR; diff --git a/src/platform/webos/DiagnosticDataProviderImpl.cpp b/src/platform/webos/DiagnosticDataProviderImpl.cpp index e7f3f979f01e8c..cf0a550243e09b 100644 --- a/src/platform/webos/DiagnosticDataProviderImpl.cpp +++ b/src/platform/webos/DiagnosticDataProviderImpl.cpp @@ -412,9 +412,9 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetActiveNetworkFaults(GeneralFaults