svn commit: r369851 - in head/devel/plan9port: . files
Gleb Smirnoff
glebius at FreeBSD.org
Thu Oct 2 19:11:09 UTC 2014
Author: glebius (src committer)
Date: Thu Oct 2 19:11:07 2014
New Revision: 369851
URL: https://svnweb.freebsd.org/changeset/ports/369851
QAT: https://qat.redports.org/buildarchive/r369851/
Log:
Use getifaddrs(3) instead of kvm(3) to access ifnet statistics. Fixes
current breakage on head and future ones.
Approved by: bapt (blanket)
Added:
head/devel/plan9port/files/patch-src-cmd-auxstats-FreeBSD.c (contents, props changed)
Modified:
head/devel/plan9port/Makefile
Modified: head/devel/plan9port/Makefile
==============================================================================
--- head/devel/plan9port/Makefile Thu Oct 2 19:07:34 2014 (r369850)
+++ head/devel/plan9port/Makefile Thu Oct 2 19:11:07 2014 (r369851)
@@ -3,7 +3,7 @@
PORTNAME= plan9port
PORTVERSION= 20140306
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= devel plan9
MASTER_SITES= http://swtch.com/${PORTNAME}/
Added: head/devel/plan9port/files/patch-src-cmd-auxstats-FreeBSD.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/devel/plan9port/files/patch-src-cmd-auxstats-FreeBSD.c Thu Oct 2 19:11:07 2014 (r369851)
@@ -0,0 +1,89 @@
+--- src/cmd/auxstats/FreeBSD.c.orig 2010-03-18 01:25:34.000000000 +0300
++++ src/cmd/auxstats/FreeBSD.c 2014-10-02 22:55:32.000000000 +0400
+@@ -8,20 +8,15 @@
+ #include <sys/time.h>
+ #include <sys/dkstat.h>
+ #include <net/if.h>
+-#include <net/if_var.h>
+ #include <net/if_dl.h>
+ #include <net/if_types.h>
+-#if __FreeBSD_version < 600000
+-#include <machine/apm_bios.h>
+-#endif
+ #include <sys/ioctl.h>
+ #include <limits.h>
+ #include <libc.h>
+ #include <bio.h>
++#include <ifaddrs.h>
+ #include "dat.h"
+
+-/* XXX: #if __FreeBSD_version */
+-
+ void xapm(int);
+ void xloadavg(int);
+ void xcpu(int);
+@@ -45,7 +40,6 @@
+ static kvm_t *kvm;
+
+ static struct nlist nl[] = {
+- { "_ifnet" },
+ { "_cp_time" },
+ { "" }
+ };
+@@ -86,44 +80,26 @@
+ void
+ xnet(int first)
+ {
++ struct ifaddrs *ifap, *ifa;
+ ulong out, in, outb, inb, err;
+- static ulong ifnetaddr;
+- ulong addr;
+- struct ifnet ifnet;
+- struct ifnethead ifnethead;
+- char name[16];
+
+ if(first)
+ return;
+
+- if(ifnetaddr == 0){
+- ifnetaddr = nl[0].n_value;
+- if(ifnetaddr == 0)
+- return;
+- }
+-
+- if(kread(ifnetaddr, (char*)&ifnethead, sizeof ifnethead) < 0)
++ if (getifaddrs(&ifap) != 0)
+ return;
+
+ out = in = outb = inb = err = 0;
+- addr = (ulong)TAILQ_FIRST(&ifnethead);
+- while(addr){
+-#if __FreeBSD_version < 500000
+- if(kread(addr, (char*)&ifnet, sizeof ifnet) < 0
+- || kread((ulong)ifnet.if_name, name, 16) < 0)
+- return;
+-#else
+- if(kread(addr, (char*)&ifnet, sizeof ifnet) < 0
+- || kread((ulong)ifnet.if_dname, name, 16) < 0)
+- return;
+-#endif
+- name[15] = 0;
+- addr = (ulong)TAILQ_NEXT(&ifnet, if_link);
+- out += ifnet.if_opackets;
+- in += ifnet.if_ipackets;
+- outb += ifnet.if_obytes;
+- inb += ifnet.if_ibytes;
+- err += ifnet.if_oerrors+ifnet.if_ierrors;
++
++#define IFA_STAT(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
++ for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
++ if (ifa->ifa_addr->sa_family != AF_LINK)
++ continue;
++ out += IFA_STAT(opackets);
++ in += IFA_STAT(ipackets);
++ outb += IFA_STAT(obytes);
++ inb += IFA_STAT(ibytes);
++ err += IFA_STAT(oerrors) + IFA_STAT(ierrors);
+ }
+ Bprint(&bout, "etherin %lud 1000\n", in);
+ Bprint(&bout, "etherout %lud 1000\n", out);
More information about the svn-ports-head
mailing list