oi-extras/net-snmp/sun/agent/modules/healthMonitor/kr_nfsstat.c
author Andrzej Szeszo <aszeszo@gmail.com>
Wed, 22 Jun 2011 00:51:55 +0100
branchoi-extras
changeset 215 6eb7b62e444c
permissions -rw-r--r--
Added libusb and net-snmp packages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
215
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     1
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     2
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     3
*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     4
* U.S. Government Rights - Commercial software. Government users are subject
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     5
* to the Sun Microsystems, Inc. standard license agreement and applicable
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     6
* provisions of the FAR and its supplements.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     7
*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     8
*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
     9
* This distribution may include materials developed by third parties. Sun,
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    10
* Sun Microsystems, the Sun logo and Solaris are trademarks or registered
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    11
* trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    12
*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    13
*/
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    14
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    15
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    16
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    17
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    18
 * nfsstat: Network File System statistics for client RPC
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    19
 *
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    20
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    21
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    22
#include <stdio.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    23
#include <stdlib.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    24
#include <unistd.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    25
#include <stdarg.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    26
#include <string.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    27
#include <errno.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    28
#include <fcntl.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    29
#include <kvm.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    30
#include <kstat.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    31
#include <sys/param.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    32
#include <sys/types.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    33
#include <sys/t_lock.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    34
#include <sys/tiuser.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    35
#include <sys/statvfs.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    36
#include <sys/mntent.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    37
#include <sys/mnttab.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    38
#include <sys/sysmacros.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    39
#include <sys/mkdev.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    40
#include <rpc/types.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    41
#include <rpc/xdr.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    42
#include <rpc/auth.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    43
#include <rpc/clnt.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    44
#include <nfs/nfs.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    45
#include <nfs/nfs_clnt.h>
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    46
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    47
static kstat_ctl_t *kc = NULL;		/* libkstat cookie */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    48
static kstat_t *rpc_clts_client_kstat;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    49
static kstat_t *rpc_cots_client_kstat;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    50
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    51
static void getstats(void);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    52
static void setup();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    53
static void clear_setup_data();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    54
static  void    fail(int, char *, ...);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    55
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    56
static kid_t safe_kstat_read(kstat_ctl_t *, kstat_t *, void *);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    57
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    58
#define	MAX_COLUMNS	80
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    59
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    60
static int field_width = 0;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    61
static int ncolumns;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    62
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    63
int cflag = 0;		/* client stats */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    64
int rflag = 0;		/* rpc stats */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    65
int zflag = 0;		/* zero stats after printing */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    66
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    67
static void stat_width(kstat_t *);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    68
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    69
static void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    70
getstats(void)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    71
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    72
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    73
	if (rpc_clts_client_kstat != NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    74
		safe_kstat_read(kc, rpc_clts_client_kstat, NULL);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    75
		stat_width(rpc_clts_client_kstat);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    76
	}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    77
	if (rpc_cots_client_kstat != NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    78
		safe_kstat_read(kc, rpc_cots_client_kstat, NULL);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    79
		stat_width(rpc_cots_client_kstat);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    80
	}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    81
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    82
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    83
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    84
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    85
static void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    86
clear_setup_data()
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    87
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    88
	/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    89
	 * Verify and close the kstat control structure 
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    90
	 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    91
	if (kc)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    92
		kstat_close(kc);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    93
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    94
	/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    95
	 * Set all the related variables to null
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    96
	 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    97
	kc = (kstat_ctl_t *)NULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    98
	rpc_clts_client_kstat = (kstat_t *)NULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
    99
	rpc_cots_client_kstat = (kstat_t *)NULL;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   100
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   101
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   102
	
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   103
static void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   104
setup()
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   105
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   106
	/* Initialize kstat control structures */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   107
	if ((kc = kstat_open()) == NULL)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   108
		fail(1, "kstat_open(): can't open /dev/kstat");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   109
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   110
	/* Find a kstat by name */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   111
	rpc_clts_client_kstat = kstat_lookup(kc, "unix", 0, "rpc_clts_client");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   112
	rpc_cots_client_kstat = kstat_lookup(kc, "unix", 0, "rpc_cots_client");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   113
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   114
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   115
static void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   116
stat_width(kstat_t *req)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   117
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   118
	int i, nreq, len;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   119
	char fixlen[128];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   120
	kstat_named_t *knp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   121
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   122
	knp = KSTAT_NAMED_PTR(req);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   123
	nreq = req->ks_ndata;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   124
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   125
	for (i = 0; i < nreq; i++) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   126
		len = strlen(knp[i].name) + 1;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   127
		if (field_width < len)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   128
			field_width = len;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   129
		(void) sprintf(fixlen, "%lu", knp[i].value.ul);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   130
		len = strlen(fixlen) + 1;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   131
		if (field_width < len)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   132
			field_width = len;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   133
	}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   134
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   135
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   136
/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   137
 * Get Client RPC data
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   138
 *   This function is called by Health Monitoring Module
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   139
 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   140
