diff options
author | Gleydson Soares <gsoares@gmail.com> | 2015-12-07 08:32:05 -0300 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2015-12-08 16:41:13 +0000 |
commit | 009b0cb5eb340b8bc3268bfaeb86abfeffdc1b1c (patch) | |
tree | 5d676152291dd81eddabf8537dc598bff588d648 /src/cmd/auxstats | |
parent | 6a93bd5c92bd2954314f492f10bbcac2c3416da0 (diff) | |
download | plan9port-009b0cb5eb340b8bc3268bfaeb86abfeffdc1b1c.tar.gz plan9port-009b0cb5eb340b8bc3268bfaeb86abfeffdc1b1c.tar.bz2 plan9port-009b0cb5eb340b8bc3268bfaeb86abfeffdc1b1c.zip |
auxstats: fix OpenBSD by using getifaddrs(3) instead of kvm(3)
Change-Id: I6a096ba24809a402911c30406d384d16c03fc96c
Reviewed-on: https://plan9port-review.googlesource.com/1410
Reviewed-by: Russ Cox <rsc@swtch.com>
Diffstat (limited to 'src/cmd/auxstats')
-rw-r--r-- | src/cmd/auxstats/OpenBSD.c | 97 | ||||
-rw-r--r-- | src/cmd/auxstats/mkfile | 2 |
2 files changed, 24 insertions, 75 deletions
diff --git a/src/cmd/auxstats/OpenBSD.c b/src/cmd/auxstats/OpenBSD.c index f800c05c..6899fc31 100644 --- a/src/cmd/auxstats/OpenBSD.c +++ b/src/cmd/auxstats/OpenBSD.c @@ -1,14 +1,12 @@ #include <u.h> -#include <kvm.h> -#include <nlist.h> #include <sys/types.h> #include <sys/param.h> #include <sys/sched.h> #include <sys/socket.h> +#include <ifaddrs.h> #include <sys/sysctl.h> #include <sys/time.h> #include <net/if.h> -#include <net/if_var.h> #include <machine/apmvar.h> #include <sys/ioctl.h> #include <uvm/uvm_param.h> @@ -24,11 +22,9 @@ void xcpu(int); void xswap(int); void xsysctl(int); void xnet(int); -void xkvm(int); void (*statfn[])(int) = { - xkvm, xapm, xloadavg, xcpu, @@ -37,14 +33,6 @@ void (*statfn[])(int) = 0 }; -static kvm_t *kvm; - -static struct nlist nl[] = { - { "_ifnet" }, - { "_cp_time" }, - { "" } -}; - void xloadavg(int first) { @@ -76,78 +64,37 @@ xapm(int first) Bprint(&bout, "battery =%d 100\n", ai.battery_life); } - -void -kvminit(void) -{ - char buf[_POSIX2_LINE_MAX]; - - if(kvm) - return; - kvm = kvm_openfiles(nil, nil, nil, O_RDONLY, buf); - if(kvm == nil) { - fprint(2, "kvm open error\n%s", buf); - return; - } - if(kvm_nlist(kvm, nl) < 0 || nl[0].n_type == 0){ - kvm = nil; - return; - } -} - -void -xkvm(int first) -{ - if(first) - kvminit(); -} - -int -kread(ulong addr, char *buf, int size) -{ - if(kvm_read(kvm, addr, buf, size) != size){ - memset(buf, 0, size); - return -1; - } - return size; -} - void xnet(int first) { ulong out, in, outb, inb, err; - static ulong ifnetaddr; - ulong addr; - struct ifnet ifnet; - struct ifnet_head ifnethead; - char name[16]; + struct ifaddrs *ifa, *ifap; + struct if_data *ifd = NULL; - if(first) + if (first) return; - if(ifnetaddr == 0){ - ifnetaddr = nl[0].n_value; - if(ifnetaddr == 0) - return; - } + out = in = outb = inb = err = 0; - if(kread(ifnetaddr, (char*)&ifnethead, sizeof ifnethead) < 0) + if (getifaddrs(&ifap) == -1) return; - out = in = outb = inb = err = 0; - addr = (ulong)TAILQ_FIRST(&ifnethead); - while(addr){ - if(kread(addr, (char*)&ifnet, sizeof ifnet) < 0 - || kread((ulong)ifnet.if_xname, name, 16) < 0) - return; - name[15] = 0; - addr = (ulong)TAILQ_NEXT(&ifnet, if_list); - out += ifnet.if_opackets; - in += ifnet.if_ipackets; - outb += ifnet.if_obytes; - inb += ifnet.if_ibytes; - err += ifnet.if_oerrors+ifnet.if_ierrors; + for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == NULL || + ifa->ifa_addr->sa_family != AF_LINK) + continue; + + ifd = ifa->ifa_data; + + if (ifd != NULL) { + out += ifd->ifi_opackets; + in += ifd->ifi_ipackets; + outb += ifd->ifi_obytes; + inb += ifd->ifi_ibytes; + err += ifd->ifi_ierrors; + } } + Bprint(&bout, "etherin %lud 1000\n", in); Bprint(&bout, "etherout %lud 1000\n", out); Bprint(&bout, "etherinb %lud 1000000\n", inb); @@ -155,6 +102,8 @@ xnet(int first) Bprint(&bout, "ethererr %lud 1000\n", err); Bprint(&bout, "ether %lud 1000\n", in+out); Bprint(&bout, "etherb %lud 1000000\n", inb+outb); + + freeifaddrs(ifap); } void diff --git a/src/cmd/auxstats/mkfile b/src/cmd/auxstats/mkfile index e1771b80..818e9d39 100644 --- a/src/cmd/auxstats/mkfile +++ b/src/cmd/auxstats/mkfile @@ -12,6 +12,6 @@ HFILES=\ <$PLAN9/src/mkone -KVM=`{if uname |egrep 'BSD' >/dev/null; then echo -lkvm; fi} +KVM=`{if uname |egrep 'BSD' | egrep -v 'OpenBSD' >/dev/null; then echo -lkvm; fi} LDFLAGS=$LDFLAGS $KVM |