Skip to content

Commit 4c4b4b6

Browse files
committed
BeaconRxCount attributes results is NULL instead of 0
1 parent 456e785 commit 4c4b4b6

File tree

4 files changed

+42
-0
lines changed

4 files changed

+42
-0
lines changed

src/platform/Linux/ConnectivityUtils.cpp

+23
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,29 @@ CHIP_ERROR ConnectivityUtils::GetWiFiBeaconLostCount(const char * ifname, uint32
573573
return err;
574574
}
575575

576+
CHIP_ERROR ConnectivityUtils::GetWiFiBeaconRxCount(const char * ifname, uint32_t & beaconRxCount)
577+
{
578+
CHIP_ERROR err = CHIP_ERROR_READ_FAILED;
579+
struct iw_statistics stats;
580+
int skfd;
581+
582+
if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
583+
{
584+
ChipLogError(DeviceLayer, "Failed to create a channel to the NET kernel.");
585+
return CHIP_ERROR_OPEN_FAILED;
586+
}
587+
588+
if (GetWiFiStats(skfd, ifname, &stats) == CHIP_NO_ERROR)
589+
{
590+
beaconRxCount = stats.miss.beacon;
591+
err = CHIP_NO_ERROR;
592+
}
593+
594+
close(skfd);
595+
596+
return err;
597+
}
598+
576599
CHIP_ERROR ConnectivityUtils::GetWiFiCurrentMaxRate(const char * ifname, uint64_t & currentMaxRate)
577600
{
578601
CHIP_ERROR err = CHIP_ERROR_READ_FAILED;

src/platform/Linux/ConnectivityUtils.h

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class ConnectivityUtils
5252
static CHIP_ERROR GetWiFiChannelNumber(const char * ifname, uint16_t & channelNumber);
5353
static CHIP_ERROR GetWiFiRssi(const char * ifname, int8_t & rssi);
5454
static CHIP_ERROR GetWiFiBeaconLostCount(const char * ifname, uint32_t & beaconLostCount);
55+
static CHIP_ERROR GetWiFiBeaconRxCount(const char * ifname, uint32_t & beaconRxCount);
5556
static CHIP_ERROR GetWiFiCurrentMaxRate(const char * ifname, uint64_t & currentMaxRate);
5657
static CHIP_ERROR GetEthInterfaceName(char * ifname, size_t bufSize);
5758
static CHIP_ERROR GetEthPHYRate(const char * ifname, app::Clusters::EthernetNetworkDiagnostics::PHYRateEnum & pHYRate);

src/platform/Linux/DiagnosticDataProviderImpl.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,22 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiOverrunCount(uint64_t & overrunCou
759759
return CHIP_NO_ERROR;
760760
}
761761

762+
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiBeaconRxCount(uint32_t & beaconRxCount)
763+
{
764+
uint32_t count;
765+
766+
if (ConnectivityMgrImpl().GetWiFiIfName() == nullptr)
767+
{
768+
return CHIP_ERROR_READ_FAILED;
769+
}
770+
771+
ReturnErrorOnFailure(ConnectivityUtils::GetWiFiBeaconRxCount(ConnectivityMgrImpl().GetWiFiIfName(), count));
772+
VerifyOrReturnError(count >= mBeaconRxCount, CHIP_ERROR_INVALID_INTEGER_VALUE);
773+
beaconRxCount = count - mBeaconRxCount;
774+
775+
return CHIP_NO_ERROR;
776+
}
777+
762778
CHIP_ERROR DiagnosticDataProviderImpl::ResetWiFiNetworkDiagnosticsCounts()
763779
{
764780
CHIP_ERROR err = CHIP_ERROR_READ_FAILED;

src/platform/Linux/DiagnosticDataProviderImpl.h

+2
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class DiagnosticDataProviderImpl : public DiagnosticDataProvider
7373
CHIP_ERROR GetWiFiChannelNumber(uint16_t & channelNumber) override;
7474
CHIP_ERROR GetWiFiRssi(int8_t & rssi) override;
7575
CHIP_ERROR GetWiFiBeaconLostCount(uint32_t & beaconLostCount) override;
76+
CHIP_ERROR GetWiFiBeaconRxCount(uint32_t & beaconRxCount) override;
7677
CHIP_ERROR GetWiFiPacketMulticastRxCount(uint32_t & packetMulticastRxCount) override;
7778
CHIP_ERROR GetWiFiPacketMulticastTxCount(uint32_t & packetMulticastTxCount) override;
7879
CHIP_ERROR GetWiFiPacketUnicastRxCount(uint32_t & packetUnicastRxCount) override;
@@ -97,6 +98,7 @@ class DiagnosticDataProviderImpl : public DiagnosticDataProvider
9798

9899
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
99100
uint32_t mBeaconLostCount = 0;
101+
uint32_t mBeaconRxCount = 0;
100102
uint32_t mPacketMulticastRxCount = 0;
101103
uint32_t mPacketMulticastTxCount = 0;
102104
uint32_t mPacketUnicastRxCount = 0;

0 commit comments

Comments
 (0)