diff options
-rw-r--r-- | libexec/rpc.rstatd/Makefile | 7 | ||||
-rw-r--r-- | libexec/rpc.rstatd/rstat_proc.c | 72 |
2 files changed, 53 insertions, 26 deletions
diff --git a/libexec/rpc.rstatd/Makefile b/libexec/rpc.rstatd/Makefile index 2edaa9b6e40..ae53e7263c1 100644 --- a/libexec/rpc.rstatd/Makefile +++ b/libexec/rpc.rstatd/Makefile @@ -1,7 +1,10 @@ -# $Id: Makefile,v 1.1 1995/10/18 08:43:21 deraadt Exp $ +# $Id: Makefile,v 1.2 1997/02/20 06:42:59 tholo Exp $ PROG = rpc.rstatd -SRCS = rstatd.c rstat_proc.c +.PATH: ${.CURDIR}/../../usr.bin/vmstat + +CFLAGS+=-I${.CURDIR}/../../usr.bin/vmstat +SRCS = dkstats.c rstatd.c rstat_proc.c MAN = rpc.rstatd.8 MLINKS= rpc.rstatd.8 rstatd.8 diff --git a/libexec/rpc.rstatd/rstat_proc.c b/libexec/rpc.rstatd/rstat_proc.c index b2dc6e2a47c..8bb30249f3d 100644 --- a/libexec/rpc.rstatd/rstat_proc.c +++ b/libexec/rpc.rstatd/rstat_proc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rstat_proc.c,v 1.3 1997/02/09 00:03:32 deraadt Exp $ */ +/* $OpenBSD: rstat_proc.c,v 1.4 1997/02/20 06:43:00 tholo Exp $ */ /* * Sun RPC is a product of Sun Microsystems, Inc. and is provided for @@ -31,7 +31,7 @@ #ifndef lint /*static char sccsid[] = "from: @(#)rpc.rstatd.c 1.1 86/09/25 Copyr 1984 Sun Micro";*/ /*static char sccsid[] = "from: @(#)rstat_proc.c 2.2 88/08/01 4.0 RPCSRC";*/ -static char rcsid[] = "$OpenBSD: rstat_proc.c,v 1.3 1997/02/09 00:03:32 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: rstat_proc.c,v 1.4 1997/02/20 06:43:00 tholo Exp $"; #endif /* @@ -56,6 +56,7 @@ static char rcsid[] = "$OpenBSD: rstat_proc.c,v 1.3 1997/02/09 00:03:32 deraadt #ifdef BSD #include <sys/vmmeter.h> #include <sys/dkstat.h> +#include "dkstats.h" #else #include <sys/dk.h> #endif @@ -78,20 +79,30 @@ int cp_xlat[CPUSTATES] = { CP_USER, CP_NICE, CP_SYS, CP_IDLE }; #endif struct nlist nl[] = { -#define X_CPTIME 0 - { "_cp_time" }, -#define X_CNT 1 +#define X_CNT 0 { "_cnt" }, -#define X_IFNET 2 +#define X_IFNET 1 { "_ifnet" }, -#define X_DKXFER 3 - { "_dk_xfer" }, -#define X_BOOTTIME 4 +#define X_BOOTTIME 2 { "_boottime" }, -#define X_HZ 5 +#ifndef BSD +#define X_HZ 3 { "_hz" }, - "", +#define X_CPTIME 4 + { "_cp_time" }, +#define X_DKXFER 5 + { "_dk_xfer" }, +#endif + { NULL }, }; + +#ifdef BSD +extern int dk_ndrive; /* from dkstats.c */ +extern struct _disk cur, last; +char *memf = NULL, *nlistf = NULL; +#endif +int hz; + struct ifnet_head ifnetq; /* chain of ethernet interfaces */ int numintfs; int stats_service(); @@ -191,7 +202,7 @@ void updatestat() { long off; - int i, hz; + int i; struct vmmeter cnt; struct ifnet ifnet; double avrun[3]; @@ -216,20 +227,24 @@ updatestat() } sincelastreq++; + /* + * dkreadstats reads in the "disk_count" as well as the "disklist" + * statistics. It also retrieves "hz" and the "cp_time" array. + */ + dkreadstats(); + memset(stats_all.s1.dk_xfer, '\0', sizeof(stats_all.s1.dk_xfer)); + for (i = 0; i < dk_ndrive && i < DK_NDRIVE; i++) + stats_all.s1.dk_xfer[i] = cur.dk_xfer[i]; + +#ifdef BSD + for (i = 0; i < CPUSTATES; i++) + stats_all.s1.cp_time[i] = cp_time[cp_xlat[i]]; +#else if (kvm_read(kfd, (long)nl[X_HZ].n_value, (char *)&hz, sizeof hz) != sizeof hz) { syslog(LOG_ERR, "can't read hz from kmem"); exit(1); } -#ifdef BSD - if (kvm_read(kfd, (long)nl[X_CPTIME].n_value, (char *)cp_time, - sizeof (cp_time)) != sizeof (cp_time)) { - syslog(LOG_ERR, "can't read cp_time from kmem"); - exit(1); - } - for (i = 0; i < CPUSTATES; i++) - stats_all.s1.cp_time[i] = cp_time[cp_xlat[i]]; -#else if (kvm_read(kfd, (long)nl[X_CPTIME].n_value, (char *)stats_all.s1.cp_time, sizeof (stats_all.s1.cp_time)) != sizeof (stats_all.s1.cp_time)) { @@ -274,12 +289,14 @@ updatestat() hz*(tm.tv_usec - btm.tv_usec)/1000000; stats_all.s2.v_swtch = cnt.v_swtch; +#ifndef BSD if (kvm_read(kfd, (long)nl[X_DKXFER].n_value, (char *)stats_all.s1.dk_xfer, sizeof (stats_all.s1.dk_xfer)) != sizeof (stats_all.s1.dk_xfer)) { syslog(LOG_ERR, "can't read dk_xfer from kmem"); exit(1); } +#endif stats_all.s1.if_ipackets = 0; stats_all.s1.if_opackets = 0; @@ -337,6 +354,9 @@ setup() numintfs++; off = (long)ifnet.if_list.tqe_next; } +#ifdef BSD + dkinit(0); +#endif } /* @@ -345,16 +365,19 @@ setup() int havedisk() { +#ifdef BSD + return dk_ndrive != 0; +#else int i, cnt; - long xfer[DK_NDRIVE]; + long xfer[DK_NDRIVE]; if (kvm_nlist(kfd, nl) != 0) { syslog(LOG_ERR, "can't get namelist"); exit (1); - } + } if (kvm_read(kfd, (long)nl[X_DKXFER].n_value, - (char *)xfer, sizeof xfer) != sizeof xfer) { + (char *)xfer, sizeof xfer) != sizeof xfer) { syslog(LOG_ERR, "can't read dk_xfer from kmem"); exit(1); } @@ -362,6 +385,7 @@ havedisk() for (i=0; i < DK_NDRIVE; i++) cnt += xfer[i]; return (cnt != 0); +#endif } void |