From ad538c12a8801b560d0df670cce975ee65f0fecc Mon Sep 17 00:00:00 2001 From: Thirupathi S Date: Mon, 1 Apr 2024 19:38:21 +0530 Subject: [PATCH] BeaconRxCount attributes results is NULL instead of 0 --- src/platform/Linux/ConnectivityUtils.cpp | 23 +++++++++++++++++++ src/platform/Linux/ConnectivityUtils.h | 1 + .../Linux/DiagnosticDataProviderImpl.cpp | 16 +++++++++++++ .../Linux/DiagnosticDataProviderImpl.h | 2 ++ 4 files changed, 42 insertions(+) diff --git a/src/platform/Linux/ConnectivityUtils.cpp b/src/platform/Linux/ConnectivityUtils.cpp index 8084ceca43b55a..4c26ab1a70b61a 100644 --- a/src/platform/Linux/ConnectivityUtils.cpp +++ b/src/platform/Linux/ConnectivityUtils.cpp @@ -573,6 +573,29 @@ CHIP_ERROR ConnectivityUtils::GetWiFiBeaconLostCount(const char * ifname, uint32 return err; } +CHIP_ERROR ConnectivityUtils::GetWiFiBeaconRxCount(const char * ifname, uint32_t & beaconRxCount) +{ + CHIP_ERROR err = CHIP_ERROR_READ_FAILED; + struct iw_statistics stats; + int skfd; + + if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) + { + ChipLogError(DeviceLayer, "Failed to create a channel to the NET kernel."); + return CHIP_ERROR_OPEN_FAILED; + } + + if (GetWiFiStats(skfd, ifname, &stats) == CHIP_NO_ERROR) + { + beaconRxCount = stats.miss.beacon; + err = CHIP_NO_ERROR; + } + + close(skfd); + + return err; +} + CHIP_ERROR ConnectivityUtils::GetWiFiCurrentMaxRate(const char * ifname, uint64_t & currentMaxRate) { CHIP_ERROR err = CHIP_ERROR_READ_FAILED; diff --git a/src/platform/Linux/ConnectivityUtils.h b/src/platform/Linux/ConnectivityUtils.h index 1ea060b0da7842..03b2bc62a2ee1c 100644 --- a/src/platform/Linux/ConnectivityUtils.h +++ b/src/platform/Linux/ConnectivityUtils.h @@ -52,6 +52,7 @@ class ConnectivityUtils static CHIP_ERROR GetWiFiChannelNumber(const char * ifname, uint16_t & channelNumber); static CHIP_ERROR GetWiFiRssi(const char * ifname, int8_t & rssi); static CHIP_ERROR GetWiFiBeaconLostCount(const char * ifname, uint32_t & beaconLostCount); + static CHIP_ERROR GetWiFiBeaconRxCount(const char * ifname, uint32_t & beaconRxCount); static CHIP_ERROR GetWiFiCurrentMaxRate(const char * ifname, uint64_t & currentMaxRate); static CHIP_ERROR GetEthInterfaceName(char * ifname, size_t bufSize); static CHIP_ERROR GetEthPHYRate(const char * ifname, app::Clusters::EthernetNetworkDiagnostics::PHYRateEnum & pHYRate); diff --git a/src/platform/Linux/DiagnosticDataProviderImpl.cpp b/src/platform/Linux/DiagnosticDataProviderImpl.cpp index b363fa652a6cf2..d1345680df6ef4 100644 --- a/src/platform/Linux/DiagnosticDataProviderImpl.cpp +++ b/src/platform/Linux/DiagnosticDataProviderImpl.cpp @@ -759,6 +759,22 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiOverrunCount(uint64_t & overrunCou return CHIP_NO_ERROR; } +CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiBeaconRxCount(uint32_t & beaconRxCount) +{ + uint32_t count; + + if (ConnectivityMgrImpl().GetWiFiIfName() == nullptr) + { + return CHIP_ERROR_READ_FAILED; + } + + ReturnErrorOnFailure(ConnectivityUtils::GetWiFiBeaconRxCount(ConnectivityMgrImpl().GetWiFiIfName(), count)); + VerifyOrReturnError(count >= mBeaconRxCount, CHIP_ERROR_INVALID_INTEGER_VALUE); + beaconRxCount = count - mBeaconRxCount; + + return CHIP_NO_ERROR; +} + CHIP_ERROR DiagnosticDataProviderImpl::ResetWiFiNetworkDiagnosticsCounts() { CHIP_ERROR err = CHIP_ERROR_READ_FAILED; diff --git a/src/platform/Linux/DiagnosticDataProviderImpl.h b/src/platform/Linux/DiagnosticDataProviderImpl.h index 427a1d1c8d8b3d..412d4251d87623 100644 --- a/src/platform/Linux/DiagnosticDataProviderImpl.h +++ b/src/platform/Linux/DiagnosticDataProviderImpl.h @@ -73,6 +73,7 @@ class DiagnosticDataProviderImpl : public DiagnosticDataProvider CHIP_ERROR GetWiFiChannelNumber(uint16_t & channelNumber) override; CHIP_ERROR GetWiFiRssi(int8_t & rssi) override; CHIP_ERROR GetWiFiBeaconLostCount(uint32_t & beaconLostCount) override; + CHIP_ERROR GetWiFiBeaconRxCount(uint32_t & beaconRxCount) override; CHIP_ERROR GetWiFiPacketMulticastRxCount(uint32_t & packetMulticastRxCount) override; CHIP_ERROR GetWiFiPacketMulticastTxCount(uint32_t & packetMulticastTxCount) override; CHIP_ERROR GetWiFiPacketUnicastRxCount(uint32_t & packetUnicastRxCount) override; @@ -97,6 +98,7 @@ class DiagnosticDataProviderImpl : public DiagnosticDataProvider #if CHIP_DEVICE_CONFIG_ENABLE_WIFI uint32_t mBeaconLostCount = 0; + uint32_t mBeaconRxCount = 0; uint32_t mPacketMulticastRxCount = 0; uint32_t mPacketMulticastTxCount = 0; uint32_t mPacketUnicastRxCount = 0;