mcsysinfo - MagniComp(tm) SysInfo - Obtain system informa-
       tion in a platform neutral manner


SYNOPSIS

       cc  -I/opt/sysinfo/include  [  options  ]  file  [  ...  ]
       -L/opt/sysinfo/lib/platform/name -lmcsysinfo

       #include <mcsysinfo.h>

       MCSIquery_t Query;


       Query.Op = MCSIOP_PROGRAM;
       Query.In = "ProgramName";
       Query.InSize = strlen((char *)Query.In);
       int mcSysInfo(&Query);


       Query.Op = MCSIOP_CREATE;
       Query.Cmd = MCCMD;
       int mcSysInfo(&Query);

       Query.Op = MCSIOP_DESTROY;
       int mcSysInfo(&Query);


DESCRIPTION

       The  MagniComp(tm) SysInfo mcSysInfo() function allows the
       caller to obtain system information about the local system
       in  an operating system neutral fashion.  Data is returned
       in platform nuetral data structures.  This allows applica-
       tions  to  be  built  using mcSysInfo() which are platform
       neutral.

       The Query.Op parameter controls the basic  operation  per-
       formed  by  mcSysInfo().   The  following  values are sup-
       ported:

              MCSIOP_PROGRAM
                     When Query.Op is set to MCSIOP_PROGRAM  then
                     Query.In should point at a string naming the
                     calling program and Query.InSize  should  be
                     set  to the size of Query.In in bytes.  This
                     name is used by mcSysInfo() when  displaying
                     error and debug messages.

              MCSIOP_CREATE
                     When  Query.Op is set to MCSIOP_CREATE, data
                     is retrieved from the local system in  plat-
                     form specific manner and placed in allocated
                     structures  in  the  location  indicated  by
                     Query.Out.

                     When  Query.Op is set to MCSIOP_DESTROY, the
                     data located at  the  address  indicated  by
                     Query.Out is destroyed (unallocated).

       The Query is defined as follows:

              /*
               * Query type for mcSysInfo() calls
               */
              typedef struct {
                  /* Caller's Input */
                  int         Op;         /* MCSIOP_* operator */
                  int         Cmd;        /* MCSI_* command to perform */
                  uint_t      Flags;      /* Option Flags */
                  char      **SearchExp;  /* Search Expression */
                  Opaque_t    In;         /* Ptr to Input */
                  size_t      InSize;     /* Size of In */
                  /* Results */
                  Opaque_t    Out;        /* Ptr to Output */
                  size_t      OutSize;    /* Size of Out */
              } MCSIquery_t;


       The members of MCSIquery_t are defined as follows:

       Op     Specifies  what operation to perform on Cmd.  Valid
              values are as follows:

              MCSIOP_CREATE
                     (Default) Obtain the data requested  by  Cmd
                     and return the result in the Out and OutSize
                     parameters.  The  data  located  at  Out  is
                     allocated  when  this function is called and
                     should be destroyed (unallocated) by calling
                     mcSysInfo()  with  Op  set to MCSIOP_DESTROY
                     (see below).

              MCSIOP_DESTROY
                     Destroy (unallocate)  the  data  located  at
                     address Out.

       Cmd    Specifies  which command to perform.  See below for
              the valid list of commands.

       Flags  Flags is a set of bit flags which enable  different
              options as specified by the following values:

              MCSIF_DATA
                     (Default)  This  option  causes  data  to be
                     returned to  the  Out  buffer  in  the  form
                     requiring  the  least  amount  of additional
                     parsing by the calling function as possible.

              MCSIF_STRING
                     This option causes data to  be  returned  in
                     string form readying for human display when-
                     ever possible.  This option is  only  avail-
                     able  for  specific  Cmd values as specified
                     below.

       SearchExp
              An array of  strings  to  use  to  limit  the  data
              returned  in Out.  Only the following commands sup-
              port this option:

              MCSI_DEVTREE
                     Used to specify a list of  names  which  are
                     checked  against the device's Name, Aliases,
                     and AltName values.

       In     Used to provide input to certain operations such as
              MCSIOP_PROGRAM.

       InSize Size of In in bytes.

       Out    All  data is returned in an allocated buffer at the
              location specified by the Out  parameter  The  con-
              tents of the buffer vary according to the Cmd spec-
              ified.  See below for more details.

       OutSize
              The size (length) of data located in the Out  loca-
              tion  is  specified  by  OutSize where appropriate.
              The OutSize data is not guarenteed to by  the  full
              size  of the allocated buffer, but is guaranteed to
              always be greater than zero when the call  succeeds
              and  Out  points  to a valid buffer.  See below for
              more details.

       The valid values for Cmd are as follows:

              MCSI_HOSTNAME
                     Obtain the system's canonical hostname.

                      Out    Points at a  char  *  buffer.   e.g.
                             "sunworld".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_HOSTALIASES
                     Obtain a list of host aliases for the  local
                     host.  These are obtained via the gethostby-

                      Out    When MCSIF_DATA is set in Flags (the
                             default) Out is a pointer to a  char
                             ** array of aliases.  The last entry
                             in this array will always  be  NULL.
                             When  MCSIF_STRING  is  set in Flags
                             Out is a pointer to a char *  string
                             which  contains  a  space  seperated
                             list of aliases.  e.g.  "fred  fred2
                             fred3".


                     OutSize
                             When MCSIF_DATA is set in Flags (the
                             default) OutSize indicates the  num-
                             ber  of entries in the array located
                             at   the   Out    location.     When
                             MCSIF_STRING is set in Flags OutSize
                             indicates the length of the  buffer.

              MCSI_HOSTADDRS
                     Obtain   a   list  of  the  local  hosts  IP
                     addresses.

                      Out    When MCSIF_DATA is set in Flags (the
                             default)  Out is a pointer to a char
                             ** array of IP addresses.  The  last
                             entry  in  this array will always be
                             NULL.  When MCSIF_STRING is  set  in
                             Flags  Out  is a pointer to a char *
                             string which contains a space seper-
                             ated  list  of  IP  addresses.  e.g.
                             "129.152.1.1            129.152.20.1
                             192.5.5.44".


                     OutSize
                             When MCSIF_DATA is set in Flags (the
                             default) OutSize indicates the  num-
                             ber  of entries in the array located
                             at   the   Out    location.     When
                             MCSIF_STRING is set in Flags OutSize
                             indicates the length of the  buffer.

              MCSI_HOSTID
                     Obtain the host identifier.

                      Out    Points  at  a  char  * buffer.  e.g.
                             "8025asf3".

                     OutSize
                             Indicates  the  length  of  the  Out

                     Obtain the host's serial number.

                      Out    Points  at  a  char  * buffer.  e.g.
                             "FF5443139".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_MANSHORT
                     Obtain the short name of the host's manufac-
                     turer.

                      Out    Points at a  char  *  buffer.   e.g.
                             "Sun".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_MANLONG
                     Obtain the long name of the host's  manufac-
                     turer.

                      Out    Points  at  a  char  * buffer.  e.g.
                             "Sun Microsystems, Inc."

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_MAN
                     Obtain  the  combined short and long name of
                     the host's manufacturer.

                      Out    Points at a  char  *  buffer.   e.g.
                             "Sun (Sun Microsystems, Inc.)".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_MODEL
                     Obtain the host's model name.

                      Out    Points at a  char  *  buffer.   e.g.
                             "Ultra 10 Model 300".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

                     Obtain the number of physical CPUs which are
                     installed and enabled.

                      Out    Points  at  a  char  * buffer.  e.g.
                             "2".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_CPUTYPE
                     Obtain  the  type  of CPU used in the system
                     (e.g. SPARCv9, Pentium, etc.).

                      Out    Points at a  char  *  buffer.   e.g.
                             "sparcv9+vis".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_APPARCH
                     Obtain the application architecture  of  the
                     system (e.g. SPARC, x86, etc.).

                      Out    Points  at  a  char  * buffer.  e.g.
                             "sparc".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_KERNARCH
                     Obtain the kernel architecture of the system
                     (e.g. sun4u, sun4m, etc.).

                      Out    Points at a  char  *  buffer.   e.g.
                             "sun4u".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_OSNAME
                     Obtain the name of the operating system.

                      Out    Points at a  char  *  buffer.   e.g.
                             "SunOS".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

                     Obtain the version of the  operating  system
                     (e.g. 5.6, 4.2.1, etc.).

                      Out    Points at a char * buffer.

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_OSDIST
                     Obtain the distribution name of the  operat-
                     ing  system (e.g. Solaris 2.6 5/98, S.u.S.e.
                     6.1, etc.).

                      Out    Points at a char * buffer.

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_KERNVER
                     Obtain  the  version  of the kernel which is
                     installed (e.g. SunOS  Release  5.6  Version
                     Generic_105182-05  [UNIX(R) System V Release
                     4.0])

                      Out    Points at a char * buffer.

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_BOOTTIME
                     Obtain  the  time  that  the system was last
                     booted.

                      Out    Points at a char * buffer.  e.g "Sat
                             Jun 19 11:55:41 1999".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

              MCSI_CURRENTTIME
                     Obtain the current (local) system time.

                      Out    Points at a char * buffer.  e.g "Sat
                             Jun 19 11:55:41 1999".

                     OutSize
                             Indicates  the  length  of  the  Out
                             buffer.

                     Obtain a list, possible  in  a  hierarchical
                     tree, of physical (hardware) devices present
                     on the system.

                      Out    Pointer to a DevInfo_t buffer.   See
                             DevInfo_t below for details.

                     OutSize
                             Is  1  or more if Out contains valid
                             data.

              MCSI_KERNELVAR
                     Obtain a list  of  kernel  variables,  their
                     description,  and  their values as presently
                     configured.

                      Out    Points at  a  linked  list  of  type
                             Define_t which contains data as fol-
                             lows:

                             KeyStr The name of the kernel  vari-
                                    able.

                             ValStr1
                                    The  type of variable this is
                                    (boolean, int, long, string).

                             ValStr2
                                    Descriptive text of what this
                                    variable is for.

                             ValStr3
                                    The value obtained  from  the
                                    kernel.  The value is NULL if
                                    the   information   was   not
                                    available from the kernel.


                     OutSize

                     OutSize
                             The  number  of valid entries in the
                             linked list at location Out.

              MCSI_SYSCONF
                     Obtain a list of system configuration values
                     via the sysconf(3) interface.

                      Out    Points  at  a  linked  list  of type
                             Define_t which contains data as fol-
                             lows:

                                    The  type of variable this is
                                    (boolean, int, long, string).

                             ValStr2
                                    Descriptive text of what this
                                    variable is for.

                             ValStr3
                                    The value obtained  from  the
                                    kernel converted to a string.
                                    The  value  is  NULL  if  the
                                    information was not available
                                    from the kernel.

                             ValInt1
                                    The value obtained  from  the
                                    kernel  in integer form.  The
                                    value is less than 0  if  the
                                    data  was  not retrieved suc-
                                    cessfully.


                     OutSize
                             The number of valid entries  in  the
                             linked list at location Out.

              MCSI_SOFTINFO
                     Obtain  a  list,  possible in a hierarchical
                     tree,  of  software  and  software  packages
                     which are installed on the system.

                      Out    Pointer to a SoftInfo_t buffer.  See
                             SoftInfo_t below for details.

                     OutSize
                             Is 1 or more if Out  contains  valid
                             data.

              MCSI_PARTITION
                     Obtain  a  list,  possible in a hierarchical
                     tree, of disk  partitions  defined  on  this
                     system.

                      Out    Pointer to a PartInfo_t buffer.  See
                             PartInfo_t below for details.

                     OutSize
                             Is 1 or more if Out  contains  valid
                             data.


