summaryrefslogtreecommitdiffstats
path: root/freebsd
diff options
context:
space:
mode:
authorNathan Scott <nathans@redhat.com>2021-03-01 11:55:15 +1100
committerNathan Scott <nathans@redhat.com>2021-03-01 11:55:15 +1100
commit2d1839289eca016893b898dc713cbf1a1df92fc1 (patch)
tree70990056703220405da20a7c97e66e3d53dff59c /freebsd
parent379421d3b2a5a1cf718b555663ec873ef7ea90d8 (diff)
Fix integer sizing issues in the NetworkIO Meter
On Linux kernels the size of the values exported for network device bytes and packets has used a 64 bit integer for quite some time (2.6+ IIRC). Make the procfs value extraction use correct types and change internal types used to rate convert these counters (within the NetworkIO Meter) 64 bit integers, where appropriate.
Diffstat (limited to 'freebsd')
-rw-r--r--freebsd/Platform.c24
-rw-r--r--freebsd/Platform.h6
2 files changed, 9 insertions, 21 deletions
diff --git a/freebsd/Platform.c b/freebsd/Platform.c
index 9f8c051f..a4fe2354 100644
--- a/freebsd/Platform.c
+++ b/freebsd/Platform.c
@@ -315,24 +315,18 @@ bool Platform_getDiskIO(DiskIOData* data) {
return true;
}
-bool Platform_getNetworkIO(unsigned long int* bytesReceived,
- unsigned long int* packetsReceived,
- unsigned long int* bytesTransmitted,
- unsigned long int* packetsTransmitted) {
- int r;
-
+bool Platform_getNetworkIO(NetworkIOData* data) {
// get number of interfaces
int count;
size_t countLen = sizeof(count);
const int countMib[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_SYSTEM, IFMIB_IFCOUNT };
+ int r;
r = sysctl(countMib, ARRAYSIZE(countMib), &count, &countLen, NULL, 0);
if (r < 0)
return false;
-
- unsigned long int bytesReceivedSum = 0, packetsReceivedSum = 0, bytesTransmittedSum = 0, packetsTransmittedSum = 0;
-
+ memset(data, 0, sizeof(NetworkIOData));
for (int i = 1; i <= count; i++) {
struct ifmibdata ifmd;
size_t ifmdLen = sizeof(ifmd);
@@ -346,16 +340,12 @@ bool Platform_getNetworkIO(unsigned long int* bytesReceived,
if (ifmd.ifmd_flags & IFF_LOOPBACK)
continue;
- bytesReceivedSum += ifmd.ifmd_data.ifi_ibytes;
- packetsReceivedSum += ifmd.ifmd_data.ifi_ipackets;
- bytesTransmittedSum += ifmd.ifmd_data.ifi_obytes;
- packetsTransmittedSum += ifmd.ifmd_data.ifi_opackets;
+ data->bytesReceived += ifmd.ifmd_data.ifi_ibytes;
+ data->packetsReceived += ifmd.ifmd_data.ifi_ipackets;
+ data->bytesTransmitted += ifmd.ifmd_data.ifi_obytes;
+ data->packetsTransmitted += ifmd.ifmd_data.ifi_opackets;
}
- *bytesReceived = bytesReceivedSum;
- *packetsReceived = packetsReceivedSum;
- *bytesTransmitted = bytesTransmittedSum;
- *packetsTransmitted = packetsTransmittedSum;
return true;
}
diff --git a/freebsd/Platform.h b/freebsd/Platform.h
index 36895b81..8f25d83a 100644
--- a/freebsd/Platform.h
+++ b/freebsd/Platform.h
@@ -14,6 +14,7 @@ in the source distribution for its full text.
#include "BatteryMeter.h"
#include "DiskIOMeter.h"
#include "Meter.h"
+#include "NetworkIOMeter.h"
#include "Process.h"
#include "ProcessLocksScreen.h"
#include "SignalsPanel.h"
@@ -57,10 +58,7 @@ FileLocks_ProcessData* Platform_getProcessLocks(pid_t pid);
bool Platform_getDiskIO(DiskIOData* data);
-bool Platform_getNetworkIO(unsigned long int* bytesReceived,
- unsigned long int* packetsReceived,
- unsigned long int* bytesTransmitted,
- unsigned long int* packetsTransmitted);
+bool Platform_getNetworkIO(NetworkIOData* data);
void Platform_getBattery(double* percent, ACPresence* isOnAC);

© 2014-2024 Faster IT GmbH | imprint | privacy policy