home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / sps3 / part02 / sps.h < prev    next >
C/C++ Source or Header  |  1992-05-08  |  7KB  |  241 lines

  1. # ifndef lint
  2. static char SpsHId[] =  "@(#)sps.h    1.5\t8/22/91" ;
  3. # endif
  4.  
  5. # ifdef SUNOS40
  6. #  define KERNEL
  7. # endif SUNOS40
  8. # include    <sys/param.h>
  9. # undef KERNEL
  10. # include    <sys/dir.h>
  11. # include    <sys/user.h>
  12. # include    <sys/proc.h>
  13.  
  14. # ifdef SUNOS40
  15. #  ifndef BSD43
  16. #   define BSD43
  17. # endif BSD43
  18. # endif SUNOS40
  19.  
  20. /*
  21. ** Maximum # of users to be considered. (Because user names are stored
  22. ** in a hash table, this should probably be at least double the number
  23. ** of actual users defined in /etc/passwd or by the Yellow Pages.)
  24. */
  25. # ifndef MAXUSERS
  26. # define    MAXUSERS    100
  27. # endif
  28. /* Maximum # ttys to be considered, plus 1 for the console ... */
  29. # ifndef MAXTTYS
  30. # define    MAXTTYS        193
  31. # endif
  32.  
  33.  
  34. /* Maximum user name length ... */
  35. # define    UNAMELEN    8
  36. /* Maximum process-id not to be considered busy ... */
  37. # define    MSPID        2
  38. /* # of wait states defined in the `struct info' ... */
  39. # ifdef NFS
  40. #  ifdef SUN
  41. #   define    NWAITSTATE    16
  42. #  else
  43. #   define    NWAITSTATE    36
  44. #  endif SUN
  45. # else NFS
  46. #  ifdef ULTRIX20
  47. #   define    NWAITSTATE    36
  48. #  else ULTRIX20
  49. #   define    NWAITSTATE    35
  50. #  endif ULTRIX20
  51. # endif NFS
  52.  
  53. /* Convert clicks to kbytes ... */
  54. # ifndef PGSHIFT
  55. #  define    KBYTES( size )    ((size) << 1)
  56. # else PGSHIFT
  57. #  if PGSHIFT > 10
  58. #   define        KBYTES( size )  ((size) << (PGSHIFT - 10))
  59. #  else
  60. #   define    KBYTES( size )    ((size) >> (10 - PGSHIFT))
  61. #  endif
  62. # endif PGSHIFT
  63.  
  64. /* Standard files to be examined ... */
  65. # ifndef FILE_MEM
  66. # define    FILE_MEM    "/dev/mem"    /* System physical memory */
  67. # endif
  68. # ifndef FILE_KMEM
  69. # define    FILE_KMEM    "/dev/kmem"    /* Kernel virtual memory */
  70. # endif
  71. # ifndef FILE_SWAP
  72. # define    FILE_SWAP    "/dev/drum"    /* Swap/paging device */
  73. # endif
  74. # ifndef FILE_DEV
  75. # define    FILE_DEV    "/dev"        /* Directory of tty entries */
  76. # endif
  77. # ifndef FILE_SYMBOL
  78. # define    FILE_SYMBOL    "/vmunix"    /* Symbol file for nlist() */
  79. # endif
  80. # ifndef FILE_INFO
  81. # define    FILE_INFO    "/tmp/.spsinfo"    /* Sps information file */
  82. # endif
  83. # ifndef FILE_PASSWD
  84. # define    FILE_PASSWD    "/etc/passwd"    /* User database */
  85. # endif
  86.  
  87.  
  88. /* Structure to hold necessary information concerning a tty ... */
  89. struct ttyline
  90. {
  91.     char            l_name[2] ;    /* Tty character name */
  92.     unsigned short        l_pgrp ;    /* Tty process group */
  93. # ifdef SUNOS40
  94.     struct streamtab    *l_addr ;    /* Ptr to streamtab in kmem */
  95.     struct stdata        *l_stdata ;    /* Ptr to stdata at runtime */
  96. # else SUNOS40
  97.     struct tty        *l_addr ;    /* Ptr to tty struct in kmem */
  98. # endif SUNOS40
  99.     dev_t            l_dev ;        /* Tty device # */
  100. } ;
  101.  
  102. /* Structure holding a single hash table entry ... */
  103. struct hashtab
  104. {
  105.     short            h_uid ;        /* Uid of user entry */
  106.     char            h_uname[ UNAMELEN ] ; /* Corresponding name */
  107. } ;
  108.  
  109. /*
  110. ** Format of the standard information file maintained by sps.
  111. ** This structure is filled in at initialisation time and then is read back
  112. ** in whenever sps is invoked.
  113. ** Note that the pointer variables in this structure refer to
  114. ** kernel virtual addresses, not addresses within sps.
  115. ** These variable are typed as such so that pointer arithmetic
  116. ** on the kernel addresses will work correctly.
  117. */
  118. struct info
  119. {    /* Kernel values determining process, tty and upage info ... */
  120.     struct proc        *i_proc0 ;    /* address of process table */
  121.     int            i_nproc ;    /* length of process table */
  122. # ifndef SUNOS40
  123.     struct text        *i_text0 ;    /* address of text table */
  124. # endif SUNOS40
  125.     int            i_ntext ;    /* length of text table */
  126. # ifdef ULTRIX20
  127.     struct gnode        *i_inode0 ;    /* address of inode table */
  128. # else ULTRIX20
  129.     struct inode        *i_inode0 ;    /* address of inode table */
  130. # endif ULTRIX20
  131.     int            i_ninode ;    /* length of inode table */
  132.     int            i_ecmx ;    /* max physical memory address*/
  133. # ifndef SUNOS40
  134.     struct buf        *i_swbuf0 ;    /* address of swap buffers */
  135.     int            i_nswbuf ;    /* # swap buffers */
  136.     struct buf        *i_buf0 ;    /* address of i/o buffers */
  137.     int            i_nbuf ;    /* # i/o buffers */
  138.     struct pte        *i_usrptmap ;    /* page table map */
  139.     struct pte        *i_usrpt ;    /* page table map */
  140. # endif SUNOS40
  141.     struct cdevsw        *i_cdevsw ;    /* device switch to find ttys */
  142. # ifdef BSD42
  143. #  ifdef NFS
  144.     struct dquot        *i_quota0 ;    /* disc quota structures */
  145. #  else NFS
  146.     struct quota        *i_quota0 ;    /* disc quota structures */
  147. #  endif NFS
  148.     int            i_nquota ;    /* # quota structures */
  149. #  ifdef ULTRIX40
  150.     int            i_swapfrag ;    /* # swap blocks allocated */
  151. #  else
  152.     int            i_dmmin ;    /* The start of the disc map */
  153.     int            i_dmmax ;    /* The end of the disc map */
  154. #  endif ULTRIX40
  155.     struct mbuf        *i_mbutl ;    /* Start of mbuf area */
  156. # else BSD42
  157.     int            i_hz ;        /* Clock rate */
  158. # endif BSD42
  159. # ifdef CHAOS
  160.     caddr_t            i_Chconntab ;    /* Chaos connection table */
  161. # endif
  162.     /* Kernel addresses are associated with process wait states ... */
  163.     caddr_t            i_waitstate[ NWAITSTATE ] ;
  164.     /* User names, stored in a hash table ... */
  165.     struct hashtab        i_hnames[ MAXUSERS ] ;
  166.     /* Tty device info ... */
  167.     struct ttyline        i_ttyline[ MAXTTYS ] ;
  168. # ifdef SUNOS40
  169.     struct seg_ops        *i_segvn_ops ;    /* ptr to vnode segment ops */
  170.     struct pty        *i_ptybase ;
  171.     int            i_npty ;
  172. #  ifdef SUNOS41
  173.     struct strstat        *i_strst;
  174.     struct stdata        *i_allstream;
  175. #  else SUNOS41
  176.     struct stdata        *i_streams ;    /* streams list */
  177.     struct stdata        *i_streamsNSTREAMS ;
  178. #  endif SUNOS41
  179.     caddr_t            i_sysbase ;
  180. # endif SUNOS40
  181. } ;
  182.  
  183. /*
  184. ** The symbol structure cross-references values read from the kernel with
  185. ** their place in the info structure, and if such a value is associated with
  186. ** a process wait state or not.
  187. */
  188. struct symbol
  189. {
  190.     char            *s_kname ;    /* Kernel symbol name */
  191.     char            s_indirect ;    /* Value requires indirection */
  192.     caddr_t            *s_info ;    /* Corresponding info address */
  193.     char            *s_wait ;    /* Reason for wait, if any */
  194. } ;
  195.  
  196. /* The `user' structure obtained from /dev/mem or /dev/swap ... */
  197. union userstate
  198. {
  199.     struct user        u_us ;
  200.     char            u_pg[ UPAGES ][ NBPG ] ;
  201. } ;
  202.  
  203. /* Information concerning each process filled from /dev/kmem ... */
  204. struct process
  205. {
  206.     struct proc        pr_p ;        /* struct proc from /dev/kmem */
  207.     struct process        *pr_plink ;    /* Normalised ptrs from above */
  208.     struct process        *pr_sibling ;    /* Ptr to sibling process */
  209.     struct process        *pr_child ;    /* Ptr to child process */
  210.     struct process        *pr_pptr ;    /* Ptr to parent process */
  211. # ifdef BSD42
  212.     struct rusage        pr_rself ;    /* Read from upage for self */
  213.     struct rusage        pr_rchild ;    /* ... and the children */
  214. # else BSD42
  215.     struct vtimes        pr_vself ;    /* Read from upage for self */
  216.     struct vtimes        pr_vchild ;    /* ... and the children */
  217. # endif BSD42
  218.     int            pr_files ;    /* # open files */
  219.     struct ttyline        *pr_tty ;    /* Associated tty information */
  220.     char            *pr_cmd ;    /* Command args, from upage */
  221.     int            pr_upag:1 ;    /* Upage was obtained */
  222.     int            pr_csaved:1 ;    /* Cmd args saved by malloc() */
  223. # ifdef SUNOS40
  224.     unsigned        pr_private ;    /* private pages */
  225.     unsigned        pr_shared ;    /* shared pages */
  226. # endif SUNOS40
  227. } ;
  228.  
  229. /* Structure to hold summarising information ... */
  230. struct summary
  231. {
  232.     long            sm_ntotal ;    /* Total # processes */
  233.     long            sm_ktotal ;    /* Total virtual memory */
  234.     long            sm_nbusy ;    /* # busy processes */
  235.     long            sm_kbusy ;    /* Busy virtual memory */
  236.     long            sm_nloaded ;    /* # loaded processes */
  237.     long            sm_kloaded ;    /* Active resident memory */
  238.     long            sm_nswapped ;    /* # swapped processes */
  239.     long            sm_kswapped ;    /* Size totally swapped out */
  240. } ;
  241.