mcsysinfo - MagniComp(tm) SysInfo - Obtain system informa
tion in a platform neutral manner
SYNOPSIS
cc -I/usr/local/sysinfo/include [ options ] file [ ... ]
-L/usr/local/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.
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.
The actual form varies according to the Cmd
that was specified.
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
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
name(3) call from the h_aliases parameter of
struct hostent.
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.
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
buffer.
MCSI_SERIAL
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.
OutSize
Indicates the length of the Out
buffer.
MCSI_NUMCPU
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.
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.
MCSI_DEVTREE
Obtain a list, possible in a hierarchical
tree, of physical (hardware) devices present
on the system.
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:
KeyStr The name of the variable.
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 converted to a string.
The value is NULL if the
information was not available
from the kernel.
ValInt1
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
which is defined as:
struct _DevInfo {
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 */
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 is known.
Files An array (list) of device (block, special) files 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
Slaves A pointer to a list of any slave (child) devices
which belong to 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_CPU Pointer to a CpuInfo_t entry (see below).
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.
CpuInfo_t
The CpuInfo_t type specifies CPU information. It is usu
ally available via DevInfo_t.DevSpec when DevInfo_t.Type
is set to DT_CPU. The definetion of CpuInfo_t is:
struct _CpuInfo {
char *Man; /* Manufacturer */
char *Model; /* Model of CPU */
char *Arch; /* Architecture Name */
char *ArchVer; /* Architecture Version */
char *Serial; /* Serial# */
int BitSize; /* Bits 32/64/... */
Large_t Speed; /* Clock Speed in Mhz */
/* L1 Instruction Cache */
Large_t L1iCacheSize; /* L1 Inst Cache in bytes */
int L1iAssoc; /* L1 Inst Associativity */
int L1iLines; /* L1 Inst # Lines */
int L1iLineSize; /* L1 Inst Line Size (bytes)*/
int InstTLB; /* # Inst TLB Entries */
int InstTLBAssoc; /* # Inst TLB Associativity */
int Stepping; /* Stepping */
Desc_t *Features; /* List of features */
};
typedef struct _CpuInfo CpuInfo_t;
The members of CpuInfo_t are defined as follows:
Man The name of the manufacturer of the CPU.
Model The model of CPU.
Arch The architecture of the CPU.
ArchVer
The architecture version of the CPU.
Serial The serial number of the CPU.
BitSize
The addressable bitsize of the CPU. e.g. 32 or 64
Speed The clock speed of the CPU in mega-hertz.
L1iCacheSize
The L1 instruction cache size in bytes.
L1iAssoc
The L1 instruction cache associativity.
L1iLines
The number of L1 instruction cache lines.
L1iLineSize
The size of each L1 instruction cache line.
InstTLB
The number of instruciton cache TLB entries.
InstTLBAssoc
The number of instruction cache TLB associativity.
L1dCacheSize
The L1 data cache size in bytes.
L1dAssoc
The L1 data cache associativity.
L1dLines
The number of L1 data cache lines.
The L2 cache associativity.
L2Lines
The number of L2 cache lines.
HasFPU Boolean value indicating where the CPU has an
onboard Floating Point Unit.
Stepping
The CPU's stepping value.
Features
A list of otherwise unstructured features supported
by the CPU.
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 */
Large_t DiskUsage; /* Space used by FileList */
SoftFileList_t *FileList; /* List of 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 */
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 ==
MC_SET_PROD ). e.g. SUNWcsr
Version
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 required
by 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
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
sents a more specific value than Arch. e.g. Pen
tium-III
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.
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
usually in a linked list. It is defined as follows:
/*
* 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.
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.
PartInfo_t
The PartInfo_t type defined a partition entry as follows:
/*
* Partition Information (CN_PARTITION)
*/
struct _PartInfo {
char *Title; /* Describes this entry */
char *DevPath; /* Dev Path e.g. /dev/dsk/c0t0s1 */
char *DevPathRaw; /* Raw Dev Path e.g. /dev/rdsk/c0t0s1 */
char *DevName; /* Dev Name e.g. c0t0 */
char *BaseName; /* c0t0s1 */
char *Name; /* Name e.g. s1 */
int Num; /* Part # for this disk e.g. 1 */
char *Type; /* Type e.g. ufs */
char *TypeDesc; /* Description of Type */
u_int TypeNum; /* Numeric value of Type if any */
char *UsageStatus; /* String value for Usage (below) */
char *MntName; /* Mount Name e.g. /usr */
char **MntOpts; /* Mount Options e.g. rw,quota */
Large_t Size; /* Size of partition (MB) */
Large_t AmtUsed; /* Amt of space currently used (MB)*/
int SecSize; /* Size of 1 sector */
Large_t StartSect; /* Starting Sector # */
device which represents this partition. e.g.
/dev/dsk/c0t0d0s3
DevPathRaw
A string which names the pathname of the raw (char
acter) device which represents this partition.
e.g. /dev/rdsk/c0t0d0s3
DevName
A string containing the kernel's name for this
device. e.g. sd0
BaseName
The base name of DevPath. e.g. c0t0d0s3
Name Name of the parititon e.g. s3
Num The numeric number of this partition which corre
sponds to Name. e.g. 3
Type A short string, usually a single word, describing
the type of partition this is. e.g. ufs
TypeDesc
A more verbose description of the parititoin type.
e.g. Unix File System
TypeNum
The numeric type identifier of this partition as
described by Type and TypeDesc.
UsageStatus
A string containing information on how this parti
tion is used. e.g. For a UFS filesystem this
would contain a mount point such as /usr
MntName
The name of the mount point. e.g. /usr
MntOpts
An array of strings containing the options used by
the OS to mount this partition. e.g. rw quota
logging
Size The total size, in MB, of this partition.
AmtUsed
The amount of space, in MB, this partition cur
rently consumes.
SecSize
The number of bytes in 1 sector (usually 512).
Upon successful completion, mcSysInfo() returns 0 and out
put data is available in the buffer indicated by the Out
parameter. Upon error, mcSysInfo() returns -1.
NOTES
File descriptors are opened for certain MCSI_* commands
when using the MCSIOP_CREATE operator depending upon the
platform upon which mcSysInfo() is operating on. All file
descriptors which are opened by the platform specific
functions of mcSysInfo() are closed before returning.
FILES
/usr/local/sysinfo/config - Config files read at runtime
SEE ALSO
sysinfo.1 sysinfo.cf.5
26 March 2001 1