commit - 6a93bd5c92bd2954314f492f10bbcac2c3416da0
commit + 009b0cb5eb340b8bc3268bfaeb86abfeffdc1b1c
blob - f800c05c37b244b55346762e53079afba450c143
blob + 6899fc315f9494b9f5dcee57774c4de9cb84b16f
--- src/cmd/auxstats/OpenBSD.c
+++ src/cmd/auxstats/OpenBSD.c
#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>
void xswap(int);
void xsysctl(int);
void xnet(int);
-void xkvm(int);
void (*statfn[])(int) =
{
- xkvm,
xapm,
xloadavg,
xcpu,
0
};
-static kvm_t *kvm;
-
-static struct nlist nl[] = {
- { "_ifnet" },
- { "_cp_time" },
- { "" }
-};
-
void
xloadavg(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);
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
blob - e1771b803d725f4eba4f79ca42426c7bc5a43c80
blob + 818e9d3967263d8a95b2fe9a00db04bc02fbb1c3
--- src/cmd/auxstats/mkfile
+++ src/cmd/auxstats/mkfile
<$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