diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter index 57424669a63bf5..342b67aa58294d 100644 --- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter +++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter @@ -1456,11 +1456,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/bridge-app/bridge-common/bridge-app.matter b/examples/bridge-app/bridge-common/bridge-app.matter index c097c824910f5e..16064f2712bd91 100644 --- a/examples/bridge-app/bridge-common/bridge-app.matter +++ b/examples/bridge-app/bridge-common/bridge-app.matter @@ -388,11 +388,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/door-lock-app/door-lock-common/door-lock-app.matter b/examples/door-lock-app/door-lock-common/door-lock-app.matter index 82cf27d5d76245..91d97524c603cb 100644 --- a/examples/door-lock-app/door-lock-common/door-lock-app.matter +++ b/examples/door-lock-app/door-lock-common/door-lock-app.matter @@ -865,11 +865,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.matter b/examples/light-switch-app/light-switch-common/light-switch-app.matter index 4d55543b099037..769334b947552f 100644 --- a/examples/light-switch-app/light-switch-common/light-switch-app.matter +++ b/examples/light-switch-app/light-switch-common/light-switch-app.matter @@ -577,11 +577,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/lighting-app/lighting-common/lighting-app.matter b/examples/lighting-app/lighting-common/lighting-app.matter index 82aae8a7c09438..364141a38a3229 100644 --- a/examples/lighting-app/lighting-common/lighting-app.matter +++ b/examples/lighting-app/lighting-common/lighting-app.matter @@ -582,11 +582,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/lock-app/lock-common/lock-app.matter b/examples/lock-app/lock-common/lock-app.matter index d161f034fdb9f9..c54a037b6b77e6 100644 --- a/examples/lock-app/lock-common/lock-app.matter +++ b/examples/lock-app/lock-common/lock-app.matter @@ -326,11 +326,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/pump-app/pump-common/pump-app.matter b/examples/pump-app/pump-common/pump-app.matter index de2aa63cf68a37..9024c4a36a53f7 100644 --- a/examples/pump-app/pump-common/pump-app.matter +++ b/examples/pump-app/pump-common/pump-app.matter @@ -313,11 +313,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter b/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter index ea637490d1d035..24cd9e4e4f74e4 100644 --- a/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter +++ b/examples/pump-controller-app/pump-controller-common/pump-controller-app.matter @@ -333,11 +333,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/temperature-measurement-app/esp32/main/temperature-measurement.matter b/examples/temperature-measurement-app/esp32/main/temperature-measurement.matter index 154ca83bea567c..f5b7af9d53f4e0 100644 --- a/examples/temperature-measurement-app/esp32/main/temperature-measurement.matter +++ b/examples/temperature-measurement-app/esp32/main/temperature-measurement.matter @@ -326,11 +326,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/thermostat/thermostat-common/thermostat.matter b/examples/thermostat/thermostat-common/thermostat.matter index 2fe1a8271cb6b0..8c47ac9fd503ff 100644 --- a/examples/thermostat/thermostat-common/thermostat.matter +++ b/examples/thermostat/thermostat-common/thermostat.matter @@ -347,11 +347,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/tv-app/tv-common/tv-app.matter b/examples/tv-app/tv-common/tv-app.matter index 0990bab3085362..b3ef100a46a0f3 100644 --- a/examples/tv-app/tv-common/tv-app.matter +++ b/examples/tv-app/tv-common/tv-app.matter @@ -713,11 +713,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter index 72e903d463b8bd..04ba2a210e3e6c 100644 --- a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter +++ b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter @@ -1379,11 +1379,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/examples/window-app/common/window-app.matter b/examples/window-app/common/window-app.matter index acdbe50dee1417..f654ca17cfaefe 100644 --- a/examples/window-app/common/window-app.matter +++ b/examples/window-app/common/window-app.matter @@ -296,11 +296,21 @@ server cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/src/app/zap-templates/zcl/data-model/chip/general-diagnostics-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/general-diagnostics-cluster.xml index 86ca9d621ecbe9..0793b3a2614cbf 100644 --- a/src/app/zap-templates/zcl/data-model/chip/general-diagnostics-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/general-diagnostics-cluster.xml @@ -16,6 +16,14 @@ limitations under the License. --> + + + + + + + + @@ -68,11 +76,14 @@ limitations under the License. - + + + + @@ -86,9 +97,9 @@ limitations under the License. UpTime TotalOperationalHours BootReasons - ActiveHardwareFaults - ActiveRadioFaults - ActiveNetworkFaults + ActiveHardwareFaults + ActiveRadioFaults + ActiveNetworkFaults Indicate a change in the set of hardware faults currently detected by the Node. diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter index 26c513740f0e1d..c79e590dc17131 100644 --- a/src/controller/data_model/controller-clusters.matter +++ b/src/controller/data_model/controller-clusters.matter @@ -1768,11 +1768,21 @@ client cluster GeneralDiagnostics = 51 { struct NetworkInterfaceType { CHAR_STRING<32> name = 0; - BOOLEAN fabricConnected = 1; + BOOLEAN isOperational = 1; BOOLEAN offPremiseServicesReachableIPv4 = 2; BOOLEAN offPremiseServicesReachableIPv6 = 3; OCTET_STRING<8> hardwareAddress = 4; - InterfaceType type = 5; + IPv4Addr IPv4Addresses[] = 5; + IPv6Addr IPv6Addresses[] = 6; + InterfaceType type = 7; + } + + struct IPv4Addr { + OCTET_STRING<4> addr = 0; + } + + struct IPv6Addr { + OCTET_STRING<16> addr = 0; } critical event HardwareFaultChange = 0 { diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp index 16c6954b0dddec..8e205117d67db1 100644 --- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp +++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp @@ -5396,12 +5396,12 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR jobject newElement_0; jobject newElement_0_name; newElement_0_name = env->NewStringUTF(std::string(entry_0.name.data(), entry_0.name.size()).c_str()); - jobject newElement_0_fabricConnected; - std::string newElement_0_fabricConnectedClassName = "java/lang/Boolean"; - std::string newElement_0_fabricConnectedCtorSignature = "(Z)V"; - chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_fabricConnectedClassName.c_str(), - newElement_0_fabricConnectedCtorSignature.c_str(), - entry_0.fabricConnected, newElement_0_fabricConnected); + jobject newElement_0_isOperational; + std::string newElement_0_isOperationalClassName = "java/lang/Boolean"; + std::string newElement_0_isOperationalCtorSignature = "(Z)V"; + chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_isOperationalClassName.c_str(), + newElement_0_isOperationalCtorSignature.c_str(), + entry_0.isOperational, newElement_0_isOperational); jobject newElement_0_offPremiseServicesReachableIPv4; std::string newElement_0_offPremiseServicesReachableIPv4ClassName = "java/lang/Boolean"; std::string newElement_0_offPremiseServicesReachableIPv4CtorSignature = "(Z)V"; @@ -5423,6 +5423,72 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR static_cast(entry_0.hardwareAddress.size()), reinterpret_cast(entry_0.hardwareAddress.data())); newElement_0_hardwareAddress = newElement_0_hardwareAddressByteArray; + jobject newElement_0_IPv4Addresses; + chip::JniReferences::GetInstance().CreateArrayList(newElement_0_IPv4Addresses); + + auto iter_newElement_0_IPv4Addresses_NaN = entry_0.IPv4Addresses.begin(); + while (iter_newElement_0_IPv4Addresses_NaN.Next()) + { + auto & entry_NaN = iter_newElement_0_IPv4Addresses_NaN.GetValue(); + jobject newElement_NaN; + jobject newElement_NaN_addr; + jbyteArray newElement_NaN_addrByteArray = env->NewByteArray(static_cast(entry_NaN.addr.size())); + env->SetByteArrayRegion(newElement_NaN_addrByteArray, 0, static_cast(entry_NaN.addr.size()), + reinterpret_cast(entry_NaN.addr.data())); + newElement_NaN_addr = newElement_NaN_addrByteArray; + + jclass IPv4AddrStructClass; + err = chip::JniReferences::GetInstance().GetClassRef( + env, "chip/devicecontroller/ChipStructs$GeneralDiagnosticsClusterIPv4Addr", IPv4AddrStructClass); + if (err != CHIP_NO_ERROR) + { + ChipLogError(Zcl, "Could not find class ChipStructs$GeneralDiagnosticsClusterIPv4Addr"); + return nullptr; + } + chip::JniClass structJniClass(IPv4AddrStructClass); + jmethodID IPv4AddrStructCtor = env->GetMethodID(IPv4AddrStructClass, "", "([B)V"); + if (IPv4AddrStructCtor == nullptr) + { + ChipLogError(Zcl, "Could not find ChipStructs$GeneralDiagnosticsClusterIPv4Addr constructor"); + return nullptr; + } + + newElement_NaN = env->NewObject(IPv4AddrStructClass, IPv4AddrStructCtor, newElement_NaN_addr); + chip::JniReferences::GetInstance().AddToArrayList(newElement_0_IPv4Addresses, newElement_NaN); + } + jobject newElement_0_IPv6Addresses; + chip::JniReferences::GetInstance().CreateArrayList(newElement_0_IPv6Addresses); + + auto iter_newElement_0_IPv6Addresses_NaN = entry_0.IPv6Addresses.begin(); + while (iter_newElement_0_IPv6Addresses_NaN.Next()) + { + auto & entry_NaN = iter_newElement_0_IPv6Addresses_NaN.GetValue(); + jobject newElement_NaN; + jobject newElement_NaN_addr; + jbyteArray newElement_NaN_addrByteArray = env->NewByteArray(static_cast(entry_NaN.addr.size())); + env->SetByteArrayRegion(newElement_NaN_addrByteArray, 0, static_cast(entry_NaN.addr.size()), + reinterpret_cast(entry_NaN.addr.data())); + newElement_NaN_addr = newElement_NaN_addrByteArray; + + jclass IPv6AddrStructClass; + err = chip::JniReferences::GetInstance().GetClassRef( + env, "chip/devicecontroller/ChipStructs$GeneralDiagnosticsClusterIPv6Addr", IPv6AddrStructClass); + if (err != CHIP_NO_ERROR) + { + ChipLogError(Zcl, "Could not find class ChipStructs$GeneralDiagnosticsClusterIPv6Addr"); + return nullptr; + } + chip::JniClass structJniClass(IPv6AddrStructClass); + jmethodID IPv6AddrStructCtor = env->GetMethodID(IPv6AddrStructClass, "", "([B)V"); + if (IPv6AddrStructCtor == nullptr) + { + ChipLogError(Zcl, "Could not find ChipStructs$GeneralDiagnosticsClusterIPv6Addr constructor"); + return nullptr; + } + + newElement_NaN = env->NewObject(IPv6AddrStructClass, IPv6AddrStructCtor, newElement_NaN_addr); + chip::JniReferences::GetInstance().AddToArrayList(newElement_0_IPv6Addresses, newElement_NaN); + } jobject newElement_0_type; std::string newElement_0_typeClassName = "java/lang/Integer"; std::string newElement_0_typeCtorSignature = "(I)V"; @@ -5440,19 +5506,20 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR return nullptr; } chip::JniClass structJniClass(networkInterfaceTypeStructClass); - jmethodID networkInterfaceTypeStructCtor = env->GetMethodID( - networkInterfaceTypeStructClass, "", - "(Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;[BLjava/lang/Integer;)V"); + jmethodID networkInterfaceTypeStructCtor = + env->GetMethodID(networkInterfaceTypeStructClass, "", + "(Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;[BLjava/util/" + "ArrayList;Ljava/util/ArrayList;Ljava/lang/Integer;)V"); if (networkInterfaceTypeStructCtor == nullptr) { ChipLogError(Zcl, "Could not find ChipStructs$GeneralDiagnosticsClusterNetworkInterfaceType constructor"); return nullptr; } - newElement_0 = - env->NewObject(networkInterfaceTypeStructClass, networkInterfaceTypeStructCtor, newElement_0_name, - newElement_0_fabricConnected, newElement_0_offPremiseServicesReachableIPv4, - newElement_0_offPremiseServicesReachableIPv6, newElement_0_hardwareAddress, newElement_0_type); + newElement_0 = env->NewObject(networkInterfaceTypeStructClass, networkInterfaceTypeStructCtor, newElement_0_name, + newElement_0_isOperational, newElement_0_offPremiseServicesReachableIPv4, + newElement_0_offPremiseServicesReachableIPv6, newElement_0_hardwareAddress, + newElement_0_IPv4Addresses, newElement_0_IPv6Addresses, newElement_0_type); chip::JniReferences::GetInstance().AddToArrayList(value, newElement_0); } return value; diff --git a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp index 34ddf3fbb76759..e5f153626b7007 100644 --- a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp +++ b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp @@ -7443,12 +7443,12 @@ void CHIPGeneralDiagnosticsNetworkInterfacesAttributeCallback::CallbackFn( jobject newElement_0; jobject newElement_0_name; newElement_0_name = env->NewStringUTF(std::string(entry_0.name.data(), entry_0.name.size()).c_str()); - jobject newElement_0_fabricConnected; - std::string newElement_0_fabricConnectedClassName = "java/lang/Boolean"; - std::string newElement_0_fabricConnectedCtorSignature = "(Z)V"; - chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_fabricConnectedClassName.c_str(), - newElement_0_fabricConnectedCtorSignature.c_str(), - entry_0.fabricConnected, newElement_0_fabricConnected); + jobject newElement_0_isOperational; + std::string newElement_0_isOperationalClassName = "java/lang/Boolean"; + std::string newElement_0_isOperationalCtorSignature = "(Z)V"; + chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_isOperationalClassName.c_str(), + newElement_0_isOperationalCtorSignature.c_str(), + entry_0.isOperational, newElement_0_isOperational); jobject newElement_0_offPremiseServicesReachableIPv4; std::string newElement_0_offPremiseServicesReachableIPv4ClassName = "java/lang/Boolean"; std::string newElement_0_offPremiseServicesReachableIPv4CtorSignature = "(Z)V"; @@ -7468,6 +7468,72 @@ void CHIPGeneralDiagnosticsNetworkInterfacesAttributeCallback::CallbackFn( env->SetByteArrayRegion(newElement_0_hardwareAddressByteArray, 0, static_cast(entry_0.hardwareAddress.size()), reinterpret_cast(entry_0.hardwareAddress.data())); newElement_0_hardwareAddress = newElement_0_hardwareAddressByteArray; + jobject newElement_0_IPv4Addresses; + chip::JniReferences::GetInstance().CreateArrayList(newElement_0_IPv4Addresses); + + auto iter_newElement_0_IPv4Addresses_NaN = entry_0.IPv4Addresses.begin(); + while (iter_newElement_0_IPv4Addresses_NaN.Next()) + { + auto & entry_NaN = iter_newElement_0_IPv4Addresses_NaN.GetValue(); + jobject newElement_NaN; + jobject newElement_NaN_addr; + jbyteArray newElement_NaN_addrByteArray = env->NewByteArray(static_cast(entry_NaN.addr.size())); + env->SetByteArrayRegion(newElement_NaN_addrByteArray, 0, static_cast(entry_NaN.addr.size()), + reinterpret_cast(entry_NaN.addr.data())); + newElement_NaN_addr = newElement_NaN_addrByteArray; + + jclass IPv4AddrStructClass; + err = chip::JniReferences::GetInstance().GetClassRef( + env, "chip/devicecontroller/ChipStructs$GeneralDiagnosticsClusterIPv4Addr", IPv4AddrStructClass); + if (err != CHIP_NO_ERROR) + { + ChipLogError(Zcl, "Could not find class ChipStructs$GeneralDiagnosticsClusterIPv4Addr"); + return; + } + chip::JniClass structJniClass(IPv4AddrStructClass); + jmethodID IPv4AddrStructCtor = env->GetMethodID(IPv4AddrStructClass, "", "([B)V"); + if (IPv4AddrStructCtor == nullptr) + { + ChipLogError(Zcl, "Could not find ChipStructs$GeneralDiagnosticsClusterIPv4Addr constructor"); + return; + } + + newElement_NaN = env->NewObject(IPv4AddrStructClass, IPv4AddrStructCtor, newElement_NaN_addr); + chip::JniReferences::GetInstance().AddToArrayList(newElement_0_IPv4Addresses, newElement_NaN); + } + jobject newElement_0_IPv6Addresses; + chip::JniReferences::GetInstance().CreateArrayList(newElement_0_IPv6Addresses); + + auto iter_newElement_0_IPv6Addresses_NaN = entry_0.IPv6Addresses.begin(); + while (iter_newElement_0_IPv6Addresses_NaN.Next()) + { + auto & entry_NaN = iter_newElement_0_IPv6Addresses_NaN.GetValue(); + jobject newElement_NaN; + jobject newElement_NaN_addr; + jbyteArray newElement_NaN_addrByteArray = env->NewByteArray(static_cast(entry_NaN.addr.size())); + env->SetByteArrayRegion(newElement_NaN_addrByteArray, 0, static_cast(entry_NaN.addr.size()), + reinterpret_cast(entry_NaN.addr.data())); + newElement_NaN_addr = newElement_NaN_addrByteArray; + + jclass IPv6AddrStructClass; + err = chip::JniReferences::GetInstance().GetClassRef( + env, "chip/devicecontroller/ChipStructs$GeneralDiagnosticsClusterIPv6Addr", IPv6AddrStructClass); + if (err != CHIP_NO_ERROR) + { + ChipLogError(Zcl, "Could not find class ChipStructs$GeneralDiagnosticsClusterIPv6Addr"); + return; + } + chip::JniClass structJniClass(IPv6AddrStructClass); + jmethodID IPv6AddrStructCtor = env->GetMethodID(IPv6AddrStructClass, "", "([B)V"); + if (IPv6AddrStructCtor == nullptr) + { + ChipLogError(Zcl, "Could not find ChipStructs$GeneralDiagnosticsClusterIPv6Addr constructor"); + return; + } + + newElement_NaN = env->NewObject(IPv6AddrStructClass, IPv6AddrStructCtor, newElement_NaN_addr); + chip::JniReferences::GetInstance().AddToArrayList(newElement_0_IPv6Addresses, newElement_NaN); + } jobject newElement_0_type; std::string newElement_0_typeClassName = "java/lang/Integer"; std::string newElement_0_typeCtorSignature = "(I)V"; @@ -7487,17 +7553,18 @@ void CHIPGeneralDiagnosticsNetworkInterfacesAttributeCallback::CallbackFn( chip::JniClass structJniClass(networkInterfaceTypeStructClass); jmethodID networkInterfaceTypeStructCtor = env->GetMethodID(networkInterfaceTypeStructClass, "", - "(Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;[BLjava/lang/Integer;)V"); + "(Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;[BLjava/util/" + "ArrayList;Ljava/util/ArrayList;Ljava/lang/Integer;)V"); if (networkInterfaceTypeStructCtor == nullptr) { ChipLogError(Zcl, "Could not find ChipStructs$GeneralDiagnosticsClusterNetworkInterfaceType constructor"); return; } - newElement_0 = - env->NewObject(networkInterfaceTypeStructClass, networkInterfaceTypeStructCtor, newElement_0_name, - newElement_0_fabricConnected, newElement_0_offPremiseServicesReachableIPv4, - newElement_0_offPremiseServicesReachableIPv6, newElement_0_hardwareAddress, newElement_0_type); + newElement_0 = env->NewObject(networkInterfaceTypeStructClass, networkInterfaceTypeStructCtor, newElement_0_name, + newElement_0_isOperational, newElement_0_offPremiseServicesReachableIPv4, + newElement_0_offPremiseServicesReachableIPv6, newElement_0_hardwareAddress, + newElement_0_IPv4Addresses, newElement_0_IPv6Addresses, newElement_0_type); chip::JniReferences::GetInstance().AddToArrayList(arrayListObj, newElement_0); } diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java index 6806d59ebb9054..dc4fde895a4289 100644 --- a/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java +++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipStructs.java @@ -667,26 +667,70 @@ public String toString() { } } + public static class GeneralDiagnosticsClusterIPv6Addr { + public byte[] addr; + + public GeneralDiagnosticsClusterIPv6Addr(byte[] addr) { + this.addr = addr; + } + + @Override + public String toString() { + StringBuilder output = new StringBuilder(); + output.append("GeneralDiagnosticsClusterIPv6Addr {\n"); + output.append("\taddr: "); + output.append(Arrays.toString(addr)); + output.append("\n"); + output.append("}\n"); + return output.toString(); + } + } + + public static class GeneralDiagnosticsClusterIPv4Addr { + public byte[] addr; + + public GeneralDiagnosticsClusterIPv4Addr(byte[] addr) { + this.addr = addr; + } + + @Override + public String toString() { + StringBuilder output = new StringBuilder(); + output.append("GeneralDiagnosticsClusterIPv4Addr {\n"); + output.append("\taddr: "); + output.append(Arrays.toString(addr)); + output.append("\n"); + output.append("}\n"); + return output.toString(); + } + } + public static class GeneralDiagnosticsClusterNetworkInterfaceType { public String name; - public Boolean fabricConnected; + public Boolean isOperational; public Boolean offPremiseServicesReachableIPv4; public Boolean offPremiseServicesReachableIPv6; public byte[] hardwareAddress; + public ArrayList IPv4Addresses; + public ArrayList IPv6Addresses; public Integer type; public GeneralDiagnosticsClusterNetworkInterfaceType( String name, - Boolean fabricConnected, + Boolean isOperational, Boolean offPremiseServicesReachableIPv4, Boolean offPremiseServicesReachableIPv6, byte[] hardwareAddress, + ArrayList IPv4Addresses, + ArrayList IPv6Addresses, Integer type) { this.name = name; - this.fabricConnected = fabricConnected; + this.isOperational = isOperational; this.offPremiseServicesReachableIPv4 = offPremiseServicesReachableIPv4; this.offPremiseServicesReachableIPv6 = offPremiseServicesReachableIPv6; this.hardwareAddress = hardwareAddress; + this.IPv4Addresses = IPv4Addresses; + this.IPv6Addresses = IPv6Addresses; this.type = type; } @@ -697,8 +741,8 @@ public String toString() { output.append("\tname: "); output.append(name); output.append("\n"); - output.append("\tfabricConnected: "); - output.append(fabricConnected); + output.append("\tisOperational: "); + output.append(isOperational); output.append("\n"); output.append("\toffPremiseServicesReachableIPv4: "); output.append(offPremiseServicesReachableIPv4); @@ -709,6 +753,12 @@ public String toString() { output.append("\thardwareAddress: "); output.append(Arrays.toString(hardwareAddress)); output.append("\n"); + output.append("\tIPv4Addresses: "); + output.append(IPv4Addresses); + output.append("\n"); + output.append("\tIPv6Addresses: "); + output.append(IPv6Addresses); + output.append("\n"); output.append("\ttype: "); output.append(type); output.append("\n"); diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py index e7d550111e9be4..c5aeaeff7adfcf 100644 --- a/src/controller/python/chip/clusters/Objects.py +++ b/src/controller/python/chip/clusters/Objects.py @@ -10226,6 +10226,28 @@ class RadioFaultType(IntEnum): class Structs: + @dataclass + class IPv6Addr(ClusterObject): + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="addr", Tag=0, Type=bytes), + ]) + + addr: 'bytes' = b"" + + @dataclass + class IPv4Addr(ClusterObject): + @ChipUtility.classproperty + def descriptor(cls) -> ClusterObjectDescriptor: + return ClusterObjectDescriptor( + Fields = [ + ClusterObjectFieldDescriptor(Label="addr", Tag=0, Type=bytes), + ]) + + addr: 'bytes' = b"" + @dataclass class NetworkInterfaceType(ClusterObject): @ChipUtility.classproperty @@ -10233,18 +10255,22 @@ def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields = [ ClusterObjectFieldDescriptor(Label="name", Tag=0, Type=str), - ClusterObjectFieldDescriptor(Label="fabricConnected", Tag=1, Type=bool), + ClusterObjectFieldDescriptor(Label="isOperational", Tag=1, Type=bool), ClusterObjectFieldDescriptor(Label="offPremiseServicesReachableIPv4", Tag=2, Type=bool), ClusterObjectFieldDescriptor(Label="offPremiseServicesReachableIPv6", Tag=3, Type=bool), ClusterObjectFieldDescriptor(Label="hardwareAddress", Tag=4, Type=bytes), - ClusterObjectFieldDescriptor(Label="type", Tag=5, Type=GeneralDiagnostics.Enums.InterfaceType), + ClusterObjectFieldDescriptor(Label="IPv4Addresses", Tag=5, Type=typing.List[GeneralDiagnostics.Structs.IPv4Addr]), + ClusterObjectFieldDescriptor(Label="IPv6Addresses", Tag=6, Type=typing.List[GeneralDiagnostics.Structs.IPv6Addr]), + ClusterObjectFieldDescriptor(Label="type", Tag=7, Type=GeneralDiagnostics.Enums.InterfaceType), ]) name: 'str' = "" - fabricConnected: 'bool' = False + isOperational: 'bool' = False offPremiseServicesReachableIPv4: 'bool' = False offPremiseServicesReachableIPv6: 'bool' = False hardwareAddress: 'bytes' = b"" + IPv4Addresses: 'typing.List[GeneralDiagnostics.Structs.IPv4Addr]' = field(default_factory=lambda: []) + IPv6Addresses: 'typing.List[GeneralDiagnostics.Structs.IPv6Addr]' = field(default_factory=lambda: []) type: 'GeneralDiagnostics.Enums.InterfaceType' = 0 diff --git a/src/darwin/Framework/CHIP/zap-generated/CHIPAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/CHIPAttributeTLVValueDecoder.mm index 8f515e35e876b4..81eb053f371b8a 100644 --- a/src/darwin/Framework/CHIP/zap-generated/CHIPAttributeTLVValueDecoder.mm +++ b/src/darwin/Framework/CHIP/zap-generated/CHIPAttributeTLVValueDecoder.mm @@ -4601,11 +4601,45 @@ id CHIPDecodeAttributeValue(const ConcreteAttributePath & aPath, TLV::TLVReader newElement_0.name = [[NSString alloc] initWithBytes:entry_0.name.data() length:entry_0.name.size() encoding:NSUTF8StringEncoding]; - newElement_0.fabricConnected = [NSNumber numberWithBool:entry_0.fabricConnected]; + newElement_0.isOperational = [NSNumber numberWithBool:entry_0.isOperational]; newElement_0.offPremiseServicesReachableIPv4 = [NSNumber numberWithBool:entry_0.offPremiseServicesReachableIPv4]; newElement_0.offPremiseServicesReachableIPv6 = [NSNumber numberWithBool:entry_0.offPremiseServicesReachableIPv6]; newElement_0.hardwareAddress = [NSData dataWithBytes:entry_0.hardwareAddress.data() length:entry_0.hardwareAddress.size()]; + auto * array_2 = [NSMutableArray new]; + auto iter_2 = entry_0.IPv4Addresses.begin(); + while (iter_2.Next()) { + auto & entry_2 = iter_2.GetValue(); + CHIPGeneralDiagnosticsClusterIPv4Addr * newElement_2; + newElement_2 = [CHIPGeneralDiagnosticsClusterIPv4Addr new]; + newElement_2.addr = [NSData dataWithBytes:entry_2.addr.data() length:entry_2.addr.size()]; + [array_2 addObject:newElement_2]; + } + { // Scope for the error so we will know what it's named + CHIP_ERROR err = iter_2.GetStatus(); + if (err != CHIP_NO_ERROR) { + *aError = err; + return nil; + } + } + newElement_0.iPv4Addresses = array_2; + auto * array_2 = [NSMutableArray new]; + auto iter_2 = entry_0.IPv6Addresses.begin(); + while (iter_2.Next()) { + auto & entry_2 = iter_2.GetValue(); + CHIPGeneralDiagnosticsClusterIPv6Addr * newElement_2; + newElement_2 = [CHIPGeneralDiagnosticsClusterIPv6Addr new]; + newElement_2.addr = [NSData dataWithBytes:entry_2.addr.data() length:entry_2.addr.size()]; + [array_2 addObject:newElement_2]; + } + { // Scope for the error so we will know what it's named + CHIP_ERROR err = iter_2.GetStatus(); + if (err != CHIP_NO_ERROR) { + *aError = err; + return nil; + } + } + newElement_0.iPv6Addresses = array_2; newElement_0.type = [NSNumber numberWithUnsignedChar:chip::to_underlying(entry_0.type)]; [array_0 addObject:newElement_0]; } diff --git a/src/darwin/Framework/CHIP/zap-generated/CHIPCallbackBridge.mm b/src/darwin/Framework/CHIP/zap-generated/CHIPCallbackBridge.mm index 7ad6dcb82117b1..c4e3f6b5f2c1af 100644 --- a/src/darwin/Framework/CHIP/zap-generated/CHIPCallbackBridge.mm +++ b/src/darwin/Framework/CHIP/zap-generated/CHIPCallbackBridge.mm @@ -4239,10 +4239,44 @@ newElement_0.name = [[NSString alloc] initWithBytes:entry_0.name.data() length:entry_0.name.size() encoding:NSUTF8StringEncoding]; - newElement_0.fabricConnected = [NSNumber numberWithBool:entry_0.fabricConnected]; + newElement_0.isOperational = [NSNumber numberWithBool:entry_0.isOperational]; newElement_0.offPremiseServicesReachableIPv4 = [NSNumber numberWithBool:entry_0.offPremiseServicesReachableIPv4]; newElement_0.offPremiseServicesReachableIPv6 = [NSNumber numberWithBool:entry_0.offPremiseServicesReachableIPv6]; newElement_0.hardwareAddress = [NSData dataWithBytes:entry_0.hardwareAddress.data() length:entry_0.hardwareAddress.size()]; + auto * array_2 = [NSMutableArray new]; + auto iter_2 = entry_0.IPv4Addresses.begin(); + while (iter_2.Next()) { + auto & entry_2 = iter_2.GetValue(); + CHIPGeneralDiagnosticsClusterIPv4Addr * newElement_2; + newElement_2 = [CHIPGeneralDiagnosticsClusterIPv4Addr new]; + newElement_2.addr = [NSData dataWithBytes:entry_2.addr.data() length:entry_2.addr.size()]; + [array_2 addObject:newElement_2]; + } + { // Scope for the error so we will know what it's named + CHIP_ERROR err = iter_2.GetStatus(); + if (err != CHIP_NO_ERROR) { + OnFailureFn(context, err); + return; + } + } + newElement_0.iPv4Addresses = array_2; + auto * array_2 = [NSMutableArray new]; + auto iter_2 = entry_0.IPv6Addresses.begin(); + while (iter_2.Next()) { + auto & entry_2 = iter_2.GetValue(); + CHIPGeneralDiagnosticsClusterIPv6Addr * newElement_2; + newElement_2 = [CHIPGeneralDiagnosticsClusterIPv6Addr new]; + newElement_2.addr = [NSData dataWithBytes:entry_2.addr.data() length:entry_2.addr.size()]; + [array_2 addObject:newElement_2]; + } + { // Scope for the error so we will know what it's named + CHIP_ERROR err = iter_2.GetStatus(); + if (err != CHIP_NO_ERROR) { + OnFailureFn(context, err); + return; + } + } + newElement_0.iPv6Addresses = array_2; newElement_0.type = [NSNumber numberWithUnsignedChar:chip::to_underlying(entry_0.type)]; [array_0 addObject:newElement_0]; } diff --git a/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.h b/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.h index 1c8b52bcfb7f3d..c8f23655d1c2ec 100644 --- a/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.h +++ b/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.h @@ -159,12 +159,24 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init; @end +@interface CHIPGeneralDiagnosticsClusterIPv6Addr : NSObject +@property (strong, nonatomic) NSData * _Nonnull addr; +- (instancetype)init; +@end + +@interface CHIPGeneralDiagnosticsClusterIPv4Addr : NSObject +@property (strong, nonatomic) NSData * _Nonnull addr; +- (instancetype)init; +@end + @interface CHIPGeneralDiagnosticsClusterNetworkInterfaceType : NSObject @property (strong, nonatomic) NSString * _Nonnull name; -@property (strong, nonatomic) NSNumber * _Nonnull fabricConnected; +@property (strong, nonatomic) NSNumber * _Nonnull isOperational; @property (strong, nonatomic) NSNumber * _Nonnull offPremiseServicesReachableIPv4; @property (strong, nonatomic) NSNumber * _Nonnull offPremiseServicesReachableIPv6; @property (strong, nonatomic) NSData * _Nonnull hardwareAddress; +@property (strong, nonatomic) NSArray * _Nonnull iPv4Addresses; +@property (strong, nonatomic) NSArray * _Nonnull iPv6Addresses; @property (strong, nonatomic) NSNumber * _Nonnull type; - (instancetype)init; @end diff --git a/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.mm index 907798ea50b9bd..a16168dd405770 100644 --- a/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.mm +++ b/src/darwin/Framework/CHIP/zap-generated/CHIPStructsObjc.mm @@ -309,6 +309,28 @@ - (instancetype)init } @end +@implementation CHIPGeneralDiagnosticsClusterIPv6Addr +- (instancetype)init +{ + if (self = [super init]) { + + _addr = [NSData data]; + } + return self; +} +@end + +@implementation CHIPGeneralDiagnosticsClusterIPv4Addr +- (instancetype)init +{ + if (self = [super init]) { + + _addr = [NSData data]; + } + return self; +} +@end + @implementation CHIPGeneralDiagnosticsClusterNetworkInterfaceType - (instancetype)init { @@ -316,7 +338,7 @@ - (instancetype)init _name = @""; - _fabricConnected = @(0); + _isOperational = @(0); _offPremiseServicesReachableIPv4 = @(0); @@ -324,6 +346,10 @@ - (instancetype)init _hardwareAddress = [NSData data]; + _iPv4Addresses = [NSArray array]; + + _iPv6Addresses = [NSArray array]; + _type = @(0); } return self; diff --git a/src/darwin/Framework/CHIP/zap-generated/CHIPTestClustersObjc.mm b/src/darwin/Framework/CHIP/zap-generated/CHIPTestClustersObjc.mm index ed2ce079d8f592..380d33a2f8ad88 100644 --- a/src/darwin/Framework/CHIP/zap-generated/CHIPTestClustersObjc.mm +++ b/src/darwin/Framework/CHIP/zap-generated/CHIPTestClustersObjc.mm @@ -6478,12 +6478,60 @@ new CHIPDefaultSuccessCallbackBridge( } auto element_0 = (CHIPGeneralDiagnosticsClusterNetworkInterfaceType *) value[i_0]; listHolder_0->mList[i_0].name = [self asCharSpan:element_0.name]; - listHolder_0->mList[i_0].fabricConnected = element_0.fabricConnected.boolValue; + listHolder_0->mList[i_0].isOperational = element_0.isOperational.boolValue; listHolder_0->mList[i_0].offPremiseServicesReachableIPv4 = element_0.offPremiseServicesReachableIPv4.boolValue; listHolder_0->mList[i_0].offPremiseServicesReachableIPv6 = element_0.offPremiseServicesReachableIPv6.boolValue; listHolder_0->mList[i_0].hardwareAddress = [self asByteSpan:element_0.hardwareAddress]; + { + using ListType_2 = std::remove_reference_tmList[i_0].IPv4Addresses)>; + using ListMemberType_2 = ListMemberTypeGetter::Type; + if (element_0.iPv4Addresses.count != 0) { + auto * listHolder_2 = new ListHolder(element_0.iPv4Addresses.count); + if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { + return CHIP_ERROR_INVALID_ARGUMENT; + } + listFreer.add(listHolder_2); + for (size_t i_2 = 0; i_2 < element_0.iPv4Addresses.count; ++i_2) { + if (![element_0.iPv4Addresses[i_2] + isKindOfClass:[CHIPGeneralDiagnosticsClusterIPv4Addr class]]) { + // Wrong kind of value. + return CHIP_ERROR_INVALID_ARGUMENT; + } + auto element_2 = (CHIPGeneralDiagnosticsClusterIPv4Addr *) element_0.iPv4Addresses[i_2]; + listHolder_2->mList[i_2].addr = [self asByteSpan:element_2.addr]; + } + listHolder_0->mList[i_0].IPv4Addresses + = ListType_2(listHolder_2->mList, element_0.iPv4Addresses.count); + } else { + listHolder_0->mList[i_0].IPv4Addresses = ListType_2(); + } + } + { + using ListType_2 = std::remove_reference_tmList[i_0].IPv6Addresses)>; + using ListMemberType_2 = ListMemberTypeGetter::Type; + if (element_0.iPv6Addresses.count != 0) { + auto * listHolder_2 = new ListHolder(element_0.iPv6Addresses.count); + if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { + return CHIP_ERROR_INVALID_ARGUMENT; + } + listFreer.add(listHolder_2); + for (size_t i_2 = 0; i_2 < element_0.iPv6Addresses.count; ++i_2) { + if (![element_0.iPv6Addresses[i_2] + isKindOfClass:[CHIPGeneralDiagnosticsClusterIPv6Addr class]]) { + // Wrong kind of value. + return CHIP_ERROR_INVALID_ARGUMENT; + } + auto element_2 = (CHIPGeneralDiagnosticsClusterIPv6Addr *) element_0.iPv6Addresses[i_2]; + listHolder_2->mList[i_2].addr = [self asByteSpan:element_2.addr]; + } + listHolder_0->mList[i_0].IPv6Addresses + = ListType_2(listHolder_2->mList, element_0.iPv6Addresses.count); + } else { + listHolder_0->mList[i_0].IPv6Addresses = ListType_2(); + } + } listHolder_0->mList[i_0].type = static_castmList[i_0].type)>>( element_0.type.unsignedCharValue); diff --git a/src/include/platform/DiagnosticDataProvider.h b/src/include/platform/DiagnosticDataProvider.h index 69601b0398ff80..396f8bc55f9e0f 100644 --- a/src/include/platform/DiagnosticDataProvider.h +++ b/src/include/platform/DiagnosticDataProvider.h @@ -36,6 +36,11 @@ static constexpr size_t kMaxThreadNameLength = 32; // 48-bit IEEE MAC Address or a 64-bit IEEE MAC Address (e.g. EUI-64). constexpr size_t kMaxHardwareAddrSize = 8; +constexpr size_t kMaxIPv4AddrSize = 4; +constexpr size_t kMaxIPv6AddrSize = 16; +constexpr size_t kMaxIPv4AddrCount = 4; +constexpr size_t kMaxIPv6AddrCount = 8; + struct ThreadMetrics : public app::Clusters::SoftwareDiagnostics::Structs::ThreadMetrics::Type { char NameBuf[kMaxThreadNameLength + 1]; @@ -46,6 +51,10 @@ struct NetworkInterface : public app::Clusters::GeneralDiagnostics::Structs::Net { char Name[Inet::InterfaceId::kMaxIfNameLength]; uint8_t MacAddress[kMaxHardwareAddrSize]; + uint8_t Ipv4AddressesBuffer[kMaxIPv4AddrCount][kMaxIPv4AddrSize]; + uint8_t Ipv6AddressesBuffer[kMaxIPv6AddrCount][kMaxIPv6AddrSize]; + app::Clusters::GeneralDiagnostics::Structs::IPv4Addr::Type Ipv4Addresses[kMaxIPv4AddrCount]; + app::Clusters::GeneralDiagnostics::Structs::IPv6Addr::Type Ipv6Addresses[kMaxIPv6AddrCount]; NetworkInterface * Next; /* Pointer to the next structure. */ }; diff --git a/src/platform/Ameba/DiagnosticDataProviderImpl.cpp b/src/platform/Ameba/DiagnosticDataProviderImpl.cpp index 397ec04b25085a..b1492d3f3cb2d1 100644 --- a/src/platform/Ameba/DiagnosticDataProviderImpl.cpp +++ b/src/platform/Ameba/DiagnosticDataProviderImpl.cpp @@ -137,8 +137,8 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** strncpy(ifp->Name, ifa->name, Inet::InterfaceId::kMaxIfNameLength); ifp->Name[Inet::InterfaceId::kMaxIfNameLength - 1] = '\0'; - ifp->name = CharSpan::fromCharString(ifp->Name); - ifp->fabricConnected = true; + ifp->name = CharSpan::fromCharString(ifp->Name); + ifp->isOperational = true; if ((ifa->flags) & NETIF_FLAG_ETHERNET) ifp->type = EMBER_ZCL_INTERFACE_TYPE_ETHERNET; else diff --git a/src/platform/EFR32/DiagnosticDataProviderImpl.cpp b/src/platform/EFR32/DiagnosticDataProviderImpl.cpp index 7c838ecb8633e7..fb814bb01a4cec 100644 --- a/src/platform/EFR32/DiagnosticDataProviderImpl.cpp +++ b/src/platform/EFR32/DiagnosticDataProviderImpl.cpp @@ -184,7 +184,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** #if CHIP_DEVICE_CONFIG_ENABLE_THREAD const char * threadNetworkName = otThreadGetNetworkName(ThreadStackMgrImpl().OTInstance()); ifp->name = Span(threadNetworkName, strlen(threadNetworkName)); - ifp->fabricConnected = true; + ifp->isOperational = true; ifp->offPremiseServicesReachableIPv4 = false; ifp->offPremiseServicesReachableIPv6 = false; ifp->type = InterfaceType::EMBER_ZCL_INTERFACE_TYPE_THREAD; diff --git a/src/platform/ESP32/DiagnosticDataProviderImpl.cpp b/src/platform/ESP32/DiagnosticDataProviderImpl.cpp index b66037c4325561..d8d909460faa49 100644 --- a/src/platform/ESP32/DiagnosticDataProviderImpl.cpp +++ b/src/platform/ESP32/DiagnosticDataProviderImpl.cpp @@ -210,7 +210,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** strncpy(ifp->Name, esp_netif_get_ifkey(ifa), Inet::InterfaceId::kMaxIfNameLength); ifp->Name[Inet::InterfaceId::kMaxIfNameLength - 1] = '\0'; ifp->name = CharSpan::fromCharString(ifp->Name); - ifp->fabricConnected = true; + ifp->isOperational = true; ifp->type = GetInterfaceType(esp_netif_get_desc(ifa)); ifp->offPremiseServicesReachableIPv4 = false; ifp->offPremiseServicesReachableIPv6 = false; diff --git a/src/platform/Linux/DiagnosticDataProviderImpl.cpp b/src/platform/Linux/DiagnosticDataProviderImpl.cpp index b2ad3a8b7d510a..400f4c85fc12eb 100644 --- a/src/platform/Linux/DiagnosticDataProviderImpl.cpp +++ b/src/platform/Linux/DiagnosticDataProviderImpl.cpp @@ -433,7 +433,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** ifp->Name[Inet::InterfaceId::kMaxIfNameLength - 1] = '\0'; ifp->name = CharSpan::fromCharString(ifp->Name); - ifp->fabricConnected = ifa->ifa_flags & IFF_RUNNING; + ifp->isOperational = ifa->ifa_flags & IFF_RUNNING; ifp->type = ConnectivityUtils::GetInterfaceConnectionType(ifa->ifa_name); ifp->offPremiseServicesReachableIPv4 = false; ifp->offPremiseServicesReachableIPv6 = false; diff --git a/src/platform/P6/DiagnosticDataProviderImpl.cpp b/src/platform/P6/DiagnosticDataProviderImpl.cpp index ad7f395aa97d74..b6d0c9df1e9edd 100644 --- a/src/platform/P6/DiagnosticDataProviderImpl.cpp +++ b/src/platform/P6/DiagnosticDataProviderImpl.cpp @@ -159,7 +159,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** { /* Update Network Interface list */ ifp->name = CharSpan::fromCharString(net_interface->name); - ifp->fabricConnected = net_interface->flags & NETIF_FLAG_LINK_UP; + ifp->isOperational = net_interface->flags & NETIF_FLAG_LINK_UP; ifp->type = EMBER_ZCL_INTERFACE_TYPE_WI_FI; ifp->offPremiseServicesReachableIPv4 = mipv4_offpremise; ifp->offPremiseServicesReachableIPv6 = mipv6_offpremise; diff --git a/src/platform/Zephyr/DiagnosticDataProviderImpl.cpp b/src/platform/Zephyr/DiagnosticDataProviderImpl.cpp index 8558d68cbe92c3..85c4d6f422d241 100644 --- a/src/platform/Zephyr/DiagnosticDataProviderImpl.cpp +++ b/src/platform/Zephyr/DiagnosticDataProviderImpl.cpp @@ -170,8 +170,8 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** NetworkInterface * ifp = new NetworkInterface(); interfaceIterator.GetInterfaceName(ifp->Name, Inet::InterfaceId::kMaxIfNameLength); - ifp->name = CharSpan::fromCharString(ifp->Name); - ifp->fabricConnected = true; + ifp->name = CharSpan::fromCharString(ifp->Name); + ifp->isOperational = true; Inet::InterfaceType interfaceType; if (interfaceIterator.GetInterfaceType(interfaceType) == CHIP_NO_ERROR) { @@ -212,6 +212,30 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** ifp->hardwareAddress = ByteSpan(ifp->MacAddress, addressSize); } + // Assuming IPv6-only support + Inet::InterfaceAddressIterator interfaceAddressIterator; + chip::Inet::IPAddress ipv6Addresses[kMaxIPv6AddrCount]; + uint8_t ipv6AddressesCount; + for (ipv6AddressesCount = 0; interfaceAddressIterator.HasCurrent(); ipv6AddressesCount++) + { + if (interfaceAddressIterator.GetInterfaceId() == interfaceIterator.GetInterfaceId()) + { + if (interfaceAddressIterator.GetAddress(ipv6Addresses[ipv6AddressesCount]) == CHIP_NO_ERROR) + { + memcpy(ifp->Ipv6AddressesBuffer[ipv6AddressesCount], ipv6Addresses[ipv6AddressesCount].Addr, kMaxIPv6AddrSize); + ifp->Ipv6Addresses[ipv6AddressesCount].addr = + ByteSpan(ifp->Ipv6AddressesBuffer[ipv6AddressesCount], kMaxIPv6AddrSize); + } + else + { + break; + } + } + interfaceAddressIterator.Next(); + } + + ifp->IPv6Addresses = chip::app::DataModel::List( + ifp->Ipv6Addresses, ipv6AddressesCount); head = ifp; } diff --git a/zzz_generated/app-common/app-common/zap-generated/af-structs.h b/zzz_generated/app-common/app-common/zap-generated/af-structs.h index 296b69215fbb9c..9d0946527a27b4 100644 --- a/zzz_generated/app-common/app-common/zap-generated/af-structs.h +++ b/zzz_generated/app-common/app-common/zap-generated/af-structs.h @@ -73,6 +73,31 @@ typedef struct _NullablesAndOptionalsStruct /* TYPE WARNING: array array defaults to */ uint8_t * NullableOptionalList; } NullablesAndOptionalsStruct; +// Struct for IPv6Addr +typedef struct _IPv6Addr +{ + chip::ByteSpan Addr; +} IPv6Addr; + +// Struct for IPv4Addr +typedef struct _IPv4Addr +{ + chip::ByteSpan Addr; +} IPv4Addr; + +// Struct for NetworkInterfaceType +typedef struct _NetworkInterfaceType +{ + chip::CharSpan Name; + bool IsOperational; + bool OffPremiseServicesReachableIPv4; + bool OffPremiseServicesReachableIPv6; + chip::ByteSpan HardwareAddress; + /* TYPE WARNING: array array defaults to */ uint8_t * IPv4Addresses; + /* TYPE WARNING: array array defaults to */ uint8_t * IPv6Addresses; + uint8_t Type; +} NetworkInterfaceType; + // Struct for NestedStruct typedef struct _NestedStruct { @@ -357,17 +382,6 @@ typedef struct _NetworkInfo bool Connected; } NetworkInfo; -// Struct for NetworkInterfaceType -typedef struct _NetworkInterfaceType -{ - chip::CharSpan Name; - bool FabricConnected; - bool OffPremiseServicesReachableIPv4; - bool OffPremiseServicesReachableIPv6; - chip::ByteSpan HardwareAddress; - uint8_t Type; -} NetworkInterfaceType; - // Struct for Notification typedef struct _Notification { diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp index 25ee36863d9640..0350c21d800a3d 100644 --- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp +++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp @@ -8066,18 +8066,94 @@ namespace Events { } // namespace DiagnosticLogs namespace GeneralDiagnostics { namespace Structs { +namespace IPv6Addr { +CHIP_ERROR Type::Encode(TLV::TLVWriter & writer, TLV::Tag tag) const +{ + TLV::TLVType outer; + ReturnErrorOnFailure(writer.StartContainer(tag, TLV::kTLVType_Structure, outer)); + ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kAddr)), addr)); + ReturnErrorOnFailure(writer.EndContainer(outer)); + return CHIP_NO_ERROR; +} + +CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) +{ + CHIP_ERROR err = CHIP_NO_ERROR; + TLV::TLVType outer; + VerifyOrReturnError(TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE); + err = reader.EnterContainer(outer); + ReturnErrorOnFailure(err); + while ((err = reader.Next()) == CHIP_NO_ERROR) + { + VerifyOrReturnError(TLV::IsContextTag(reader.GetTag()), CHIP_ERROR_INVALID_TLV_TAG); + switch (TLV::TagNumFromTag(reader.GetTag())) + { + case to_underlying(Fields::kAddr): + ReturnErrorOnFailure(DataModel::Decode(reader, addr)); + break; + default: + break; + } + } + + VerifyOrReturnError(err == CHIP_END_OF_TLV, err); + ReturnErrorOnFailure(reader.ExitContainer(outer)); + + return CHIP_NO_ERROR; +} + +} // namespace IPv6Addr +namespace IPv4Addr { +CHIP_ERROR Type::Encode(TLV::TLVWriter & writer, TLV::Tag tag) const +{ + TLV::TLVType outer; + ReturnErrorOnFailure(writer.StartContainer(tag, TLV::kTLVType_Structure, outer)); + ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kAddr)), addr)); + ReturnErrorOnFailure(writer.EndContainer(outer)); + return CHIP_NO_ERROR; +} + +CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) +{ + CHIP_ERROR err = CHIP_NO_ERROR; + TLV::TLVType outer; + VerifyOrReturnError(TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE); + err = reader.EnterContainer(outer); + ReturnErrorOnFailure(err); + while ((err = reader.Next()) == CHIP_NO_ERROR) + { + VerifyOrReturnError(TLV::IsContextTag(reader.GetTag()), CHIP_ERROR_INVALID_TLV_TAG); + switch (TLV::TagNumFromTag(reader.GetTag())) + { + case to_underlying(Fields::kAddr): + ReturnErrorOnFailure(DataModel::Decode(reader, addr)); + break; + default: + break; + } + } + + VerifyOrReturnError(err == CHIP_END_OF_TLV, err); + ReturnErrorOnFailure(reader.ExitContainer(outer)); + + return CHIP_NO_ERROR; +} + +} // namespace IPv4Addr namespace NetworkInterfaceType { CHIP_ERROR Type::Encode(TLV::TLVWriter & writer, TLV::Tag tag) const { TLV::TLVType outer; ReturnErrorOnFailure(writer.StartContainer(tag, TLV::kTLVType_Structure, outer)); ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kName)), name)); - ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kFabricConnected)), fabricConnected)); + ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kIsOperational)), isOperational)); ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kOffPremiseServicesReachableIPv4)), offPremiseServicesReachableIPv4)); ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kOffPremiseServicesReachableIPv6)), offPremiseServicesReachableIPv6)); ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kHardwareAddress)), hardwareAddress)); + ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kIPv4Addresses)), IPv4Addresses)); + ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kIPv6Addresses)), IPv6Addresses)); ReturnErrorOnFailure(DataModel::Encode(writer, TLV::ContextTag(to_underlying(Fields::kType)), type)); ReturnErrorOnFailure(writer.EndContainer(outer)); return CHIP_NO_ERROR; @@ -8098,8 +8174,8 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) case to_underlying(Fields::kName): ReturnErrorOnFailure(DataModel::Decode(reader, name)); break; - case to_underlying(Fields::kFabricConnected): - ReturnErrorOnFailure(DataModel::Decode(reader, fabricConnected)); + case to_underlying(Fields::kIsOperational): + ReturnErrorOnFailure(DataModel::Decode(reader, isOperational)); break; case to_underlying(Fields::kOffPremiseServicesReachableIPv4): ReturnErrorOnFailure(DataModel::Decode(reader, offPremiseServicesReachableIPv4)); @@ -8110,6 +8186,12 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) case to_underlying(Fields::kHardwareAddress): ReturnErrorOnFailure(DataModel::Decode(reader, hardwareAddress)); break; + case to_underlying(Fields::kIPv4Addresses): + ReturnErrorOnFailure(DataModel::Decode(reader, IPv4Addresses)); + break; + case to_underlying(Fields::kIPv6Addresses): + ReturnErrorOnFailure(DataModel::Decode(reader, IPv6Addresses)); + break; case to_underlying(Fields::kType): ReturnErrorOnFailure(DataModel::Decode(reader, type)); break; diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h index 870765eba04bb0..ddbea5297ff720 100644 --- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h +++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h @@ -12104,34 +12104,92 @@ using RadioFaultType = EmberAfRadioFaultType; #endif namespace Structs { +namespace IPv6Addr { +enum class Fields +{ + kAddr = 0, +}; + +struct Type +{ +public: + chip::ByteSpan addr; + + CHIP_ERROR Encode(TLV::TLVWriter & writer, TLV::Tag tag) const; + CHIP_ERROR Decode(TLV::TLVReader & reader); + + static constexpr bool kIsFabricScoped = false; +}; + +using DecodableType = Type; + +} // namespace IPv6Addr +namespace IPv4Addr { +enum class Fields +{ + kAddr = 0, +}; + +struct Type +{ +public: + chip::ByteSpan addr; + + CHIP_ERROR Encode(TLV::TLVWriter & writer, TLV::Tag tag) const; + CHIP_ERROR Decode(TLV::TLVReader & reader); + + static constexpr bool kIsFabricScoped = false; +}; + +using DecodableType = Type; + +} // namespace IPv4Addr namespace NetworkInterfaceType { enum class Fields { kName = 0, - kFabricConnected = 1, + kIsOperational = 1, kOffPremiseServicesReachableIPv4 = 2, kOffPremiseServicesReachableIPv6 = 3, kHardwareAddress = 4, - kType = 5, + kIPv4Addresses = 5, + kIPv6Addresses = 6, + kType = 7, }; struct Type { public: chip::CharSpan name; - bool fabricConnected = static_cast(0); + bool isOperational = static_cast(0); bool offPremiseServicesReachableIPv4 = static_cast(0); bool offPremiseServicesReachableIPv6 = static_cast(0); chip::ByteSpan hardwareAddress; + DataModel::List IPv4Addresses; + DataModel::List IPv6Addresses; InterfaceType type = static_cast(0); CHIP_ERROR Encode(TLV::TLVWriter & writer, TLV::Tag tag) const; - CHIP_ERROR Decode(TLV::TLVReader & reader); static constexpr bool kIsFabricScoped = false; }; -using DecodableType = Type; +struct DecodableType +{ +public: + chip::CharSpan name; + bool isOperational = static_cast(0); + bool offPremiseServicesReachableIPv4 = static_cast(0); + bool offPremiseServicesReachableIPv6 = static_cast(0); + chip::ByteSpan hardwareAddress; + DataModel::DecodableList IPv4Addresses; + DataModel::DecodableList IPv6Addresses; + InterfaceType type = static_cast(0); + + CHIP_ERROR Decode(TLV::TLVReader & reader); + + static constexpr bool kIsFabricScoped = false; +}; } // namespace NetworkInterfaceType } // namespace Structs diff --git a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp index 56555680f45b41..c14b19284a521d 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp +++ b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp @@ -703,6 +703,44 @@ void ComplexArgumentParser::Finalize(chip::app::Clusters::GroupKeyManagement::St ComplexArgumentParser::Finalize(request.epochKey2); ComplexArgumentParser::Finalize(request.epochStartTime2); } +CHIP_ERROR ComplexArgumentParser::Setup(const char * label, + chip::app::Clusters::GeneralDiagnostics::Structs::IPv4Addr::Type & request, + Json::Value & value) +{ + VerifyOrReturnError(value.isObject(), CHIP_ERROR_INVALID_ARGUMENT); + + ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("IPv4Addr.addr", value.isMember("addr"))); + + char labelWithMember[kMaxLabelLength]; + snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "addr"); + ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.addr, value["addr"])); + + return CHIP_NO_ERROR; +} + +void ComplexArgumentParser::Finalize(chip::app::Clusters::GeneralDiagnostics::Structs::IPv4Addr::Type & request) +{ + ComplexArgumentParser::Finalize(request.addr); +} +CHIP_ERROR ComplexArgumentParser::Setup(const char * label, + chip::app::Clusters::GeneralDiagnostics::Structs::IPv6Addr::Type & request, + Json::Value & value) +{ + VerifyOrReturnError(value.isObject(), CHIP_ERROR_INVALID_ARGUMENT); + + ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("IPv6Addr.addr", value.isMember("addr"))); + + char labelWithMember[kMaxLabelLength]; + snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "addr"); + ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.addr, value["addr"])); + + return CHIP_NO_ERROR; +} + +void ComplexArgumentParser::Finalize(chip::app::Clusters::GeneralDiagnostics::Structs::IPv6Addr::Type & request) +{ + ComplexArgumentParser::Finalize(request.addr); +} CHIP_ERROR ComplexArgumentParser::Setup(const char * label, chip::app::Clusters::IasAce::Structs::IasAceZoneStatusResult::Type & request, Json::Value & value) @@ -1074,21 +1112,25 @@ CHIP_ERROR ComplexArgumentParser::Setup(const char * label, ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.name", value.isMember("name"))); ReturnErrorOnFailure( - ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.fabricConnected", value.isMember("fabricConnected"))); + ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.isOperational", value.isMember("isOperational"))); ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.offPremiseServicesReachableIPv4", value.isMember("offPremiseServicesReachableIPv4"))); ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.offPremiseServicesReachableIPv6", value.isMember("offPremiseServicesReachableIPv6"))); ReturnErrorOnFailure( ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.hardwareAddress", value.isMember("hardwareAddress"))); + ReturnErrorOnFailure( + ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.IPv4Addresses", value.isMember("IPv4Addresses"))); + ReturnErrorOnFailure( + ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.IPv6Addresses", value.isMember("IPv6Addresses"))); ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("NetworkInterfaceType.type", value.isMember("type"))); char labelWithMember[kMaxLabelLength]; snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "name"); ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.name, value["name"])); - snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "fabricConnected"); - ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.fabricConnected, value["fabricConnected"])); + snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "isOperational"); + ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.isOperational, value["isOperational"])); snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "offPremiseServicesReachableIPv4"); ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.offPremiseServicesReachableIPv4, @@ -1101,6 +1143,12 @@ CHIP_ERROR ComplexArgumentParser::Setup(const char * label, snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "hardwareAddress"); ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.hardwareAddress, value["hardwareAddress"])); + snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "IPv4Addresses"); + ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.IPv4Addresses, value["IPv4Addresses"])); + + snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "IPv6Addresses"); + ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.IPv6Addresses, value["IPv6Addresses"])); + snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "type"); ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.type, value["type"])); @@ -1110,10 +1158,12 @@ CHIP_ERROR ComplexArgumentParser::Setup(const char * label, void ComplexArgumentParser::Finalize(chip::app::Clusters::GeneralDiagnostics::Structs::NetworkInterfaceType::Type & request) { ComplexArgumentParser::Finalize(request.name); - ComplexArgumentParser::Finalize(request.fabricConnected); + ComplexArgumentParser::Finalize(request.isOperational); ComplexArgumentParser::Finalize(request.offPremiseServicesReachableIPv4); ComplexArgumentParser::Finalize(request.offPremiseServicesReachableIPv6); ComplexArgumentParser::Finalize(request.hardwareAddress); + ComplexArgumentParser::Finalize(request.IPv4Addresses); + ComplexArgumentParser::Finalize(request.IPv6Addresses); ComplexArgumentParser::Finalize(request.type); } CHIP_ERROR ComplexArgumentParser::Setup(const char * label, diff --git a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h index 6ba52de3b247d4..481bbbc499ee07 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h +++ b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.h @@ -108,6 +108,14 @@ static CHIP_ERROR Setup(const char * label, chip::app::Clusters::GroupKeyManagem Json::Value & value); static void Finalize(chip::app::Clusters::GroupKeyManagement::Structs::GroupKeySetStruct::Type & request); +static CHIP_ERROR Setup(const char * label, chip::app::Clusters::GeneralDiagnostics::Structs::IPv4Addr::Type & request, + Json::Value & value); + +static void Finalize(chip::app::Clusters::GeneralDiagnostics::Structs::IPv4Addr::Type & request); +static CHIP_ERROR Setup(const char * label, chip::app::Clusters::GeneralDiagnostics::Structs::IPv6Addr::Type & request, + Json::Value & value); + +static void Finalize(chip::app::Clusters::GeneralDiagnostics::Structs::IPv6Addr::Type & request); static CHIP_ERROR Setup(const char * label, chip::app::Clusters::IasAce::Structs::IasAceZoneStatusResult::Type & request, Json::Value & value); diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp index ae623759585441..05f12f02023bb4 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp +++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp @@ -774,6 +774,38 @@ DataModelLogger::LogValue(const char * label, size_t indent, return CHIP_NO_ERROR; } +CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent, + const chip::app::Clusters::GeneralDiagnostics::Structs::IPv4Addr::DecodableType & value) +{ + DataModelLogger::LogString(label, indent, "{"); + { + CHIP_ERROR err = LogValue("Addr", indent + 1, value.addr); + if (err != CHIP_NO_ERROR) + { + DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'Addr'"); + return err; + } + } + DataModelLogger::LogString(indent, "}"); + + return CHIP_NO_ERROR; +} +CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent, + const chip::app::Clusters::GeneralDiagnostics::Structs::IPv6Addr::DecodableType & value) +{ + DataModelLogger::LogString(label, indent, "{"); + { + CHIP_ERROR err = LogValue("Addr", indent + 1, value.addr); + if (err != CHIP_NO_ERROR) + { + DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'Addr'"); + return err; + } + } + DataModelLogger::LogString(indent, "}"); + + return CHIP_NO_ERROR; +} CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent, const chip::app::Clusters::IasAce::Structs::IasAceZoneStatusResult::DecodableType & value) { @@ -1221,10 +1253,10 @@ DataModelLogger::LogValue(const char * label, size_t indent, } } { - CHIP_ERROR err = LogValue("FabricConnected", indent + 1, value.fabricConnected); + CHIP_ERROR err = LogValue("IsOperational", indent + 1, value.isOperational); if (err != CHIP_NO_ERROR) { - DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'FabricConnected'"); + DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'IsOperational'"); return err; } } @@ -1252,6 +1284,22 @@ DataModelLogger::LogValue(const char * label, size_t indent, return err; } } + { + CHIP_ERROR err = LogValue("IPv4Addresses", indent + 1, value.IPv4Addresses); + if (err != CHIP_NO_ERROR) + { + DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'IPv4Addresses'"); + return err; + } + } + { + CHIP_ERROR err = LogValue("IPv6Addresses", indent + 1, value.IPv6Addresses); + if (err != CHIP_NO_ERROR) + { + DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'IPv6Addresses'"); + return err; + } + } { CHIP_ERROR err = LogValue("Type", indent + 1, value.type); if (err != CHIP_NO_ERROR) diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h index e044d993be6bc4..6d78c2e93310a5 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h +++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h @@ -63,6 +63,10 @@ static CHIP_ERROR LogValue(const char * label, size_t indent, const chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::DecodableType & value); static CHIP_ERROR LogValue(const char * label, size_t indent, const chip::app::Clusters::GroupKeyManagement::Structs::GroupKeySetStruct::DecodableType & value); +static CHIP_ERROR LogValue(const char * label, size_t indent, + const chip::app::Clusters::GeneralDiagnostics::Structs::IPv4Addr::DecodableType & value); +static CHIP_ERROR LogValue(const char * label, size_t indent, + const chip::app::Clusters::GeneralDiagnostics::Structs::IPv6Addr::DecodableType & value); static CHIP_ERROR LogValue(const char * label, size_t indent, const chip::app::Clusters::IasAce::Structs::IasAceZoneStatusResult::DecodableType & value); static CHIP_ERROR LogValue(const char * label, size_t indent,