DevInfo_t

       The  primary  device  information  data  type is DevInfo_t
                  char              *Name;       /* Name (e.g. cgtwo0) */
                  char              *Driver;     /* Driver Name (e.g. cgtwo) */
                  char             **Aliases;    /* Alias Names */
                  char              *AltName;    /* Alt name */
                  char             **Files;      /* Device files */
                  int                Type;       /* Device type (eg DT_TAPE) */
                  int                ClassType;  /* Class type (eg SCSI,IPI) */
                  char              *Vendor;     /* Hardware Vendor */
                  char              *Model;      /* Model */
                  char              *ModelDesc;  /* eg SCSI, 4.0GB, etc. */
                  char              *Serial;     /* Serial Number */
                  char              *Revision;   /* Revision Info */
                  DevDesc_t         *DescList;   /* Device Description */
                  int                Unit;       /* Unit number */
                  int                NodeID;     /* ID of this node */
                  char              *MasterName; /* Name of master */
                  void              *DevSpec;    /* Device specific info */
                  struct _DevInfo   *Master;     /* Device controller */
                  struct _DevInfo   *Slaves;     /* Devices on this device */
                  struct _DevInfo   *Next;       /* Pointer to next device */
                  /* Internal use only */
                  void              *OSdata;     /* Data from OS */
                  /* Obsolete */
                  int                Addr;       /* Address */
                  int                Prio;       /* Priority */
                  int                Vec;        /* Vector */
              };
              typedef struct _DevInfo DevInfo_t;


       The members of DevInfo_t are defined as follows:

       Name   The devices name, inclusive of  it's  unit  number.
              e.g.   sd0.   If  the  device name ends in a digit,
              then the slash ('/') character followed by the unit
              number  is  appended  to  clarify  the  name.  e.g.
              pgx32/0

       Driver The name of the  device  driver  for  this  device.
              This  is  typically,  but  not always, the value of
              Name without the unit.  e.g. For a  device  with  a
              Name of sd0 the value of Driver would be sd

       Aliases
              An  array  of  alternate  values for Names by which
              this device may be addressed.  e.g. A  device  with
              Name   of   dwis0  might  have  an  alias  such  as
              pci1001,2003 .

       AltName
              This member is depreciated by the  Aliases  member.
              When  set,  it  contains a single alternate name by
              which this device might be addressed.

       Type   A  numeric  value which classes the type of device.
              Valid  numeric  values  are  defined  by  the  DT_*
              entries in <mcsysinfo.h>.

       ClassType
              This  value defines a classification of this device
              within it's Type.  The valid values  for  ClassType
              are specified by the CT_* entries in <mcsysinfo.h>.
              e.g. A SCSI  disk  device  would  have  a  Type  of
              DT_DISK and a ClassType value of CT_SCSI .

       Vendor The  name  of  the  vendor who sold or manufactured
              this device.

       Model  The model name of the device.

       ModelDesc
              A further description of the model which varies  by
              device and operating system.

       Serial The devices serial number.

       Revision
              The revision of the device.

       DescList
              A  list of descriptive information that is not oth-
              erwise specified in DevInfo_t.   This  list  varies
              greatly  by  operating system and specific hardware
              platforms and models.  There is no  guarentee  that
              the  DescList information will remain constant from
              model to model, even on  the  same  version  of  an
              operating system.

       Unit   The device's unit number.  This is usually, but not
              always, the physically assigned unit number of  the
              device.

       NodeID Some operating systems and hardware platforms (e.g.
              Solaris+SPARC+OpenBootProm)  assign  devices  soft,
              unique identifiers for tracking purposes inside the
              kernel.

       MasterName
              The name of our master (parent)  device.   This  is
              used  if  no  Master link is available.  The Master
              data should always be used whenever available.

       Master A pointer to the master (parent) for this device.


       Next   A  pointer  to any sibling devices which all belong
              to the same Master.

       DevSpec
              The address to a buffer containing information spe-
              cific  to  the  device Type .  The following device
              Type values normally provide data via DevSpec :

              DT_DISK
                     Pointer to a DiskDrive_t entry.

              DT_FRAMEBUFFER
                     Pointer to a FrameBuffer_t entry.

              DT_NETIF
                     Pointer to a NetIF_t entry.

              DT_MONITOR
                     Pointer to a Monitor_t entry.

       Addr   This value is obsolete.

       Prio   This value is obsolete.

       Vec    This value is obsolete.


