/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos52B src/bos/usr/ccs/lib/libperfstat/libperfstat.h 1.4.1.6           */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* (C) COPYRIGHT International Business Machines Corp. 2000,2003          */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/*
 * @(#)91       1.4.1.6     src/bos/usr/ccs/lib/libperfstat/libperfstat.h, libperfstat, bos52B, b2003_06F6 2/6/03 06:43:34
 * LEVEL 1,  5 Years Bull Confidential Information
 *
 */
#ifndef LIBPERFSTAT_H
#define LIBPERFSTAT_H

/* This file describes the structures and constants used by the libperfstat API */

#include <sys/types.h>

#ifdef __cplusplus
extern "C" {
#endif

#define IDENTIFIER_LENGTH 64    /* length of strings included in the structures */

#define FIRST_CPU  ""           /* pseudo-name for the first logical cpu */
#define FIRST_DISK  ""          /* pseudo-name for the first disk */
#define FIRST_DISKPATH ""       /* pseudo-name for the first disk path */
#define FIRST_DISKADAPTER  ""   /* pseudo-name for the first disk adapter */
#define FIRST_NETINTERFACE  ""  /* pseudo-name for the first network interface */
#define FIRST_PAGINGSPACE  ""   /* pseudo-name for the first paging space */
#define FIRST_PROTOCOL  ""      /* pseudo-name for the first protocol */
#define FIRST_NETBUFFER  ""     /* pseudo-name for the first network buffer size */

#define DEFAULT_DEF  "not available"

typedef struct { /* structure element identifier */
	char name[IDENTIFIER_LENGTH]; /* name of the identifier */
} perfstat_id_t;

typedef struct { /* cpu information */
	char name[IDENTIFIER_LENGTH]; /* logical processor name (cpu0, cpu1, ..) */
	u_longlong_t user;     /* raw number of clock ticks spent in user mode */
	u_longlong_t sys;      /* raw number of clock ticks spent in system mode */
	u_longlong_t idle;     /* raw number of clock ticks spent idle */
	u_longlong_t wait;     /* raw number of clock ticks spent waiting for I/O */
	u_longlong_t pswitch;  /* number of context switches (changes of currently running process) */
	u_longlong_t syscall;  /* number of system calls executed */
	u_longlong_t sysread;  /* number of read system calls executed */
	u_longlong_t syswrite; /* number of write system calls executed */
	u_longlong_t sysfork;  /* number of fork system call executed */
	u_longlong_t sysexec;  /* number of exec system call executed */
	u_longlong_t readch;   /* number of characters tranferred with read system call */
	u_longlong_t writech;  /* number of characters tranferred with write system call */
	u_longlong_t bread;    /* number of block reads */
	u_longlong_t bwrite;   /* number of block writes */
	u_longlong_t lread;    /* number of logical read requests */
	u_longlong_t lwrite;   /* number of logical write requests */
	u_longlong_t phread;   /* number of physical reads (reads on raw device) */
	u_longlong_t phwrite;  /* number of physical writes (writes on raw device) */
	u_longlong_t iget;     /* number of inode lookups */
	u_longlong_t namei;    /* number of vnode lookup from a path name */
	u_longlong_t dirblk;   /* number of 512-byte block reads by the directory search routine to locate an entry for a file */
	u_longlong_t msg;      /* number of IPC message operations */
	u_longlong_t sema;     /* number of IPC semaphore operations */
} perfstat_cpu_t;

typedef struct { /* global cpu information */
	int ncpus;                /* number of active logical processors */
	int ncpus_cfg;	           /* number of configured processors */
	char description[IDENTIFIER_LENGTH]; /* processor description (type/official name) */
	u_longlong_t processorHZ; /* processor speed in Hz */
	u_longlong_t user;        /*  raw total number of clock ticks spent in user mode */
	u_longlong_t sys;         /* raw total number of clock ticks spent in system mode */
	u_longlong_t idle;        /* raw total number of clock ticks spent idle */
	u_longlong_t wait;        /* raw total number of clock ticks spent waiting for I/O */
	u_longlong_t pswitch;     /* number of process switches (change in currently running process) */
	u_longlong_t syscall;     /* number of system calls executed */
	u_longlong_t sysread;     /* number of read system calls executed */
	u_longlong_t syswrite;    /* number of write system calls executed */
	u_longlong_t sysfork;     /* number of forks system calls executed */
	u_longlong_t sysexec;     /* number of execs system calls executed */
	u_longlong_t readch;      /* number of characters tranferred with read system call */
	u_longlong_t writech;     /* number of characters tranferred with write system call */
	u_longlong_t devintrs;    /* number of device interrupts */
	u_longlong_t softintrs;   /* number of software interrupts */
	time_t lbolt;	           /* number of ticks since last reboot */
	u_longlong_t loadavg[3];  /* (1<<SBITS) times the average number of runnables processes during the last 1, 5 and 15 minutes.    */
	                          /* To calculate the load average, divide the numbers by (1<<SBITS). SBITS is defined in <sys/proc.h>. */
	u_longlong_t runque;      /* length of the run queue (processes ready) */
	u_longlong_t swpque;      /* ength of the swap queue (processes waiting to be paged in) */
	u_longlong_t bread;       /* number of blocks read */
	u_longlong_t bwrite;      /* number of blocks written */
	u_longlong_t lread;       /* number of logical read requests */
	u_longlong_t lwrite;      /* number of logical write requests */
	u_longlong_t phread;      /* number of physical reads (reads on raw devices) */
	u_longlong_t phwrite;     /* number of physical writes (writes on raw devices) */
	u_longlong_t runocc;      /* updated whenever runque is updated, i.e. the runqueue is occupied.
	                           * This can be used to compute the simple average of ready processes  */
	u_longlong_t swpocc;      /* updated whenever swpque is updated. i.e. the swpqueue is occupied.
	                           * This can be used to compute the simple average processes waiting to be paged in */
	u_longlong_t iget;        /* number of inode lookups */
	u_longlong_t namei;       /* number of vnode lookup from a path name */
	u_longlong_t dirblk;      /* number of 512-byte block reads by the directory search routine to locate an entry for a file */
	u_longlong_t msg;         /* number of IPC message operations */
	u_longlong_t sema;        /* number of IPC semaphore operations */
	u_longlong_t rcvint;      /* number of tty receive interrupts */
	u_longlong_t xmtint;      /* number of tyy transmit interrupts */
	u_longlong_t mdmint;      /* number of modem interrupts */
	u_longlong_t tty_rawinch; /* number of raw input characters  */
	u_longlong_t tty_caninch; /* number of canonical input characters (always zero) */
	u_longlong_t tty_rawoutch;/* number of raw output characters */
	u_longlong_t ksched;      /* number of kernel processes created */
	u_longlong_t koverf;      /* kernel process creation attempts where:
	                           * -the user has forked to their maximum limit
	                           * -the configuration limit of processes has been reached */
	u_longlong_t kexit;       /* number of kernel processes that became zombies */
	u_longlong_t rbread;      /* number of remote read requests */
	u_longlong_t rcread;      /* number of cached remote reads */
	u_longlong_t rbwrt;       /* number of remote writes */
	u_longlong_t rcwrt;       /* number of cached remote writes */
	u_longlong_t traps;       /* number of traps */
	int ncpus_high;           /* index of highest processor online */
} perfstat_cpu_total_t;

typedef struct { /* disk information */
	char name[IDENTIFIER_LENGTH];        /* name of the disk */
	char description[IDENTIFIER_LENGTH]; /* disk description (from ODM) */
	char vgname[IDENTIFIER_LENGTH];      /* volume group name (from ODM) */
	u_longlong_t size;                   /* size of the disk (in MB) */
	u_longlong_t free;                   /* free portion of the disk (in MB) */
	u_longlong_t bsize;                  /* disk block size (in bytes) */
	u_longlong_t xrate;                  /* kbytes/sec xfer rate capability */
	u_longlong_t xfers;                  /* number of transfers to/from disk */
	u_longlong_t wblks;                  /* number of blocks written to disk */
	u_longlong_t rblks;                  /* number of blocks read from disk */
	u_longlong_t qdepth;                 /* queue depth */
	u_longlong_t time;                   /* amount of time disk is active */
	char adapter[IDENTIFIER_LENGTH];     /* disk adapter name (from ODM) */
	uint paths_count;                    /* number of paths defined to the disk */
} perfstat_disk_t;

typedef struct { /* global disk information */
	int number;          /* total number of disks */
	u_longlong_t size;   /* total size of all disks (in MB) */
	u_longlong_t free;   /* free portion of all disks (in MB) */
	u_longlong_t xrate;  /* total kbytes/sec xfer rate capability */
	u_longlong_t xfers;  /* total number of transfers to/from disk */
	u_longlong_t wblks;  /* 512 bytes blocks written to all disks */
	u_longlong_t rblks;  /* 512 bytes blocks read from all disks */
	u_longlong_t time;   /* amount of time disks are active */
} perfstat_disk_total_t;

typedef struct { /* Disk adapter information */
	char name[IDENTIFIER_LENGTH];        /* name of the adapter (from ODM) */
	char description[IDENTIFIER_LENGTH]; /* adapter description (from ODM) */
	int number;         /* number of disks connected to adapter */
	u_longlong_t size;  /* total size of all disks (in MB)  */
	u_longlong_t free;  /* free portion of all disks (in MB)  */
	u_longlong_t xrate; /* total kbytes/sec xfer rate capability */
	u_longlong_t xfers; /* total number of transfers to/from disk */
	u_longlong_t rblks; /* 512 bytes blocks written via adapter */
	u_longlong_t wblks; /* 512 bytes blocks read via adapter  */
	u_longlong_t time;  /* amount of time disks are active */
} perfstat_diskadapter_t;

typedef struct { /* mpio information */
	char name[IDENTIFIER_LENGTH];        /* name of the path */
	u_longlong_t xrate; /* total kbytes/sec xfer rate capability */
	u_longlong_t xfers; /* total number of transfers via the path */
	u_longlong_t rblks; /* 512 bytes blocks written via the path */
	u_longlong_t wblks; /* 512 bytes blocks read via the path  */
	u_longlong_t time;  /* amount of time disks are active */
	char adapter[IDENTIFIER_LENGTH]; /* disk adapter name (from ODM) */
} perfstat_diskpath_t;

typedef struct { /* Virtual memory utilization */
	u_longlong_t virt_total;    /* total virtual memory (in 4KB pages) */
	u_longlong_t real_total;    /* total real memory (in 4KB pages) */
	u_longlong_t real_free;     /* free real memory (in 4KB pages) */
	u_longlong_t real_pinned;   /* real memory which is pinned (in 4KB pages) */
	u_longlong_t real_inuse;    /* real memory which is in use (in 4KB pages) */
	u_longlong_t pgbad;         /* number of bad pages */
	u_longlong_t pgexct;        /* number of page faults */
	u_longlong_t pgins;         /* number of pages paged in */
	u_longlong_t pgouts;        /* number of pages paged out */
	u_longlong_t pgspins;       /* number of page ins from paging space */
	u_longlong_t pgspouts;      /* number of page outs from paging space */
	u_longlong_t scans;         /* number of page scans by clock */
	u_longlong_t cycles;        /* number of page replacement cycles */
	u_longlong_t pgsteals;      /* number of page steals */
	u_longlong_t numperm;       /* number of frames used for files (in 4KB pages) */
	u_longlong_t pgsp_total;    /* total paging space (in 4KB pages) */
	u_longlong_t pgsp_free;     /* free paging space (in 4KB pages) */
	u_longlong_t pgsp_rsvd;     /* reserved paging space (in 4KB pages) */
	u_longlong_t real_system;   /* real memory used by system segments (in 4KB pages). This is the sum of all the used pages in segment marked for system usage.
	                             * Since segment classifications are not always guaranteed to be accurate, this number is only an approximation. */
	u_longlong_t real_user;     /* real memory used by non-system segments (in 4KB pages). This is the sum of all pages used in segments not marked for system usage.
	                             * Since segment classifications are not always guaranteed to be accurate, this number is only an approximation. */
	u_longlong_t real_process;  /* real memory used by process segments (in 4KB pages). This is real_total-real_free-numperm-real_system. Since real_system is an
	                             * approximation, this number is too. */

} perfstat_memory_total_t;

typedef struct { /* Description of the network interface */
	char name[IDENTIFIER_LENGTH];   /* name of the interface */
	char description[IDENTIFIER_LENGTH]; /* interface description (from ODM, similar to lscfg output) */
	uchar type;               /* ethernet, tokenring, etc. interpretation can be done using /usr/include/net/if_types.h */
	u_longlong_t mtu;         /* network frame size */
	u_longlong_t ipackets;    /* number of packets received on interface */
	u_longlong_t ibytes;      /* number of bytes received on interface */
	u_longlong_t ierrors;     /* number of input errors on interface */
	u_longlong_t opackets;    /* number of packets sent on interface */
	u_longlong_t obytes;      /* number of bytes sent on interface */
	u_longlong_t oerrors;     /* number of output errors on interface */
	u_longlong_t collisions;  /* number of collisions on csma interface */
	u_longlong_t bitrate;     /* adapter rating in bit per second */
} perfstat_netinterface_t;

typedef struct { /* Description of the network interfaces */
	int number;               /* number of network interfaces  */
	u_longlong_t ipackets;    /* number of packets received on interface */
	u_longlong_t ibytes;      /* number of bytes received on interface */
	u_longlong_t ierrors;     /* number of input errors on interface */
	u_longlong_t opackets;    /* number of packets sent on interface */
	u_longlong_t obytes;      /* number of bytes sent on interface */
	u_longlong_t oerrors;     /* number of output errors on interface */
	u_longlong_t collisions;  /* number of collisions on csma interface */
} perfstat_netinterface_total_t;

enum {
	LV_PAGING=1,
	NFS_PAGING
};

typedef struct { /* Paging space data for a specific logical volume */
	char name[IDENTIFIER_LENGTH];    /* Paging space name */
	char type; /* type of paging device (LV_PAGING or NFS_PAGING) *
		    * Possible values are:                            *
		    *     LV_PAGING      logical volume               *
		    *     NFS_PAGING     NFS file                     */
	union{
	       struct{
		      char hostname[IDENTIFIER_LENGTH]; /* host name of paging server */
		      char filename[IDENTIFIER_LENGTH]; /* swap file name on server  */
	       } nfs_paging;
	       struct{
		      char vgname[IDENTIFIER_LENGTH];/*  volume group name  */
	       } lv_paging;
	} id;
	longlong_t lp_size;    /* size in number of logical partitions  */
	longlong_t mb_size;    /* size in megabytes  */
	longlong_t mb_used;    /* portion used in megabytes  */
	longlong_t io_pending; /* number of pending I/O */
	char active;           /* indicates if active (1 if so, 0 if not) */
	char automatic;        /* indicates if automatic (1 if so, 0 if not) */
} perfstat_pagingspace_t;

typedef struct {  /* network buffers  */
	char name[IDENTIFIER_LENGTH]; /* size in ascii, always power of 2 (ex: "32", "64", "128") */
	u_longlong_t inuse;           /* number of buffer currently allocated */
	u_longlong_t calls;           /* number of buffer allocations since last reset */
	u_longlong_t delayed;         /* number of delayed allocations */
	u_longlong_t free;            /* number of free calls */
	u_longlong_t failed;          /* number of failed allocations */
	u_longlong_t highwatermark;   /* high threshold for number of buffer allocated */
	u_longlong_t freed;           /* number of buffers freed */
} perfstat_netbuffer_t;

typedef struct { /* utilization of protocols */
	char name[IDENTIFIER_LENGTH]; /* ip, ipv6, icmp, icmpv6, udp, tcp, rpc, nfs, nfsv2, nfsv3*/
	union{
		struct{
			u_longlong_t ipackets;       /* number of input packets */
			u_longlong_t ierrors;        /* number of input errors */
			u_longlong_t iqueueoverflow; /* number of input queue overflows */
			u_longlong_t opackets;       /* number of output packets */
			u_longlong_t oerrors;        /* number of output errors */
		} ip;
		struct{
			u_longlong_t ipackets;       /* number of input packets */	   
			u_longlong_t ierrors;        /* number of input errors */	   
			u_longlong_t iqueueoverflow; /* number of input queue overflows */
			u_longlong_t opackets;       /* number of output packets */
			u_longlong_t oerrors;        /* number of output errors */
		} ipv6;
		struct{
			u_longlong_t received; /* number of packets received */
			u_longlong_t sent;     /* number of packets sent */
			u_longlong_t errors;   /* number of errors */
		} icmp;
		struct{
			u_longlong_t received; /* number of packets received */
			u_longlong_t sent;     /* number of packets sent */
			u_longlong_t errors;   /* number of errors */
		} icmpv6;
		struct{
			u_longlong_t ipackets;  /* number of input packets */
			u_longlong_t ierrors;   /* number of input errors */
			u_longlong_t opackets;  /* number of output packets */
			u_longlong_t no_socket; /* number of packets dropped due to no socket */
		} udp;
		struct{
			u_longlong_t ipackets;    /* number of input packets */
			u_longlong_t ierrors;     /* number of input errors */
			u_longlong_t opackets;    /* number of output packets */
			u_longlong_t initiated;   /* number of connections initiated */
			u_longlong_t accepted;    /* number of connections accepted */
			u_longlong_t established; /* number of connections established */
			u_longlong_t dropped;     /* number of connections dropped */
		} tcp;
		struct{
			struct{
				struct{
					u_longlong_t calls;     /* total NFS client RPC connection-oriented calls */
					u_longlong_t badcalls;  /* rejected NFS client RPC calls */
					u_longlong_t badxids;   /* bad NFS client RPC call responses */
					u_longlong_t timeouts;  /* timed out NFS client RPC calls with no reply */
					u_longlong_t newcreds;  /* total NFS client RPC authentication refreshes */
					u_longlong_t badverfs;  /* total NFS client RPC bad verifier in response */
					u_longlong_t timers;    /* NFS client RPC timout greater than timeout value */
					u_longlong_t nomem;     /* NFS client RPC calls memory allocation failure */
					u_longlong_t cantconn;  /* failed NFS client RPC calls */
					u_longlong_t interrupts;/* NFS client RPC calls fail due to interrupt */
				} stream; /* connection oriented rpc client */
				struct{
					u_longlong_t calls;    /* total NFS client RPC connectionless calls */
					u_longlong_t badcalls; /* rejected NFS client RPC calls */
					u_longlong_t retrans;  /* retransmitted NFS client RPC calls */
					u_longlong_t badxids;  /* bad NFS client RPC call responses */
					u_longlong_t timeouts; /* timed out NFS client RPC calls with no reply */
					u_longlong_t newcreds; /* total NFS client RPC authentication refreshes */
					u_longlong_t badverfs; /* total NFS client RPC bad verifier in response */
					u_longlong_t timers;   /* NFS client RPC timout greater than timeout value */
					u_longlong_t nomem;    /* NFS client RPC calls memory allocation failure */
					u_longlong_t cantsend; /* NFS client RPC calls not sent */
				} dgram; /* connection less rpc client */
			} client; /* rpc client */
			struct{
				struct{
					u_longlong_t calls;    /* total NFS server RPC connection-oriented requests */
					u_longlong_t badcalls; /* rejected NFS server RPC requests */
					u_longlong_t nullrecv; /* NFS server RPC calls failed due to unavailable packet */
					u_longlong_t badlen;   /* NFS server RPC requests failed due to bad length */
					u_longlong_t xdrcall;  /* NFS server RPC requests failed due to bad header */
					u_longlong_t dupchecks;/* NFS server RPC calls found in request cache */
					u_longlong_t dupreqs;  /* total NFS server RPC call duplicates */
				} stream; /* connection oriented rpc server */
				struct{
					u_longlong_t calls;    /* total NFS server RPC connectionless requests */
					u_longlong_t badcalls; /* rejected NFS server RPC requests */
					u_longlong_t nullrecv; /* NFS server RPC calls failed due to unavailable packet */
					u_longlong_t badlen;   /* NFS server RPC requests failed due to bad length */
					u_longlong_t xdrcall;  /* NFS server RPC requests failed due to bad header */
					u_longlong_t dupchecks;/* NFS server RPC calls found in request cache */
					u_longlong_t dupreqs;  /* total NFS server RPC call duplicates */
				} dgram; /* connection less rpc server */
			} server; /* rpc server*/
		} rpc;
	      struct{
		      struct{
			      u_longlong_t calls;    /* total NFS client requests */
			      u_longlong_t badcalls; /* total NFS client failed calls */
			      u_longlong_t clgets;   /* total number of client nfs clgets */
			      u_longlong_t cltoomany;/* total number of client nfs cltoomany */

		      } client; /* nfs client */
		      struct{
			      u_longlong_t calls;     /* total NFS server requests */
			      u_longlong_t badcalls;  /* total NFS server failed calls */
			      u_longlong_t public_v2; /* total number of nfs version 2 server calls */
			      u_longlong_t public_v3; /* total number of nfs version 3 server calls */
		      } server; /* nfs server */
	      } nfs;
	      struct{
		      struct{
			      u_longlong_t calls;     /* NFS V2 client requests  */
			      u_longlong_t null;      /* NFS V2 client null requests */
			      u_longlong_t getattr;   /* NFS V2 client getattr requests */
			      u_longlong_t setattr;   /* NFS V2 client setattr requests */
			      u_longlong_t root;      /* NFS V2 client root requests */
			      u_longlong_t lookup;    /* NFS V2 client file name lookup requests */
			      u_longlong_t readlink;  /* NFS V2 client readlink requests */
			      u_longlong_t read;      /* NFS V2 client read requests */
			      u_longlong_t writecache;/* NFS V2 client write cache requests */
			      u_longlong_t write;     /* NFS V2 client write requests */
			      u_longlong_t create;    /* NFS V2 client file creation requests */
			      u_longlong_t remove;    /* NFS V2 client file removal requests */
			      u_longlong_t rename;    /* NFS V2 client file rename requests */
			      u_longlong_t link;      /* NFS V2 client link creation requests */
			      u_longlong_t symlink;   /* NFS V2 client symbolic link creation requests */
			      u_longlong_t mkdir;     /* NFS V2 client directory creation requests */
			      u_longlong_t rmdir;     /* NFS V2 client directory removal requests */
			      u_longlong_t readdir;   /* NFS V2 client read-directory requests */
			      u_longlong_t statfs;    /* NFS V2 client file stat requests */
		      } client; /* nfs2 client */
		      struct{
			      u_longlong_t calls;     /* NFS V2 server requests */
			      u_longlong_t null;      /* NFS V2 server null requests */
			      u_longlong_t getattr;   /* NFS V2 server getattr requests */
			      u_longlong_t setattr;   /* NFS V2 server setattr requests */
			      u_longlong_t root;      /* NFS V2 server root requests */
			      u_longlong_t lookup;    /* NFS V2 server file name lookup requests */
			      u_longlong_t readlink;  /* NFS V2 server readlink requests */
			      u_longlong_t read;      /* NFS V2 server read requests */
			      u_longlong_t writecache;/* NFS V2 server cache requests */
			      u_longlong_t write;     /* NFS V2 server write requests */
			      u_longlong_t create;    /* NFS V2 server file creation requests */
			      u_longlong_t remove;    /* NFS V2 server file removal requests */
			      u_longlong_t rename;    /* NFS V2 server file rename requests */
			      u_longlong_t link;      /* NFS V2 server link creation requests */
			      u_longlong_t symlink;   /* NFS V2 server symbolic link creation requests */
			      u_longlong_t mkdir;     /* NFS V2 server directory creation requests */
			      u_longlong_t rmdir;     /* NFS V2 server directory removal requests */
			      u_longlong_t readdir;   /* NFS V2 server read-directory requests */
			      u_longlong_t statfs;    /* NFS V2 server file stat requests */
		      } server; /* nfsv2 server */
	      } nfsv2;
	      struct{
		      struct{
			      u_longlong_t calls;       /* NFS V3 client calls */
			      u_longlong_t null;        /* NFS V3 client null requests */
			      u_longlong_t getattr;     /* NFS V3 client getattr requests */
			      u_longlong_t setattr;     /* NFS V3 client setattr requests */
			      u_longlong_t lookup;      /* NFS V3 client file name lookup requests */
			      u_longlong_t access;      /* NFS V3 client access requests */
			      u_longlong_t readlink;    /* NFS V3 client readlink requests */
			      u_longlong_t read;        /* NFS V3 client read requests */
			      u_longlong_t write;       /* NFS V3 client write requests */
			      u_longlong_t create;      /* NFS V3 client file creation requests */
			      u_longlong_t mkdir;       /* NFS V3 client directory creation requests */
			      u_longlong_t symlink;     /* NFS V3 client symbolic link creation requests */
			      u_longlong_t mknod;       /* NFS V3 client mknod creation requests */
			      u_longlong_t remove;      /* NFS V3 client file removal requests */
			      u_longlong_t rmdir;       /* NFS V3 client directory removal requests */
			      u_longlong_t rename;      /* NFS V3 client file rename requests */
			      u_longlong_t link;        /* NFS V3 client link creation requests */
			      u_longlong_t readdir;     /* NFS V3 client read-directory requests */
			      u_longlong_t readdirplus; /* NFS V3 client read-directory plus requests */
			      u_longlong_t fsstat;      /* NFS V3 client file stat requests */
			      u_longlong_t fsinfo;      /* NFS V3 client file info requests */
			      u_longlong_t pathconf;    /* NFS V3 client path configure requests */
			      u_longlong_t commit;      /* NFS V3 client commit requests */
		      } client; /* nfsv3 client */
		      struct{
			      u_longlong_t calls;       /* NFS V3 server requests */
			      u_longlong_t null;        /* NFS V3 server null requests */
			      u_longlong_t getattr;     /* NFS V3 server getattr requests */
			      u_longlong_t setattr;     /* NFS V3 server setattr requests */
			      u_longlong_t lookup;      /* NFS V3 server file name lookup requests */
			      u_longlong_t access;      /* NFS V3 server file access requests */
			      u_longlong_t readlink;    /* NFS V3 server readlink requests */
			      u_longlong_t read;        /* NFS V3 server read requests */
			      u_longlong_t write;       /* NFS V3 server write requests */
			      u_longlong_t create;      /* NFS V3 server file creation requests */
			      u_longlong_t mkdir;       /* NFS V3 server director6 creation requests */
			      u_longlong_t symlink;     /* NFS V3 server symbolic link creation requests */
			      u_longlong_t mknod;       /* NFS V3 server mknode creation requests */
			      u_longlong_t remove;      /* NFS V3 server file removal requests */
			      u_longlong_t rmdir;       /* NFS V3 server directory removal requests */
			      u_longlong_t rename;      /* NFS V3 server file rename requests */
			      u_longlong_t link;        /* NFS V3 server link creation requests */
			      u_longlong_t readdir;     /* NFS V3 server read-directory requests */
			      u_longlong_t readdirplus; /* NFS V3 server read-directory plus requests */
			      u_longlong_t fsstat;      /* NFS V3 server file stat requests */
			      u_longlong_t fsinfo;      /* NFS V3 server file info requests */
			      u_longlong_t pathconf;	  /* NFS V3 server path configure requests */
			      u_longlong_t commit;      /* NFS V3 server commit requests */
		      } server; /* nfsv3 server */
		} nfsv3;
	} dummy_name;
} perfstat_protocol_t;

extern int perfstat_cpu_total(perfstat_id_t *name,
                              perfstat_cpu_total_t* userbuff,
                              int sizeof_userbuff,
                              int desired_number);
extern int perfstat_cpu(perfstat_id_t *name,
                        perfstat_cpu_t* userbuff,
                        int sizeof_userbuff,
                        int desired_number);
extern int perfstat_disk_total(perfstat_id_t *name,
                               perfstat_disk_total_t* userbuff,
                               int sizeof_userbuff,
                               int desired_number);
extern int perfstat_disk(perfstat_id_t *name,
                         perfstat_disk_t* userbuff,
                         int sizeof_userbuff,
                         int desired_number);
extern int perfstat_diskadapter(perfstat_id_t *name,
                                perfstat_diskadapter_t* userbuff,      
                                int sizeof_userbuff,		       
                                int desired_number);		       
extern int perfstat_diskpath(perfstat_id_t *name,
                             perfstat_diskpath_t* userbuff,      
                             int sizeof_userbuff,		       
                             int desired_number);		       
extern int perfstat_memory_total(perfstat_id_t *name,
                                 perfstat_memory_total_t* userbuff,
                                 int sizeof_userbuff,
                                 int desired_number);
extern int perfstat_netinterface_total(perfstat_id_t *name,
                                       perfstat_netinterface_total_t* userbuff,
                                       int sizeof_userbuff,
                                       int desired_number);
extern int perfstat_netinterface(perfstat_id_t *name,
                                 perfstat_netinterface_t* userbuff,
                                 int sizeof_userbuff,
                                 int desired_number);

extern int perfstat_pagingspace(perfstat_id_t *name,
                                perfstat_pagingspace_t* userbuff,	   
                                int sizeof_userbuff,			   
                                int desired_number);			   

extern int perfstat_netbuffer(perfstat_id_t *name,
                              perfstat_netbuffer_t* userbuff,
                              int sizeof_userbuff,
                              int desired_number);

extern int perfstat_protocol(perfstat_id_t *name,
                             perfstat_protocol_t* userbuff,
                             int sizeof_userbuff,
                             int desired_number);

extern void perfstat_reset(void);

#ifdef __cplusplus
}
#endif

#endif /*undef LIBPERFSTAT_H*/

