netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=ff4a80bd8713347d26fb75741dae30d156e0da4e

commit ff4a80bd8713347d26fb75741dae30d156e0da4e
Author: Alastair Poole <nets...@gmail.com>
Date:   Fri Jul 10 15:04:06 2020 +0100

    network: handle multiple addresses on same interface.
---
 src/bin/system/machine.h             |  4 ++--
 src/bin/system/machine/network.bogox | 27 ++++++++++++++++++---------
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/bin/system/machine.h b/src/bin/system/machine.h
index 862e8d4..96728df 100644
--- a/src/bin/system/machine.h
+++ b/src/bin/system/machine.h
@@ -54,8 +54,8 @@ typedef struct
 
 typedef struct
 {
-   unsigned long incoming;
-   unsigned long outgoing;
+   uint64_t incoming;
+   uint64_t outgoing;
 } network_t;
 
 typedef struct Sys_Info Sys_Info;
diff --git a/src/bin/system/machine/network.bogox 
b/src/bin/system/machine/network.bogox
index 688547e..c81d844 100644
--- a/src/bin/system/machine/network.bogox
+++ b/src/bin/system/machine/network.bogox
@@ -16,8 +16,8 @@
 
 #if defined(__MacOS__) || defined(__FreeBSD__) || defined(__DragonFly__)
 static void
-_freebsd_generic_network_status(unsigned long int *in,
-                                unsigned long int *out)
+_freebsd_generic_network_status(uint64_t *in,
+                                uint64_t *out)
 {
    struct ifmibdata *ifmd;
    size_t len;
@@ -50,8 +50,8 @@ _freebsd_generic_network_status(unsigned long int *in,
 
 #if defined(__OpenBSD__)
 static void
-_openbsd_generic_network_status(unsigned long int *in,
-                                unsigned long int *out)
+_openbsd_generic_network_status(uint64_t *in,
+                                uint64_t *out)
 {
    struct ifaddrs *interfaces, *ifa;
 
@@ -66,12 +66,21 @@ _openbsd_generic_network_status(unsigned long int *in,
         struct ifreq ifreq;
         struct if_data if_data;
 
+        // TBC: Interfaces can have multiple addresses.
+        // Using this netmask check we should be obtaining
+        // the overall interface data across addresses.
+
+        if (ifa->ifa_netmask != 0) continue;
+
         ifreq.ifr_data = (void *)&if_data;
         strncpy(ifreq.ifr_name, ifa->ifa_name, IFNAMSIZ - 1);
         if (ioctl(sock, SIOCGIFDATA, &ifreq) < 0)
           return;
 
-        struct if_data *const ifi = &if_data;
+        const struct if_data *ifi = &if_data;
+        if (!LINK_STATE_IS_UP(ifi->ifi_link_state))
+          continue;
+
         if (ifi->ifi_type == IFT_ETHER ||
             ifi->ifi_type == IFT_FASTETHER ||
             ifi->ifi_type == IFT_GIGABITETHERNET ||
@@ -92,8 +101,8 @@ _openbsd_generic_network_status(unsigned long int *in,
 
 #if defined(__linux__)
 static void
-_linux_generic_network_status(unsigned long int *in,
-                              unsigned long int *out)
+_linux_generic_network_status(uint64_t *in,
+                              uint64_t *out)
 {
    FILE *f;
    char buf[4096], dummy_s[256];
@@ -123,8 +132,8 @@ _linux_generic_network_status(unsigned long int *in,
 void
 system_network_transfer_get(network_t *usage)
 {
-   unsigned long first_in = 0, first_out = 0;
-   unsigned long last_in = 0, last_out = 0;
+   uint64_t first_in = 0, first_out = 0;
+   uint64_t last_in = 0, last_out = 0;
 #if defined(__linux__)
    _linux_generic_network_status(&first_in, &first_out);
    usleep(1000000);

-- 


Reply via email to