SoftInfo_t

       The software information data type is SoftInfo_t which  is
       defined as:

              struct _SoftInfo {
                  char         *EntryType;  /* Entry Type MC_SET_*_S */
                  int             EntryTypeNum;  /* Numeric EntryType */
                  char         *Name;       /* Name */
                  char         *Version;    /* Version */
                  char         *Revision;   /* Revision for this Version */
                  char         *Desc;       /* Description of software */
                  char         *DescVerbose;     /* Verbose Description */
                  char         *URL;        /* Product URL */
                  char         *License;    /* Product License */
                  char         *Copyright;  /* Product Copyright */
                  char         *Category;   /* Category pkg belongs to */
                  char         *SubCategory;     /* Sub Category */
                  char         *OSname;          /* OS name runs on */
                  char         *OSversion;  /* OS version runs on */
                  char         *Arch;       /* Architecture runs on */
                  char         *ISArch;          /* Instruct. Set Arch. */
                  char         *InstDate;   /* Installation Date */
                  char         *BuildDate;  /* Build Date */
                  char         *ProdStamp;  /* Production Stamp */
                  char         *BaseDir;    /* Base Dir for files */
                  Desc_t            *DescList;   /* Misc Descriptions */
                  /* Vendor's info */
                  char         *VendorName; /* Name of vendor */
                  char         *VendorEmail;     /* Email of vendor */
                  char         *VendorPhone;     /* Phone of vendor */
                  char         *VendorStock;     /* Vendor's Stock # for Pkg */
                  /* Tree Links */
                  struct _SoftInfo   *Master;         /* (Up) Our parent */
                  struct _SoftInfo   *Slaves;         /* (Down) Children */
                  struct _SoftInfo   *Next;      /* (Side) Siblings */
              };
              typedef struct _SoftInfo SoftInfo_t;


       The  members  of  SoftInfo_t  are defined below and except
       where noted, the string formats vary from  OS  to  OS  and
       package to package:

       EntryType
              A  string  which  indicates  the type of entry this
              SoftInfo_t  node  represents.   Valid  values   are
              defined by the following constants:


              MC_SET_PKG_S
                     Package - this entry represents a collection
                     of installed files/directories.  This is the
                     lowest level EntryType.

              MC_SET_PROD_S
                     Product - this entry represents a collection
                     of  packages  (MC_SET_PKG_S).   It  normally
                     acts as a parent node in a hierarchical tree
                     of software packages and  usually  does  not
                     include any attributes other than Slaves and
                     Next .


       EntryTypeNum
              The corresponding numeric value for EntryType.  The
              following constants are valid values:


              MC_SET_PKG
                     Numeric value for MC_SET_PKG_S.

              MC_SET_PROD
                     Numeric value for MC_SET_PROD_S.


       Name   A  string which describes the package (if EntryType
              == MC_SET_PKG ) or the  product  (if  EntryType  ==
              A  string which indicates the version of this pack-
              age or product.  e.g.  5.1

       Revision
              A string indicatating the revision of this package.
              e.g.  2000-02-03

       Desc   A  short string without any newline (\n) characters
              which provides a description of this package.  e.g.
              Core Required Files

       DescVerbose
              A verbose string, usually containing multiple lines
              (\n), The core files in this package are requiredby
              all other packages.

       URL    A  Universal  Resource Locatator (URL) for locating
              more information about  this  package  or  product.
              e.g.  http://www.sun.com/solaris

       License
              A  string  naming or describing the licensing terms
              of this package or product.  e.g.  GPL or  Free  to
              everyone with no restrictions

       Copyright
              A  string  naming or describing the copyright terms
              of this package or product.  The string may include
              embedded  newline  characters.   e.g.  (c)Copyright
              1901-2101 Big Software Company

       Category
              A string describing the primary category this pack-
              age or product belongs to.  e.g.  system

       SubCategory
              A  string  describing the secondary category, often
              within  Category,  that  this  package  or  product
              belongs to.  e.g.  openwindows

       OSname A  string containing the name of the operating sys-
              tem this package runs on.  e.g.  Linux

       OSversion
              A string containing the version  of  the  operating
              system this package runs on.  e.g.  2.2.1

       Arch   A  string  naming  the  CPU architecture which this
              package runs on.  e.g.  x86

       ISArch A string naming the  Instruction  Set  Architecture
              which this package runs on.  The ISA usually repre-

       InstDate
              A  string  containing  the  date  this  package was
              installed.  e.g.  Feb 02 1999 20:43

       BuildDate
              A string  containing  the  date  this  package  was
              built.  e.g.  1/15/98

       ProdStamp
              A  string  generated  whent he package was built to
              identify the production of the package.  e.g.  but-
              tercup19980904173114

       BaseDir
              A  string  naming  the  base  directory under which
              package files are installed.  e.g.  /usr

       DiskUsage
              The number of bytes of  disk  space  the  installed
              package consumes.

       DescList
              A linked list of miscellaneous descriptions for any
              other information which is not categorized.

       VendorName
              The name of the vendor who created  or  distributes
              the package.

       VendorEmail
              The vendor's email address.

       VendorPhone
              The vendor's phone number.

       VendorStock
              The vendor's stock number for this package.

       Master The  parent  (master)  node for this package in the
              SoftInfo_t tree.

       Slaves The slave (child) nodes for this package.

       Next   The peer nodes in the SoftInfo_t tree.

       FileList
              A list of files associated with this package.   See
              SoftFileList_t for more information.


SoftFileList_t

       The  SoftFileList_t type defines software file information
               * Software File Data
               */
              struct _SoftFileData {
                  int             Type;          /* File, dir, symlink, etc */
                  char         *Path;       /* Path to file */
                  char         *LinkTo;          /* Link To what */
                  Large_t         FileSize; /* Size of file */
                  char         *MD5;        /* MD5 checksum */
                  char         *CheckSum;   /* Platform specific checksum */
                  char        **PkgNames;   /* List of used by Pkgs */
                  struct _SoftFileData *Next;         /* Next entry */
              };
              typedef struct _SoftFileData SoftFileData_t;

              /*
               * List of SoftFileData_t entries
               */
              struct _SoftFileList {
                  SoftFileData_t     *FileData;  /* Ptr to FileData entry */
                  struct _SoftFileList *Next;         /* Next entry in our list */
              };
              typedef struct _SoftFileList SoftFileList_t;
              /*
               * SoftFile Types for SoftFileData.Type
               */
              #define SFT_FILE    1         /* Plain file */
              #define SFT_FILE_S  "File"
              #define SFT_HLINK   2         /* Hard Link */
              #define SFT_HLINK_S "Hard-Link"
              #define SFT_SLINK   3         /* Soft Link */
              #define SFT_SLINK_S "Symbolic-Link"
              #define SFT_DIR          4         /* Directory */
              #define SFT_DIR_S   "Directory"
              #define SFT_CDEV    5         /* Device File */
              #define SFT_CDEV_S  "Character-Device"
              #define SFT_BDEV    6         /* Device File */
              #define SFT_BDEV_S  "Block-Device"



       The list of files associated with a package is defined  by
       the  SoftFileList_t type.  The actual file data is defined
       in SoftFileList_t->FileData.

       The members of SoftFileData_t are defined as follows:

       Type   Indicates the type of file this is.  The valid val-
              ues are defined by the following constants:

              SFT_FILE
                     A regular file.

                     A hard link.

              SFT_SLINK
                     A symbolic link.

              SFT_DIR
                     A directory.

              SFT_CDEV
                     A character special device file.

              SFT_BDEV
                     A block special device file.

       Path   The pathname of this entry.  e.g.  /bin/cp

       LinkTo If  Type  is SFT_HLINK or SFT_SLINK then this vari-
              able names the path that Path is linked to.

       FileSize
              The size of this file.  Usually only valid if  Type
              is SFT_FILE.

       MD5    The MD5 checksum of the file.

       CheckSum
              The platform specific checksum of the file.

       PkgNames
              A list of package names this file belongs to.