home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / sysinfo-1.0 / part01 / defs.h next >
Encoding:
C/C++ Source or Header  |  1993-04-10  |  13.7 KB  |  510 lines

  1. /*
  2.  * Copyright (c) 1992 Michael A. Cooper.
  3.  * This software may be freely distributed provided it is not sold for 
  4.  * profit and the author is credited appropriately.
  5.  */
  6.  
  7. /*
  8.  * $Header: /src/common/usc/bin/sysinfo/RCS/defs.h,v 1.30 1992/04/26 23:32:06 mcooper Exp $
  9.  *
  10.  * $Log: defs.h,v $
  11.  * Revision 1.30  1992/04/26  23:32:06  mcooper
  12.  * Add Copyright notice
  13.  *
  14.  * Revision 1.29  1992/04/17  23:27:51  mcooper
  15.  * Add support for ROM Version information (Sun only for now).
  16.  *
  17.  * Revision 1.28  1992/04/17  01:07:59  mcooper
  18.  * More de-linting
  19.  *
  20.  * Revision 1.27  1992/04/16  02:25:39  mcooper
  21.  * Bug fixes, de-linting, and other changes found with CodeCenter.
  22.  *
  23.  * Revision 1.26  1992/04/15  02:00:36  mcooper
  24.  * Major re-write and simplification of command line options.
  25.  *
  26.  * Revision 1.25  1992/03/31  18:58:16  mcooper
  27.  * Change "verbose" to "Show".
  28.  *
  29.  * Revision 1.24  1992/03/31  03:10:17  mcooper
  30.  * Put frontend macro around CheckNlist() to avoid
  31.  * broken things in Ultrix.
  32.  *
  33.  * Revision 1.23  1992/03/31  00:34:59  mcooper
  34.  * Add new GetNlName() and GetNlNamePtr() macros.
  35.  *
  36.  * Revision 1.22  1992/03/31  00:15:55  mcooper
  37.  * Make GetNlName() global.
  38.  *
  39.  * Revision 1.21  1992/03/28  22:01:16  mcooper
  40.  * Add dd_slave to DEVDATA.
  41.  *
  42.  * Revision 1.20  1992/03/25  03:31:28  mcooper
  43.  * Fix verbose flags.
  44.  *
  45.  * Revision 1.19  1992/03/25  03:18:52  mcooper
  46.  * Convert verbosity levels to bit flags.
  47.  *
  48.  * Revision 1.18  1992/03/22  00:54:53  mcooper
  49.  * Add GetNlName().
  50.  *
  51.  * Revision 1.17  1992/03/22  00:20:10  mcooper
  52.  * Major cleanup and re-org.
  53.  *
  54.  * Revision 1.16  1992/03/08  05:00:40  mcooper
  55.  * Remove obsolete NETIFTAB.
  56.  *
  57.  * Revision 1.15  1992/03/08  04:55:42  mcooper
  58.  * Add support for address families and multiple addresses
  59.  * per network interface.
  60.  *
  61.  * Revision 1.14  1992/03/06  18:36:06  mcooper
  62.  * Add new NAMETAB to replace other similiar types.
  63.  *
  64.  * Revision 1.13  1992/03/03  03:18:59  mcooper
  65.  * Seperate and cleanup KVM*() from kvm*().
  66.  *
  67.  * Revision 1.12  1992/03/01  23:29:19  mcooper
  68.  * Move kvm_t to kvm.h.
  69.  *
  70.  * Revision 1.11  1992/03/01  22:51:02  mcooper
  71.  * Add kvm_t structure.
  72.  *
  73.  * Revision 1.10  1992/03/01  21:34:07  mcooper
  74.  * Put #ifdef HAVE_KVM around KVM_*() function declarations.
  75.  *
  76.  * Revision 1.9  1992/03/01  21:30:18  mcooper
  77.  * Add dd_secsize to DISKDRIVE and add new MODELTAB.
  78.  *
  79.  * Revision 1.8  1992/02/27  22:01:22  mcooper
  80.  * Add support for getting CPU info for sun4m.
  81.  *
  82.  * Revision 1.7  1992/02/27  02:42:33  mcooper
  83.  * Cleanup.
  84.  *
  85.  * Revision 1.6  1992/02/25  00:59:35  mcooper
  86.  * Move tape info to local MTINFO.
  87.  *
  88.  * Revision 1.5  1992/02/25  00:15:56  mcooper
  89.  * Update DT_* and other misc.
  90.  *
  91.  * Revision 1.4  1992/02/22  02:20:19  mcooper
  92.  * Major changes to support scanning kernel mainbus and
  93.  * openprom data for device's.
  94.  *
  95.  * Revision 1.3  1992/02/16  23:50:23  mcooper
  96.  * Add verbosity level macros.
  97.  *
  98.  * Revision 1.2  1992/02/16  23:03:51  mcooper
  99.  * Declare extern verbose.
  100.  *
  101.  * Revision 1.1  1992/02/16  22:53:52  mcooper
  102.  * Initial revision
  103.  *
  104.  */
  105.  
  106. #ifndef __sysinfo_defs__
  107. #define __sysinfo_defs__ 
  108.  
  109. /* Need to include options.h before errno.h */
  110. #include "options.h"
  111. #include <errno.h>
  112. #include "patchlevel.h"
  113.  
  114. /*
  115.  * Version of this program
  116.  */
  117. #define VERSION_STR        "1.0"
  118.  
  119. #if    defined(NEED_KVM)
  120. #include "kvm.h"
  121. #else
  122. #if    defined(HAVE_KVM)
  123. #include <kvm.h>
  124. #endif    /* HAVE_KVM */
  125. #endif    /* NEED_KVM */
  126.  
  127. /*
  128.  * File containing our CPU model name.  Overrides all other methods
  129.  * for determing model name.
  130.  */
  131. #ifndef MODELFILE
  132. #define MODELFILE         "/etc/sysmodel"
  133. #endif
  134.  
  135. /*
  136.  * System call failure value
  137.  */
  138. #ifndef SYSFAIL
  139. #define SYSFAIL            -1
  140. #endif
  141.  
  142. #define C_NULL            '\0'
  143.  
  144. /*
  145.  * System error numbers and message strings
  146.  */
  147. extern int errno;
  148.  
  149. #ifdef SYSERR
  150. #undef SYSERR
  151. #endif
  152.  
  153. #if    defined(HAVE_STRERROR)
  154. #define SYSERR            strerror(errno)
  155. #else
  156. extern char *sys_errmsg[];
  157. #define SYSERR             sys_errlist[errno]
  158. #endif    /* HAVE_STRERROR */
  159.  
  160. #ifndef MAXHOSTNAMLEN
  161. #define MAXHOSTNAMLEN         256
  162. #endif
  163.  
  164. #define MBYTES            1048576            /* Megabytes */
  165.  
  166. /*
  167.  * Misc macros
  168.  */
  169. #define EQ(a,b)            (strcasecmp(a,b)==0)
  170. #define EQN(a,b,n)        (strncasecmp(a,b,n)==0)
  171.  
  172. /*
  173.  * CheckNlist() breaks in a variety of ways on
  174.  * various OS's.
  175.  */
  176. #if     !defined(BROKEN_NLIST_CHECK)
  177. #define CheckNlist(p)         _CheckNlist(p)
  178. #else
  179. #define CheckNlist(p)         0
  180. #endif
  181.  
  182. /*
  183.  * Get nlist n_name
  184.  */
  185. #if    defined(__MACH__)
  186. #define GetNlName(n)        (n.n_un.n_name)
  187. #define GetNlNamePtr(n)        (n->n_un.n_name)
  188. #else
  189. #define GetNlName(n)        (n.n_name)
  190. #define GetNlNamePtr(n)        (n->n_name)
  191. #endif    /* __MACH__ */
  192.  
  193. /*
  194.  * Conversion macros
  195.  */
  196. #define bytes_to_mbytes(n)    ((float) n / (float) 1048576)
  197. #define bytes_to_kbytes(n)    ((u_long)(n / 1024))
  198. #define mbytes_to_bytes(n)    ((u_long)((u_long) n * 1048576))
  199. #define kbytes_to_mbytes(n)    ((u_long)((u_long) n * 1024))
  200. #define nsect_to_bytes(n,s)      ((((float) n) / (float) (1024 / s)) * 1024)
  201.  
  202. /*
  203.  * Are flags f set in b?
  204.  */
  205. #define FLAGS_ON(b,f)        ((b != 0) && (b & f))
  206.  
  207. /*
  208.  * Verbosity levels
  209.  */
  210. #define L_BRIEF            0x01        /* Briefest */
  211. #define L_GENERAL        0x02        /* General verbosity */
  212. #define L_DESC            0x04        /* Description info */
  213. #define L_CONFIG        0x10        /* Configuratin info */
  214. #define L_DEBUG            0x20        /* Debug info */
  215. #define L_ALL (L_BRIEF|L_GENERAL|L_DESC|L_CONFIG)
  216. /*
  217.  * Verbosity macros
  218.  */
  219. #define VL_BRIEF        (Level & L_BRIEF)
  220. #define VL_GENERAL        (Level & L_GENERAL)
  221. #define VL_DESC            (Level & L_DESC)
  222. #define VL_CONFIG        (Level & L_CONFIG)
  223. #define VL_ALL            (Level == L_ALL)
  224. #define VL_DEBUG        (Level & L_DEBUG)
  225.  
  226. /*
  227.  * Show info
  228.  */
  229. struct ShowInfo {
  230.     int                Type;
  231.     char               *Name;
  232.     char               *Label;
  233.     void              (*ShowFunc)();
  234.     char             *(*GetFunc)();
  235.     int                   *OptCompat;
  236.     int                Enable;
  237. };
  238. typedef struct ShowInfo SHOWINFO;
  239.  
  240. /*
  241.  * ShowInfo types (ShowInfo.Type)
  242.  */
  243. #define S_GEN            1        /* General info */
  244. #define S_DEV            2        /* Device info */
  245.  
  246. /*
  247.  * Main Device information
  248.  *
  249.  * Used after device info has been obtained 
  250.  */
  251. struct _device {
  252.     char        *dv_name;        /* Name (e.g. cgtwo0) */
  253.     char           **dv_files;        /* Device files */
  254.     int             dv_type;        /* Device type (eg DT_TAPE) */
  255.     char        *dv_model;        /* Model */
  256.     char        *dv_desc;        /* Description */
  257.     int             dv_unit;        /* Unit number */
  258.     int             dv_addr;        /* Address */
  259.     int             dv_prio;        /* Priority */
  260.     int             dv_vec;        /* Vector */
  261.     char        *dv_mastername;        /* Name of master */
  262.     caddr_t        *dv_devspec;        /* Device specific info */
  263.     struct _device    *dv_master;        /* Device controller */
  264.     struct _device    *dv_slaves;        /* Devices on this device */
  265.     struct _device    *dv_nxt;        /* Pointer to next device */
  266. };
  267. typedef struct _device DEVICE;
  268.  
  269. /*
  270.  * Device types (DEVICE.dv_type)
  271.  */
  272. #define DT_GENERIC         1        /* Generic Device */
  273. #define DT_DISKDRIVE         2        /* Disk Drive */
  274. #define DT_DISKCTLR         3        /* Disk Controller */
  275. #define DT_TAPEDRIVE         4        /* Tape Drive */
  276. #define DT_TAPECTLR         5        /* Tape Controller */
  277. #define DT_FRAMEBUFFER         6        /* Frame Buffer */
  278. #define DT_NETIF         7        /* Network Interface */
  279. #define DT_BUS             9        /* System Bus */
  280. #define DT_PSEUDO        10        /* Pseudo Device */
  281. #define DT_CPU            11        /* CPU */
  282.  
  283. /*
  284.  * Disk Partition information.
  285.  */
  286. struct _dkpart {
  287.     char        *dp_name;        /* Partition name */
  288.     char        *dp_mnt;        /* Mount information */
  289.     int             dp_stsect;        /* Starting sector */
  290.     int             dp_nsect;        /* Number of sectors */
  291.     struct _dkpart    *dp_nxt;        /* Pointer to next DISKPART */
  292. };
  293. typedef struct _dkpart DISKPART;
  294.  
  295. /*
  296.  * Disk Drive specific data
  297.  */
  298. struct _dkdrive {
  299.     char        *dd_label;        /* Disk label */
  300.     int             dd_unit;        /* Unit number */
  301.     int             dd_slave;        /* Slave number */
  302.     int             dd_dcyl;        /* # data cylinders */
  303.     int             dd_pcyl;        /* # physical cylinders */
  304.     int             dd_acyl;        /* # alternate cylinders */
  305.     int             dd_heads;        /* Number of heads */
  306.     int             dd_sect;        /* Number of sectors */
  307.     int             dd_psect;        /* Number of physical sector */
  308.     int             dd_promrev;        /* PROM Revision */
  309.     int             dd_apc;        /* Alternates / Cyl (SCSI) */
  310.     int             dd_rpm;        /* Revolutions Per Minute */
  311.     int             dd_intrlv;        /* Interleave factor */
  312.     int             dd_secsize;        /* Size of Sector (bytes) */
  313.     u_long         dd_size;        /* Size of disk in bytes */
  314.     int             dd_flags;        /* Info flags */
  315.     DEVICE        *dd_ctlr;        /* Controller disk is on */
  316.     struct _dkpart    *dd_part;        /* Partition information */
  317.     struct _dkdrive    *dd_nxt;        /* Pointer to next disk */
  318. };
  319. typedef struct _dkdrive DISKDRIVE;
  320.  
  321. /*
  322.  * Disk Flags (DISKDRIVE.dd_flags)
  323.  */
  324. #define DF_HEXUNIT    0x01            /* Unit is prt 3 hex digits */
  325.  
  326. /*
  327.  * Generic Name/Value table
  328.  */
  329. struct _nametab {
  330.     int            value;            /* Value field */
  331.     char                  *name;            /* Corresponding name */
  332.     char                  *valuestr;        /* Value string field */
  333. };
  334. typedef struct _nametab NAMETAB;
  335.  
  336. /*
  337.  * Disk Controller Table
  338.  */
  339. struct dkctlrtab {
  340.     u_short             ct_ctype;    /* Ctlr type index */
  341.     char            *ct_model;    /* Ctlr model name */
  342.     int                 ct_rdcmd;    /* Read command flag */
  343. };
  344. typedef struct dkctlrtab DKCTLRTAB;
  345.  
  346. /*
  347.  * FrameBuffer specific data
  348.  */
  349. struct _framebuffer {
  350.     int             fb_height;        /* Height (in pixels) */
  351.     int             fb_width;        /* Width (in pixels) */
  352.     int             fb_depth;        /* Depth (bits/pixel) */
  353.     u_long         fb_size;        /* Total size (in bytes) */
  354.     u_long         fb_vmsize;        /* Video memory (in bytes) */
  355.     int             fb_cmsize;        /* Color Map Size (#entries) */
  356. };
  357. typedef struct _framebuffer FRAMEBUFFER;
  358.  
  359. /*
  360.  * Network Interface specific data
  361.  */
  362. struct _netif {
  363.     char        *ni_typename;        /* Name of address type */
  364.     char        *ni_hostaddr;        /* Host address */
  365.     char        *ni_hostname;        /* Host name */
  366.     char        *ni_macaddr;        /* MAC address */
  367.     char        *ni_macname;        /* MAC name */
  368.     char        *ni_netaddr;        /* Network address */
  369.     char        *ni_netname;        /* Network name */
  370.     struct _netif    *ni_nxt;        /* Pointer to next element */
  371. };
  372. typedef struct _netif NETIF;
  373.  
  374. /*
  375.  * Address family table
  376.  */
  377. struct _aftab {
  378.     int            af_type;        /* Type value */
  379.     char           *af_name;        /* Name value */
  380.     NETIF         *(*af_getnetif)();        /* Function to get netif */
  381. };
  382. typedef struct _aftab AFTAB;
  383.  
  384. /*
  385.  * Table of devices
  386.  */
  387. struct devicetab {
  388.     int             d_type;        /* Device type */
  389.     char           **d_list;        /* List of devices */
  390.     DEVICE          *(*d_query)();        /* Query function */
  391. };
  392.  
  393. /*
  394.  * Basic device data
  395.  *
  396.  * Used when searching for initial list of devices
  397.  */
  398. struct _devdata {
  399.     char        *dd_devname;        /* Name of device */
  400.     int             dd_devunit;        /* Device specific unit # */
  401.     int             dd_slave;        /* Slave number */
  402.     char        *dd_ctlrname;        /* Name of Controller */
  403.     int             dd_ctlrunit;        /* Controller # */
  404.     int             dd_flags;        /* Device flags */
  405. };
  406. typedef struct _devdata DEVDATA;
  407.  
  408. /*
  409.  * Flags for DEVDATA.dd_flags
  410.  */
  411. #define DD_MAYBE_ALIVE    0x1            /* Device may be alive */
  412. #define DD_IS_ALIVE    0x2            /* Device is alive */
  413.  
  414. /*
  415.  * Device Data Table structure
  416.  */
  417. struct _devdatatab {
  418.     char        *ddt_name;        /* Name of device */
  419.     int             ddt_type;        /* Type of device */
  420.     char        *ddt_model;        /* Model */
  421.     char        *ddt_desc;        /* Description */
  422.     DEVICE          *(*ddt_probe)();        /* Probe device */
  423. };
  424. typedef struct _devdatatab DEVDATATAB;
  425.  
  426. /*
  427.  * Declarations
  428.  */
  429. extern int             DoPrintUnknown;
  430. extern int             Debug;
  431. extern int             Level;
  432.  
  433. char                    *index();
  434. char                    *rindex();
  435. char                    *strdup();
  436. char                    *strcat();
  437. char                    *strtok();
  438.  
  439. char                   *itoa();
  440. char                    *xmalloc();
  441. char                    *xcalloc();
  442.  
  443. extern DEVDATATAB           *GetDevDataTab();
  444. extern DEVICE                *NewDevice();
  445. extern DEVICE                *ProbeCPU();
  446. extern DEVICE                *ProbeDiskDrive();
  447. extern DEVICE                *ProbeFrameBuffer();
  448. extern DEVICE                *ProbeGeneric();
  449. extern DEVICE                *ProbeNetif();
  450. extern DEVICE                *ProbeTapeDrive();
  451. extern DEVICE                *MkMasterFromDevData();
  452. extern DEVICE                *ProbeDevice();
  453. extern DEVICE                *ProbeUnknown();
  454. extern DISKDRIVE               *NewDiskDrive();
  455. extern DISKPART             *NewDiskPart();
  456. extern FRAMEBUFFER            *NewFrameBuffer();
  457. extern NETIF                *NewNetif();
  458. extern char               *GetHostName();
  459. extern char               *GetKernArch();
  460. extern char               *GetKernArchName();
  461. extern char               *GetKernelVersionFromVersion();
  462. extern char               *GetKernelVersionStr();
  463. extern char               *GetModelName();
  464. extern char               *GetNameTabName();
  465. extern char               *GetOSNameStr();
  466. extern char               *GetOSVersionStr();
  467. extern char               *GetSerialNoStr();
  468. extern char               *MkDevName();
  469. extern char               *RunCmds();
  470. extern char               *RunTestFiles();
  471. extern char                *GetAppArchFromHostInfo();
  472. extern char                *GetCpuTypeFromHostInfo();
  473. extern char                *GetKernArchFromHostInfo();
  474. extern char                *GetKernelVersionFromHostInfo();
  475. extern char                *GetMemoryFromHostInfo();
  476. extern char                *GetMemoryFromPhysmem();
  477. extern char                *GetModelFromHostInfo();
  478. extern char                *GetOSNameFromUname();
  479. extern char                *GetOSVersionFromHostInfo();
  480. extern char                *GetOSVersionFromKernVer();
  481. extern char                *GetOSVersionFromUname();
  482. extern char                *MkDevName();
  483. extern char                *GetAppArch();    
  484. extern char                *GetCPU();
  485. extern char                *GetCharFile();
  486. extern char                *GetHostAddrs();
  487. extern char                *GetHostAliases();
  488. extern char                *GetHostID();
  489. extern char                *GetKernelVersion();
  490. extern char                *GetMan();
  491. extern char                *GetMemory();
  492. extern char                *GetModel();
  493. extern char                *GetOSName();
  494. extern char                *GetOSVersion();
  495. extern char                *GetRawFile();
  496. extern char                *GetRomVer();
  497. extern char                *GetSerialNo();
  498. extern int                AddDevice();
  499. extern void            Error();
  500. extern void                ShowDevices();
  501. extern void                 ShowGeneral();
  502.  
  503. #if    defined(HAVE_KVM)
  504. extern kvm_t                *KVM_open();
  505. extern void            KVM_close();
  506. extern int            KVM_read();
  507. #endif    /* HAVE_KVM */
  508.  
  509. #endif /* __sysinfo_defs__ */
  510.