krgetclientrpcdetail(double *calls, int *badcalls, int *retrans, int *badxids, int *timeouts, int *newcreds, int *badverfs, int *timers, int *nomem, int *cantsend) 
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   141
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   142
        int i, j, nreq;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   143
        char fixlen[128];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   144
	char buf[1024];
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   145
        kstat_named_t *knp;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   146
	cflag++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   147
	rflag++;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   148
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   149
        buf[0]= '\0';
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   150
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   151
	setup();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   152
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   153
	getstats();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   154
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   155
	ncolumns = (MAX_COLUMNS - 1) / field_width;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   156
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   157
	/* Kstat lookup client rpc info */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   158
	if (rpc_clts_client_kstat != NULL) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   159
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   160
		knp = KSTAT_NAMED_PTR(rpc_clts_client_kstat);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   161
        	nreq = rpc_clts_client_kstat->ks_ndata;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   162
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   163
        	for (i = 0; i < nreq; i += ncolumns) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   164
               	 	/* Don't print heading */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   165
               	 	/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   166
               		for (j = i; j < MIN(i + ncolumns, nreq); j++) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   167
             	           printf("%-*s", field_width, knp[j].name);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   168
               	 	}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   169
                	printf("\n");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   170
                	*/
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   171
                	for (j = i; j < MIN(i + ncolumns, nreq); j++) {
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   172
#if (defined SOLARIS2_5 || defined SOLARIS2_6)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   173
                        	(void) sprintf(fixlen, "%lu ", knp[j].value.ul);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   174
#else
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   175
                                (void) sprintf(fixlen, "%llu ", knp[j].value.ui64);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   176
#endif
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   177
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   178
                        	strcat(buf, fixlen);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   179
                	}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   180
        	}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   181
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   182
	}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   183
	*calls = atof(strtok(buf, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   184
	*badcalls = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   185
	*retrans = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   186
	*badxids = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   187
	*timeouts = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   188
	*newcreds = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   189
	*badverfs = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   190
	*timers = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   191
	*nomem = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   192
	*cantsend = atoi (strtok(NULL, " "));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   193
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   194
	/*
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   195
	 * The following function closes the kstat control structure
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   196
	 *  and sets the related variables to NULL.
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   197
	 */
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   198
	clear_setup_data();
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   199
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   200
	return (0);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   201
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   202
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   203
#define	MIN(a, b)	((a) < (b) ? (a) : (b))
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   204
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   205
static void
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   206
fail(int do_perror, char *message, ...)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   207
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   208
	va_list args;
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   209
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   210
	va_start(args, message);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   211
	fprintf(stderr, "nfsstat: ");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   212
	vfprintf(stderr, message, args);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   213
	va_end(args);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   214
	if (do_perror)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   215
		fprintf(stderr, ": %s", strerror(errno));
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   216
	fprintf(stderr, "\n");
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   217
	exit(1);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   218
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   219
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   220
kid_t
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   221
safe_kstat_read(kstat_ctl_t *kc, kstat_t *ksp, void *data)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   222
{
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   223
	kid_t kstat_chain_id = kstat_read(kc, ksp, data);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   224
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   225
	if (kstat_chain_id == -1)
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   226
		fail(1, "kstat_read(%x, '%s') failed", kc, ksp->ks_name);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   227
	return (kstat_chain_id);
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   228
}
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   229
6eb7b62e444c Added libusb and net-snmp packages
Andrzej Szeszo <aszeszo@gmail.com>
parents:
diff changeset
   230