summaryrefslogtreecommitdiff
path: root/devel/libgtop/files/patch-sysdeps_freebsd_netload.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/libgtop/files/patch-sysdeps_freebsd_netload.c')
-rw-r--r--devel/libgtop/files/patch-sysdeps_freebsd_netload.c136
1 files changed, 74 insertions, 62 deletions
diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_netload.c b/devel/libgtop/files/patch-sysdeps_freebsd_netload.c
index b5c1e17e9a06..19d810866615 100644
--- a/devel/libgtop/files/patch-sysdeps_freebsd_netload.c
+++ b/devel/libgtop/files/patch-sysdeps_freebsd_netload.c
@@ -1,18 +1,24 @@
---- sysdeps/freebsd/netload.c.orig 2011-06-01 15:40:47 UTC
-+++ sysdeps/freebsd/netload.c
-@@ -1,6 +1,8 @@
+--- sysdeps/freebsd/netload.c.orig 2014-10-02 18:05:51.932132157 +0200
++++ sysdeps/freebsd/netload.c 2014-10-02 18:06:23.435130545 +0200
+@@ -1,7 +1,8 @@
-/* Copyright (C) 1998-99 Martin Baulig
+/* Copyright (C) 2014 Gleb Smirnoff
+ Copyright (C) 1998-99 Martin Baulig
This file is part of LibGTop 1.0.
+- Contributed by Martin Baulig <martin@home-of-linux.org>, October 1998.
+ Contributed by Gleb Smirnoff <glebius@FreeBSD.org>, September 2014.
- Contributed by Martin Baulig <martin@home-of-linux.org>, October 1998.
LibGTop is free software; you can redistribute it and/or modify it
-@@ -31,17 +33,11 @@
- #include <sys/types.h>
- #include <sys/socket.h>
+ under the terms of the GNU General Public License as published by
+@@ -26,22 +27,12 @@
+
+ #include <glibtop_suid.h>
+
+-#include <string.h>
+-
+-#include <sys/types.h>
+-#include <sys/socket.h>
#include <sys/ioctl.h>
-
+#include <sys/sockio.h>
@@ -31,7 +37,7 @@
static const unsigned long _glibtop_sysdeps_netload =
(1L << GLIBTOP_NETLOAD_IF_FLAGS) +
-@@ -64,24 +60,9 @@
+@@ -64,24 +55,9 @@
(1L << GLIBTOP_NETLOAD_ADDRESS6) +
(1L << GLIBTOP_NETLOAD_SCOPE6);
@@ -56,7 +62,7 @@
server->sysdeps.netload = _glibtop_sysdeps_netload;
}
-@@ -91,164 +72,129 @@
+@@ -91,164 +67,129 @@
glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
const char *interface)
{
@@ -69,7 +75,7 @@
- struct ifaddr ifa;
- struct in_ifaddr in;
- } ifaddr;
-+ static struct ifaddrs *ifap, *ifa;
++ struct ifaddrs *ifap, *ifa;
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_NETLOAD), 0);
@@ -102,13 +108,17 @@
- "kvm_read (ifnetaddr)");
- continue;
- }
--
++#define IFA_STAT(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
+
- g_strlcpy (name, ifnet.if_xname, sizeof(name));
- ifnetaddr = (u_long) ifnet.if_link.tqe_next;
--
++ for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
+
- if (strcmp (name, interface) != 0)
- continue;
--
++ if (strcmp(ifa->ifa_name, interface) != 0)
++ continue;
+
- ifaddraddr = (u_long) ifnet.if_addrhead.tqh_first;
- }
- if (ifnet.if_flags & IFF_UP)
@@ -155,38 +165,35 @@
- buf->packets_in = ifnet.if_ipackets;
- buf->packets_out = ifnet.if_opackets;
- buf->packets_total = buf->packets_in + buf->packets_out;
-+#define IFA_STAT(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
-
+-
- buf->bytes_in = ifnet.if_ibytes;
- buf->bytes_out = ifnet.if_obytes;
- buf->bytes_total = buf->bytes_in + buf->bytes_out;
-+ for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
-
+-
- buf->errors_in = ifnet.if_ierrors;
- buf->errors_out = ifnet.if_oerrors;
- buf->errors_total = buf->errors_in + buf->errors_out;
-+ if (strcmp(ifa->ifa_name, interface) != 0)
-+ continue;
-
+-
- buf->collisions = ifnet.if_collisions;
- buf->flags = _glibtop_sysdeps_netload;
-+ switch (ifa->ifa_addr->sa_family) {
-+ case AF_LINK: {
-+ struct sockaddr_dl *sdl;
-+ struct ifreq ifr;
-+ int s, flags;
-
+-
- while (ifaddraddr) {
- if ((kvm_read (server->machine.kd, ifaddraddr, &ifaddr,
- sizeof (ifaddr)) != sizeof (ifaddr))) {
- glibtop_warn_io_r (server,
- "kvm_read (ifaddraddr)");
- continue;
++ switch (ifa->ifa_addr->sa_family) {
++ case AF_LINK: {
++ struct sockaddr_dl *sdl;
++ struct ifreq ifr;
++ int s, flags;
++
+ s = socket(AF_INET, SOCK_DGRAM, 0);
+ if (s < 0) {
+ glibtop_warn_io_r(server, "socket(AF_INET)");
+ break;
- }
++ }
+ memset(&ifr, 0, sizeof(ifr));
+ (void )strlcpy(ifr.ifr_name, ifa->ifa_name,
+ sizeof(ifr.ifr_name));
@@ -195,16 +202,9 @@
+ "ioctl(SIOCGIFFLAGS)");
+ close(s);
+ break;
-+ }
+ }
+ close(s);
-
--#define CP(x) ((char *)(x))
-- cp = (CP(ifaddr.ifa.ifa_addr) - CP(ifaddraddr)) +
-- CP(&ifaddr);
-- sa = (struct sockaddr *)cp;
--
-- if (sa->sa_family == AF_LINK) {
-- struct sockaddr_dl *dl = (struct sockaddr_dl *) sa;
++
+ flags = (ifr.ifr_flags & 0xffff) |
+ (ifr.ifr_flagshigh << 16);
+
@@ -250,35 +250,18 @@
+ buf->errors_total = buf->errors_in + buf->errors_out;
+ buf->collisions = IFA_STAT(collisions);
+ buf->flags = _glibtop_sysdeps_netload;
-
-- memcpy (buf->hwaddress, LLADDR (dl),
-- sizeof (buf->hwaddress));
-- buf->flags |= GLIBTOP_NETLOAD_HWADDRESS;
-- } else if (sa->sa_family == AF_INET) {
-- sin = (struct sockaddr_in *)sa;
-- /* Commenting out to "fix" #13345. */
-- buf->subnet = htonl (ifaddr.in.ia_subnet);
-- buf->address = sin->sin_addr.s_addr;
-- buf->mtu = ifnet.if_mtu;
++
+ sdl = (struct sockaddr_dl *)ifa->ifa_addr;
+ memcpy(buf->hwaddress, LLADDR(sdl),
+ sizeof(buf->hwaddress));
+ buf->mtu = IFA_STAT(mtu);
-+ buf->flags |= (1L << GLIBTOP_NETLOAD_HWADDRESS);
-
-- buf->flags |= _glibtop_sysdeps_netload_data;
-- } else if (sa->sa_family == AF_INET6) {
-- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
-- int in6fd;
++ buf->flags |= GLIBTOP_NETLOAD_HWADDRESS;
++
+ break;
+ }
+ case AF_INET: {
+ struct sockaddr_in *sin;
-
-- memcpy (buf->address6, &sin6->sin6_addr,
-- sizeof (buf->address6));
-- buf->scope6 = (guint8) sin6->sin6_scope_id;
-- buf->flags |= _glibtop_sysdeps_netload6;
++
+ sin = (struct sockaddr_in *)ifa->ifa_addr;
+ buf->address = sin->sin_addr.s_addr;
+ sin = (struct sockaddr_in *)ifa->ifa_netmask;
@@ -288,10 +271,7 @@
+ }
+ case AF_INET6: {
+ struct sockaddr_in6 *sin6;
-
-- in6fd = socket (AF_INET6, SOCK_DGRAM, 0);
-- if (in6fd >= 0) {
-- struct in6_ifreq ifr;
++
+ sin6 = (struct sockaddr_in6 *)ifa->ifa_addr;
+ memcpy(buf->address6, &sin6->sin6_addr,
+ sizeof(buf->address6));
@@ -300,12 +280,44 @@
+ sin6 = (struct sockaddr_in6 *)ifa->ifa_netmask;
+ memcpy(buf->prefix6, &sin6->sin6_addr,
+ sizeof(buf->prefix6));
-+ buf->flags |= (1L << GLIBTOP_NETLOAD_PREFIX6);
++ buf->flags |= GLIBTOP_NETLOAD_PREFIX6;
+ break;
+ }
+ }
+ }
+-#define CP(x) ((char *)(x))
+- cp = (CP(ifaddr.ifa.ifa_addr) - CP(ifaddraddr)) +
+- CP(&ifaddr);
+- sa = (struct sockaddr *)cp;
+-
+- if (sa->sa_family == AF_LINK) {
+- struct sockaddr_dl *dl = (struct sockaddr_dl *) sa;
+-
+- memcpy (buf->hwaddress, LLADDR (dl),
+- sizeof (buf->hwaddress));
+- buf->flags |= GLIBTOP_NETLOAD_HWADDRESS;
+- } else if (sa->sa_family == AF_INET) {
+- sin = (struct sockaddr_in *)sa;
+- /* Commenting out to "fix" #13345. */
+- buf->subnet = htonl (ifaddr.in.ia_subnet);
+- buf->address = sin->sin_addr.s_addr;
+- buf->mtu = ifnet.if_mtu;
+-
+- buf->flags |= _glibtop_sysdeps_netload_data;
+- } else if (sa->sa_family == AF_INET6) {
+- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
+- int in6fd;
+-
+- memcpy (buf->address6, &sin6->sin6_addr,
+- sizeof (buf->address6));
+- buf->scope6 = (guint8) sin6->sin6_scope_id;
+- buf->flags |= _glibtop_sysdeps_netload6;
+-
+- in6fd = socket (AF_INET6, SOCK_DGRAM, 0);
+- if (in6fd >= 0) {
+- struct in6_ifreq ifr;
+-
- memset (&ifr, 0, sizeof (ifr));
- ifr.ifr_addr = *sin6;
- g_strlcpy (ifr.ifr_name, interface,