/*
Title		Solaris System MOF specification
Date		05/09/2000
Version		1.1
(c) Copyright 2000, Sun Microsystems, Inc.
*/

#pragma Locale ("en_US")

    [Provider("com.sun.wbem.solarisprovider.process.Solaris_Process"),
     Description ("A Solaris Process.")
    ]
class Solaris_Process : CIM_Process
{

    [read,
     Description("The user who owns the process "),
     MaxLen (256)
    ]  
    string ProcessOwner;

    [read, 
     Description ("The base name of the process executable(first 8 bytes)"),
     MaxLen (256)
    ]  
    string ProcessExecutable;

    [read,
     Description("The memory address of the process."),
     MaxLen (256)
    ]  
    string ProcessMemoryAddr;

    [read,
     Description("The processID of the parent process."),
     MaxLen (256)
    ]  
    string ParentHandle;

    [read, 
     Description("The process group ID"),
     MaxLen (256)
    ]  
    string GroupHandle;

    [read,
     Description("The user priority of the process"),
     MaxLen (256)
    ]  
    string ProcessUserPriority;


    [read,
     Description("The percent CPU time used by the process"),
     MaxLen (256)
    ]  
    string PercentCPUTime;

    [read, 
     Description("The ratio of the resident set size to physical memory"),
     MaxLen (256)
    ]  
    string PercentMemorySize;
 
    [read,
     Description("The size of the process virtual address space in KiloBytes "),
     Units ("KiloBytes")
    ]  
    uint64 ProcessVMSize;
 
    [read, 
     Description("The resident set size of the process in KiloBytes "),
     Units ("KiloBytes")
    ]  
    uint64 ProcessResidentSetSize;
 
    [read,
     Description("The name of the controlling terminal of the process"),
     MaxLen (256)
    ]  
    string ProcessControllingTerminal;
 
    [read,
     Description("The nice value of the process ..system scheduling priority"),
     MaxLen (256)
    ]  
    string SystemSchedulingPriority;
 
    [read,
     Description("The scheduling class of the process "),
     MaxLen (256)
    ]  
    string ProcessSchedulingClass;
 
    [read,
     Description("The starting time or date of the process "),
     MaxLen (256)
    ]  
    string ProcessStartTime;
 
    [read,
     Description("The cumulative execution time of the process,"
          	 "in the format [[dd-]hh:]mm:ss"),
     MaxLen (256)
    ]  
    string CumulativeExecutionTime;
 
    [read, 
     Description("The execution state of the process as a string"
                 " S --> SLEEPING, R -->RUNNABLE, Z -->ZOMBIE, "
                 "T -->BLOCKED, O -->RUNNING on CPU"),
     MaxLen (256),
     Values {"O","S","R","Z","T"}
    ]  
    string ProcessStateString;
 
    [read,
     Description("The number of the processor to which the process is bound"),
     MaxLen (256)
    ]  
    string BoundProcessorNumber;
 
    [read,
     Description("The address of an event for which the process is sleeping"),
     MaxLen (256)
    ]  
    string ProcessWaitingAddr;

    [read,
     Description("The executing command with all its argument as a string"),
     MaxLen (256)
    ]  
    string ExecutingCommand ;
 
    [Description("Time in user mode and kernel mode, in milliseconds."
        	 "If this information is not available, a value of 0 "
		 "should be used."),
     Units("MilliSeconds")
    ]  
    uint64 UserKernelModeTime;

    [Description("Suspend the process (PR_REQUESTED stop).")]
    sint32 suspendProcess([IN] sint32 pid) ;
 
    [Description("Set the process running (inverse of pstop ).")]
    sint32 resumeProcess([IN] sint32 pid) ;

    [Description("Start a new process.")]
    sint32 startNewProcByUid([IN] string command,
			     [IN] string processArgs,
			     [IN] string envArgs[],
			     [IN] string username
    );

    [Description("Get the extended property passed  in.  Such properties"
		 " include: PROCESS_STACK, PROCESS_FLAGS, PROCESS_CRED, "
		 "PROCESS_ADDRMAP, PROCESS_LDD, PROCESS_SIG, "
		 "PROCESS_FILES, PROCESS_CWD, PROCESS_TREE, "
		 "PROCESS_RESOURCE_LIMITS, PROCESS_ENV")  
    ]
    sint32 getExtendedProperty([IN] string extendedProperty,
			       [IN] string processID,
			       [OUT] string data[]
    ) ;

};


    [Provider("com.sun.wbem.solarisprovider.operatingsystem.Solaris_OperatingSystem"),
     Description ("The Solaris Operating System.")
    ]
class Solaris_OperatingSystem : CIM_OperatingSystem
{
    [ read, Description (
          "Identifies the  total  amount  of  swap  space in kilobytes"
          "currently allocated  for use as backing store."),  Units ("kilobytes") ]
    uint64 AllocatedSwapSpace;

    [ read, Description (
          "Identifies the total amount of  swap  space  in  kilobytes  not"
          "currently  allocated, but claimed by memory mappings for possible future use." ),  Units ("kilobytes") ]
    uint64 ReservedSwapSpace;

    [ read, Description (
          "Identifies the total amount of swap space in kilobytes that  is"
          "either allocated or reserved." ), Units ("kilobytes") ]
    uint64 UsedSwapSpace;

    [ read, Description (
          "Identifies the total swap space in kilobytes that is  currently"
          "available for future reservation and allocation." ), Units ("kilobytes") ]
    uint64 AvailableSwapSpace;


    [Description("SetDateTime sets the current system date and time"
      		 "to the time passed in the Time parameter."
          	 "TRUE is returned on success, FALSE on failure.")
    ]
    boolean SetDateTime([IN] datetime Time);
};


    [Provider("com.sun.wbem.solarisprovider.assoc.Solaris_InstalledOS"),
     Description ("An association linking a Solaris_OperatingSystem"
                  " and the Solaris_ComputerSystem that it is installed on.")
    ]
class Solaris_InstalledOS : CIM_InstalledOS
{
};

    [Provider("com.sun.wbem.solarisprovider.assoc.Solaris_RunningOS"),
     Description ("An association linking the running Solaris_OperatingSystem"
                  " and the Solaris_ComputerSystem that it is running on.")
    ]
class Solaris_RunningOS : CIM_RunningOS
{
};

    [Provider("com.sun.wbem.solarisprovider.assoc.Solaris_OSProcess"),
     Description ("An association linking  Solaris_Process"
                  " and the Solaris_OperatingSystem that it is running .")
    ]
class Solaris_OSProcess : CIM_OSProcess
{
};

[Provider("com.sun.wbem.solarisprovider.fsmgr.files.Solaris_DataFile"),
 Description("Solaris_DataFile is inherited from CIM_DataFile.") 
] 
class Solaris_DataFile : CIM_DataFile
{
};

//======================================================================
// Title: Solaris_LocalFileSystem
// Version: 1.0
// Date: 5/16/00
// Description: Solaris_LocalFileSystem is inherited from CIM_LocalFileSystem
//=======================================================================

    [Abstract,
     Description("A class derived from LocalFileSystem that represents the "
	         "file store on a ComputerSystem's locally controlled media.")
    ]
class Solaris_LocalFileSystem : CIM_LocalFileSystem
{

    [Description("Indicates the total amount of used space on the File System "
		 "in bytes. Note that this is not the FileSystemSize minus "
		 "AvailableSpace due to the space reserved only for "
		 "superuser."),
     Units("Bytes") 
    ]
    uint64 UsedSpace;
};

//======================================================================
// Title: Solaris_UFS
// Version: 1.0
// Date: 5/16/00
// Description: Solaris_UFS is inherited from Solaris_LocalFileSystem
//=======================================================================

    [Provider("com.sun.wbem.solarisprovider.fsmgr.fstype.Solaris_UFS"),
     Description ("A class derived from Solaris_LocalFileSystem that "
	          "represents the UNIX filesystem.") 
    ]
class Solaris_UFS : Solaris_LocalFileSystem
{
    [Description("If set to true: the file system  will ignore access"
   	         " time updates on files. If set to false (default): "
		 "the file system will record access times.") 
    ]
    boolean NoAtime = false;

    [Description("If set to true (default): the file system will defer"
	         " writing access times to disk. If set to false: "
		 "writing of access times is not deferred.") 
    ]
    boolean DfraTime = true;

    [Description("If set to true: direct i/o is used. "
	         "If set to false (default): direct i/o is not used.") 
    ]
    boolean ForceDirectIO = false;

    [Description("If set to true: the filesystem is mounted 'globally' "
	         "on all nodes of a cluster.  If set to false (false):"
		 " the filesystem is not mounted on all nodes of a "
		 "cluster. Ignored for non-clustered systems.") 
    ]
    boolean Global = false;

    [Description("If set to true (default): allow keyboard interrupts. "
		 "If set to false: don't allow keyboard interrupts.") 
    ]
    boolean Intr = true;

    [Description("If set to true (default): handles large files. "
		 "If set to false: will not handle large files. If large "
		 "files exist, the mount will fail.") 
    ]
    boolean LargeFiles = true;

    [Description("If set to true: log all transactions."
		 "If set to false (default): do not log transactions.") 
    ]
    boolean Logging = false;

    [Description("If set to true: the mount entry is added to /etc/mnttab."
		 "If set to false (default): the mount is not recorded in "
		 "/etc/mnttab.") 
    ]
    boolean NoMnttabEntry = false;

    [Description("Action to take when a filesystem error occurs.  "
		 "Default action is panic."),
     MaxLen(16),
     Values {"panic, lock, umount"} 
    ]
    string OnErrorAction = "panic";

    [Description("If set to true: enable quota checking.  "
		 "If set to false (default): disable quota checking.") 
    ]
    boolean Quota = false;

    [Description("If set to true: remount a read-only file system with "
		 "read-write options.  If set to false (default): "
		 "the filsystem is mounted with the specified mount"
		 " options.") 
    ]
    boolean Remount = false;

    [Description("If set to true: mount the filesystem read-write with quotas "
		 "enabled.  If set to false (default): the filsystem is "
		 "mounted with the specified mount options.") 
    ]
    boolean ReadWriteQuota = false;

    [Description("If set to true: don't allow allow setuid execution.  "
		 "If set to false (default): allow setuid execution.") 
    ]
    boolean NoSuid = false;

    [Description("If set to true: the filesystem is mounted over an existing "
		 "mounted filesystem.  If set to false (default): the "
		 "filesystem is not mounted over an existing mounted "
		 "filesystem.") 
    ]
    boolean Overlay = false;
};

//======================================================================
// Title: Solaris_HSFS
// Version: 1.0
// Date: 5/16/00
// Description: Solaris_HSFS is inherited from Solaris_LocalFileSystem
//=======================================================================

    [Provider("com.sun.wbem.solarisprovider.fsmgr.fstype.Solaris_HSFS"),
     Description ("A class derived from Solaris_LocalFileSystem that "
		  "represents the filesystem on a CD-ROM.") 
    ]
class Solaris_HSFS : Solaris_LocalFileSystem
{
    [Description("If set to true: the filesystem is mounted 'globally' on all "
		 "nodes of a cluster.\n"
		 "If set to false (false): the filesystem is not mounted on "
		 "all nodes of a cluster.\n"
		 "Ignored for non-clustered systems.") 
    ]
    boolean Global = false;

    [Description("If set to true: ignore Rock Ridge extensions and interpret "
		 "as a High Sierra file system.\n"
		 "If set to false (default): use Rock Ridge extensions.") 
    ]
    boolean NoRockRidge = false;

    [Description("If set to true: suppress processing trailing dot at the end "
		 "of a file name\n."
		 "If set to false (default): always process trailing dots.") 
    ]
    boolean NoTrailDot = false;

    [Description("If set to true: don't map uppercase names to lower case.\n"
		 "If set to false (default): map uppercase names to lowercase.")
    ]
    boolean NoMapLcase = false;

    [Description("If set to true: the mount entry is added to /etc/mnttab."
		 "If set to false (default): the mount is not recorded in "
		 "/etc/mnttab.") 
    ]
    boolean NoMnttabEntry = false;

    [Description("If set to true: don't allow allow setuid execution."
		 "If set to false (default): allow setuid execution.") 
    ]
    boolean NoSuid = false;

    [Description("If set to true: the filesystem is mounted over an existing "
		 "mounted filesystem.\n"
		 "If set to false (default): the filesystem is not mounted "
		 "over an existing mounted filesystem.") 
    ]
    boolean Overlay = false;

};

//======================================================================
// Title: Solaris_NFS
// Version: 1.0
// Date: 5/16/00
// Description: Solaris_NFS is inherited from CIM_NFS
//=======================================================================

    [Provider("com.sun.wbem.solarisprovider.fsmgr.fstype.Solaris_NFS"),
     Description ("The options used to mount a Solaris NFS file system.") 
    ]
class Solaris_NFS : CIM_NFS
{
    [Description("If set to true: the filesystem is mounted 'globally' on all "
		 "nodes of a cluster."
		 "If set to false (default): the filesystem is not mounted on "
		 "all nodes of a cluster."
		 "Ignored for non-clustered systems.") 
    ]
    boolean Global = false;

    [Description("If set to true: use BSD style group id semantics."
		 "If set to false (default): use System V style group "
		 "id semantics.") 
    ]
    boolean GrpId = false;

    [Description("If set to true: the mount entry is not added to /etc/mnttab."
		 "  If set to false (default): the mount is recorded in "
		 "/etc/mnttab.") 
    ]
    boolean NoMnttabEntry = false;

    [Description("If set to true: don't allow allow setuid execution."
		 "If set to false (default): allow setuid execution.") 
    ]
    boolean NoSuid = false;

    [Description("If set to true: use POSIX.1 semantics for filesystem."
		 "If set to false (default): do not use POSIX.1 semantics.") 
    ]
    boolean Posix = false;

    [Description("A string specifying the transport protocol used for the "
		 "NFS mount. It is the value of the network_id field from "
		 "/etc/netconfig.") 
    ]
    string Proto; 

    [Description("If set to true: use the public file handle."
		 "If set to false (default): do not use the public file"
 		 " handle.") 
    ]
    boolean Public = false;

    [Description("If set to true: enable quota checking."
		 "If set to false (default): disable quota checking.") 
    ]
    boolean Quota = false;

    [Description("If set to true: remount a read-only file system with "
		 "read-write options.\n"
		 "If set to false (default): the filsystem is mounted with "
		 "the specified mount options.") 
    ]
    boolean Remount = false;

    [Description("A string describing the security mode for NFS transactions. "
		 "Available modes is listed in /etc/nfssec.conf.") 
    ]
    string SecurityMode;

    [Description ("Version number of NFS protocol to use."),
     Values {"2", "3", "highest"} 
    ]
    string Version = "highest";

    [Description("If set to true: the filesystem is mounted over an existing "
		"mounted filesystem.  "
		"If set to false (default): the filesystem is not mounted over "
		"an existing mounted filesystem.") 
    ]
    boolean Overlay = false;

    [Description("Indicates the total amount of used space on the "
		"File System in bytes. Note that this is not the "
		"FileSystemSize minus AvailableSpace due to the space "
		"reserved only for superuser."),
     Units("Bytes") 
    ]
    uint64 UsedSpace;


    // Methods
    [Description("Method to obtain the list of network IDs from"
		 "the /etc/netconfig file.") 
    ]
    sint32 getNetCfgList([OUT]string ids[]);

    [Description("Method to obtain the list of nfs security modes from "
		 "the /etc/nfssec.conf file.") 
    ]
    sint32 getNfsSecList([OUT]string secmodes[]);

    [Description("Method to obtain the the default nfs security mode from "
		 "the /etc/nfssec.conf file.") 
    ]
    sint32 getDefaultNfsSecMode([OUT]string secmode);

};

//======================================================================
// Title: Solaris_NFSExport
// Version: 1.0
// Date: 5/16/00
// Description: Solaris_NFSExport is inherited from CIM_Export
//=======================================================================

[Association,
Provider("com.sun.wbem.solarisprovider.fsmgr.share.Solaris_NFSExport"), 
Description ("Solaris_NFSExport inherited from CIM_Export") ] 
class Solaris_NFSExport : CIM_Export
{
	// Properties
	[Description (
		"If set to true: the filesystem is shared at boot.\n"
		"If set to false (default): the resource is not shared at "
		"boot.") ]
	boolean ShareAtBootEntry = false;

	[Description ("Share description.") ]
	string Description;

	[Description ("Share options.") ]
	string ShareOptions;

	[Description (
		"If set to true: give maximum access to NFS v2 clients.\n"
		"If set to false (default): give minimum access to NFS v2 "
		"clients.") ]
	boolean AclOk = false;

	[Description (
		"The effective UID of unknown users. The default value is "
		"UID_NOBODY (60001).") ]
	sint32 AnonUid;

	[Description (
		"Index file to use when accessing a Web-NFS directory.") ]
	string IndexFile;

	[Description (
		"If set to true: prevents clients from mounting "
		"subdirectories of the exported directory.\n"
		"If set to false (default): allows clients to mount "
		"subdirectories.") ]
	boolean NoSub = false;

	[Description (
		"If set to true: don't allow allow setuid execution.\n"
		"If set to false (default): allow setuid execution.") ]
	boolean NoSuid = false;

	[Description (
		"If set to true: use exported directory as the location of "
		"the public file handle for Web-NFS.\n"
		"If set to false (default): exported directory is not the "
		"location of the public file handle.") ]
	boolean Public = false;

	[Description (
		"If set to true: grant read-only access to all clients.\n"
		"If set to false (default):do not grant read-only access "
		"to all clients.") ]
	boolean ReadOnly = false;
		
	[Description ("Array of clients granted read-only access.") ]
	string ROAccessList[];

	[Description (
		"Array of hosts from which root users can gain "
		"root access.") ]
	string RootAccessList[];

	[Description (
		"If set to true (default): grant read-write access to all "
		"clients.\n"
		"If set to false: do not grant read-write access to all clients.") ]
	boolean ReadWrite = true;

	[Description ("Array of clients granted read-write access.") ]
	string RWAccessList[];

	[Description (
		"Array of security modes to be used to NFS transactions. "
		"Available modes is listed in /etc/nfssec.conf.") ]
	string SecurityModes[];

	[Description (
		"Maximum lifetime of a request allowed by the NFS server "
		"(in seconds) when using Diffie-Hellman or Kerberos security.\n"
		"Default value is 30000 seconds (8.3 hours).") ]
	uint32 Window = 30000;

    [Description("Method to delete a dfstab entry.")]
    sint32 deleteDfstabEntry([IN]string pathName);

};


//======================================================================
// Title: Solaris_Directory
// Version: 1.0
// Date: 5/16/00
// Description: Solaris_Directory is inherited from CIM_Directory
//=======================================================================
    [Provider("com.sun.wbem.solarisprovider.fsmgr.fstype.Solaris_Directory"),
     Description("A Solaris directory") ] 
class Solaris_Directory : CIM_Directory
{

    [Description("Method to check if a file exists and if it is a directory.")]
    sint32 getFile([IN]string fileName, [OUT]string remoteFileParent,
		   [OUT]string remoteFileName, [OUT]boolean isDirectory);

    [Description ("Method to obtain the contents of a directory.") ]
    sint32 getDirectoryList([IN]string directoryName, 
			    [OUT]string remoteFileParent[], 
			    [OUT]string remoteFileName[], 
			    [OUT]boolean isDirectory[]);

    [Description ("Method to create a directory.")]
    sint32 makeDirectory([IN]string directoryName, 
			 [OUT]string remoteFileParent,
			 [OUT]string remoteFileName, 
			 [OUT]boolean isDirectory);

    [Description ("Method to obtain a directories filesystem type.")]
    sint32 getFilesystemType([IN]string directoryName, 
			     [OUT]string filesystemType);

};


//=============================================================================
// Title: Solaris_Mount
// Version: 1.0
// Date: 5/15/00
// Description: Solaris_Mount is inherited from CIM_Mount
//=============================================================================
[Association,
Abstract,
Description (
	"An association between a directory that can be attached (or mounted "
	"in Solaris parlance) and the attached/mounted filesystem.") ]
class Solaris_Mount : CIM_Mount
{ 
	[Override ("Antecedent"),
	Description (
		"This is a directory on the disk-based media that is mounted. "
		"It is also referred to as the resource to mount.") ]
	Solaris_Directory REF Antecedent;

	[Description (
		"If set to true: the filesystem is mounted at boot.\n"
		"If set to false (default): the resource is not mounted at "
		"boot.") ]
	boolean MountAtBootEntry;

	[Description ("File system type.") ]
	string FsType;

	[Description ("A string of mount options.") ]
	string MountOptions;

	// Methods
	[Description ("Method to obtain list of shared file systems.") ]
	sint32 showExports([IN]string host, [OUT]string shares[]);

	[Description ("Method to delete an entry in the vfstab file.") ]
	sint32 deleteVfstabEntry([IN]string resource, [IN]string mountPoint);
};

//=============================================================================
// Title: Solaris_NFSMount
// Version: 1.0
// Date: 5/15/00
// Description: Solaris_NFSMount is inherited from Solaris_Mount
//=============================================================================

[Association,
Provider("com.sun.wbem.solarisprovider.fsmgr.mount.Solaris_NFSMount"),
Description (
	"An association between a remote directory that can be mounted "
	"and the NFS mounted file system.") ]
class Solaris_NFSMount : Solaris_Mount
{
	[Override ("Dependent"),
	 Description ("The file system mounted via NFS. "
		"It is also referred to as the mount point.") ]
	Solaris_NFS REF Dependent;

	[Description (
		"Array of replicated resources to be used for failover. Each "
		"resource must be of the form host:/pathname, NFS URL or a "
		"list of hosts, if the exported directory name is the same.") ]
	string ReplicatedResources[];

};

//=============================================================================
// Title: Solaris_UFSMount
// Version: 1.0
// Date: 5/15/00
// Description: Solaris_UFSMount is inherited from Solaris_Mount
//=============================================================================

[Association,
Provider("com.sun.wbem.solarisprovider.fsmgr.mount.Solaris_UFSMount"),
Description (
	"An association between a disk filesystem and the local "
	"UFS mounted file system.") ]
class Solaris_UFSMount : Solaris_Mount
{
	[Override ("Dependent"),
	Description (
		"The mounted file system is UFS. "
		"This is also referred to as the mount point.") ]
	Solaris_UFS REF Dependent;

	[Description ("Raw device to fsck.") ]
	string FsckDevice;

	[Description ("Should the file system be checked at boot?") ]
	string FsckPass;

};


//=============================================================================
// Title: Solaris_HSFSMount
// Version: 1.0
// Date: 5/15/00
// Description: Solaris_HSFSMount is inherited from Solaris_Mount
//=============================================================================

[Association,
Provider("com.sun.wbem.solarisprovider.fsmgr.mount.Solaris_HSFSMount"),
Description (
	"An association between a CD-ROM filesystem and the local "
	"HSFS mounted file system.") ]
class Solaris_HSFSMount : Solaris_Mount
{
	[Override ("Dependent"),
	Description (
		"The mounted file system is HSFS. "
		"This is also referred to as the mount point.") ]
	Solaris_HSFS REF Dependent;
};



    [Abstract,
     Description("A job which has been scheduled for future execution"
                 "on a computer system.")
    ]
class Solaris_ScheduledJob:CIM_Job
{
    [Override("Owner"), 
     read, 
     key,
     Description ("The user on whose behalf the job was submitted."
                      "The job will be run under the identity of the owner"), 
     MaxLen(64)
    ]
    string Owner;

    [read, 
     key,
     Description("Identifies the scheduling application to which this"
                 "job belongs"),
     MaxLen (256) 
    ]
    string OwningJobSchedulerName;

    [read, 
     key,
     Description("Identifies the type of the job to a particular"
                 "scheduler.  Required if the scheduling application"
                 "handles multiple types of job, such as cron"),
     MaxLen (256) 
    ]
    string JobType;

    [Override("Name"), 
     read, 
     key, 
     Description("A descriptive name for the scheduled job"
                 "If no name exists, one will be generated"
                 "which is unique for a given owner."),
     MaxLen (256) 
    ]
    string Name;

};

    [Provider ("com.sun.wbem.solarisprovider.scheduledjob.Solaris_ScheduledJob_Cron"),
     Description("A job which has been scheduled for periodic execution"
                 "by the cron daemon")
    ]
class Solaris_ScheduledJob_Cron : Solaris_ScheduledJob
{

    [read, 
     write,
     Description("Indicates the command line to execute"
                 "for this job."),
     MaxLen (1024)
    ]
    string Command;

    [read, 
     write, 
     Description("An array of integers indicating the hours of the day"
                 "when the job is to be executed"),
     MinValue (0), 
     MaxValue(23)
    ]
    uint16 Hours[];

    [read, 
     write, 
     Description("An array of integers indicating the minutes of the"
                 "day when the job is to be executed"),
     MinValue (0), 
     MaxValue(59)
    ]
    uint16 Minutes[];

    [read, 
     write, 
     Description("An array of integers indicating the days of the"
                 "week when the job is to be executed. The week"
                 "starts with Sunday, which is represented by 0."),
     MinValue (0), 
     MaxValue(6)
    ]
    uint16 DaysOfTheWeek[];

    [read, 
     write, 
     Description("An array of integers indicating the days of the"
                 "month when the job is to be executed."),
     MinValue (1), 
     MaxValue(31)
    ]
    uint16 DaysOfTheMonth[];

    [read, 
     write, 
     Description("An array of integers indicating the months in which"
                 "the job is to be executed."),
     MinValue (1), 
     MaxValue(12)
    ]
    uint16 Months[];

};

    [Abstract,
     Description("Configuration information for the cron daemon")
    ]
class Solaris_JobScheduler : CIM_JobDestination
{
    [read, 
     Description("Identifies the types of jobs this job scheduler"
                 "can process"),
     MaxLen (256) 
    ]
    string JobTypes[];

};


    [Provider ("com.sun.wbem.solarisprovider.scheduledjob.Solaris_JobScheduler_Cron"),
     Description("The cron scheduler executes regularly scheduled,"
                 "periodic commands")
    ]
class Solaris_JobScheduler_Cron : Solaris_JobScheduler
{

    [read, 
     write, 
     Description("A boolean value which indicates whether cron is"
                 "keeping a log of all actions taken")
    ]
    boolean LoggingOn;

    [read, 
     write, 
     Description("A string which indicates the value the PATH"
                 "variable will be set to when non-root user"
                 "jobs are executed"),
     MaxLen (1024) 
    ]
    string UserPath;

    [read, 
     write, 
     Description("A string which indicates the value the PATH"
                 "variable will be set to when root user"
                 "jobs are executed"),
     MaxLen (1024) 
    ]
    string RootPath;

    [Description("Determines the scheduled job authorization level for"
	         "an authenticated user")
    ]
    sint32 getScheduledJobsAuthorization() ;
 
};


    [Association,
     Provider ("com.sun.wbem.solarisprovider.scheduledjob.Solaris_OwningJobScheduler"),
     Description ("Association which indicates which job scheduler owns"
                  "a scheduled job")
    ]
class Solaris_OwningJobScheduler : CIM_JobDestinationJobs
{
    [Override ("Antecedent"), 
     Description ("The job scheduler which owns the scheduled job"), 
     Min(1), Max(1)
    ]
    Solaris_JobScheduler REF Antecedent;

    [Override ("Dependent"), 
     Description ("The scheduled job"), 
     Weak
    ]
    Solaris_ScheduledJob REF Dependent;
};


    [Association,
     Provider ("com.sun.wbem.solarisprovider.scheduledjob.Solaris_HostedJobScheduler"),
    Description("An association between a JobScheduler and a System on "
                "which it resides. The cardinality of this association is "
                "1-to-many.  A System may host many JobSchedulers. Job"
                "Schedulers are weak with respect to their hosting System. "
                "Heuristic: A JobScheduler is hosted on the System where the "
                "LogicalDevices, SoftwareFeatures or Services that implement/"
                "provide the JobScheduler are located.")
    ]
class Solaris_HostedJobScheduler : CIM_HostedJobDestination
{
    [Override ("Dependent"), 
     Description ("The job scheduler"), 
     Weak
    ]
    Solaris_JobScheduler REF Dependent;
};

    [Association,
     Provider ("com.sun.wbem.solarisprovider.assoc.Solaris_SystemDevice"),
     Description ("An association between a LogicalDevice and a System ")
    ]
class Solaris_SystemDevice : CIM_SystemDevice
{
};



// ===================================================================
// Title:       Solaris System CPU utilization Statistical Information
// Version:     1.0
// Date:        2/25/2000
// Description: Solaris_CpuUtilization Class definition
// ===================================================================
[Provider("com.sun.wbem.solarisprovider.perfmon.Solaris_CpuUtilizationInformation"), Description (
"A Solaris system's per CPU utilization information."
 " user_time + system_time + idle_time = 100% of the elaspsed time."
 " idle_time includes all wait time."
 " Idle time is broken down further in the per-processor wait times subclass."
 " See X/Open UMA (Universal measurement arch) standard document for more information, the"  
 " above definitions were taken from the X/Open UMA document.") ]
 
class Solaris_CpuUtilizationInformation : CIM_DeviceStatisticalInformation
{

 //Data collection is via the kstat api 

 // The data exported by the kstat api is very unstable.
 // The names, types and meanings of the data can change between OS 
 // releases or even patch releases because there is no formal commitment 
 // level to either the kstat namespace or the individual kstats within that space.
 // So we cannot guarantee the stability of the content of the providers` properties.


  // Properties
 // This class is a subset cpu_sysinfo structure which is contained in cpu_stat structure. 
 // cpu_stat is contained in /usr/include/sys/sysinfo.h.
 
 // NOTE:  These are cumulative statistical data since last reboot or last dynamic reconfiguration operation.
 
[ read, Description (
          " This identifies the cumulative cpu ticks spent in user state since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'user' "
	  " from the command line.") ]
 uint32 UserTime;
 
 [ read, Description (
          " This identifies the cumulative cpu ticks spent in system state since last reboot"
	  " or last dynamic reconfiguration operation."
          " It is equivalent to running kstat -p -m cpu_stat -s 'kernel' "
          " from the command line.") ] 
 uint32 SystemTime;
 
 [ read, Description (
          " This identifies the cumulative cpu ticks spent in wait state since last reboot"
	  " or last dynamic reconfiguration operation."
          " It is equivalent to running kstat -p -m cpu_stat -s 'wait' "
          " from the command line.") ] 
 uint32 WaitTime;
 
 [ read, Description (
          " This identifies the cumulative cpu ticks spent in idle state since last reboot"
	  " or last dynamic reconfiguration operation."
          " It is equivalent to running kstat -p -m cpu_stat -s 'idle' "
          " from the command line.") ] 
 uint32 IdleTime;
 
};




// =================================================================== 
// Title:       Solaris per CPU vitual memory Statistical Information 
// Version:     1.0    
// Date:        7/10/2000
// Description: Solaris_CpuVminfo Class definition 
// =================================================================== 
[Provider("com.sun.wbem.solarisprovider.perfmon.Solaris_CpuVminfo"), Description ( 
"A Solaris system's per CPU virtual memory statistical information.") ]
  
class Solaris_CpuVminfo : CIM_DeviceStatisticalInformation
{



 // Data collection is via the kstat api 

 // The data exported by the kstat api is very unstable.
 // The names, types and meanings of the data can change between OS 
 // releases or even patch releases because there is no formal commitment 
 // level to either the kstat namespace or the individual kstats within that space.
 // So we cannot guarantee the stability of the content of the providers` properties.

 
 // properties
 // This class is a subset cpu_stat structure. 
 // cpu_stat is contained in /usr/include/sys/sysinfo.h for more information.

 // NOTE: These are cumulative statistical information since last reboot or last dynamic reconfiguration.
 
[ read, Description ( 
          "This identifies the page reclaims (includes pageout)since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgrec' "
          " from the command line.") ] 
 uint32 PageReclaims; 
  
[ read, Description ( 
          "This identifies the page reclaims from free list since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgfrec' "
          " from the command line.") ]
 uint32 PgReclaimsFlst; 
 
[ read, Description (
          "This identifies the number of pageins since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgin' "
          " from the command line.") ]
 uint32 PageIns;
 
[ read, Description (
          "This identifies pages paged in since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgpgin' "
          " from the command line.") ]
 uint32 PagesPagedIn;

[ read, Description (  
          "This identifies the number of page outs since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgout' "
          " from the command line.") ]
 uint32 PageOuts;

[ read, Description (  
          "This identifies the pages paged out since last reboot"
 	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgpgout' "
          " from the command line.") ]
 uint32 PagesPagedOut;

[ read, Description (  
          "This identifies the number of swap ins since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'swapin' "
          " from the command line.") ]
 uint32 SwapIns;

[ read, Description (  
          "This identifies the pages swapped in since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgswapin' "
          " from the command line.") ]
 uint32 PagesSwappedIn;

[ read, Description (  
          "This identifies the number of swap outs since last reboot"
	  " or last dynamic reconfiguration operation."  
	  " It is equivalent to running kstat -p -m cpu_stat -s 'swapout' "
          " from the command line.") ]
 uint32 SwapOuts;

[ read, Description (  
          "This identifies the pages swapped out since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgswapout' "
          " from the command line.") ]
 uint32 PagesSwappedOut;

[ read, Description (  
          "This identifies the pages zero filled on demand since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'zfod' "
          " from the command line.") ]
 uint32 PagesZfilledOd;

[ read, Description (  
          "This identifies the pages freed by daemon or auto since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'dfree' "
          " from the command line.") ]
 uint32 PagesDfreed;

[ read, Description (  
          "This identifies the pages examined by pageout daemon since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'scan' "
          " from the command line.") ]
 uint32 PageoutDscan;

[ read, Description (  
          "This identifies the revolutions of the page daemon hand since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'rev' "
          " from the command line.") ]
 uint32 PageDaemonRevs;

[ read, Description (  
          "This identifies the minor page faults via hat_fault() since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'hat_fault' "
          " from the command line.") ]
 uint32 HatPageFaults;

[ read, Description (  
          "This identifies the minor page faults via as_fault() since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'as_fault' "
          " from the command line.") ]
 uint32 AsPageFaults;

[ read, Description (  
          "This identifies the major page faults since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'maj_fault' "
          " from the command line.") ]
 uint32 MajPageFaults;

[ read, Description (  
          "This identifies the copy-on-write faults since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'cow_fault' "
          " from the command line.") ]
 uint32 CowFaults;

[ read, Description (  
          "This identifies the protection faults since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'prot_fault' "
          " from the command line.") ]
 uint32 ProtFaults;

[ read, Description (  
          "This identifies the faults due to software locking requests since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'softlock' "
          " from the command line.") ]
 uint32 SoftLockFaults;

[ read, Description (
          "This identifies minor page faults (as_fault()s) in kernel addr space since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'kernel_asflt' "
          " from the command line.") ]
 uint32 KernelAsFaults;

[ read, Description (
          "This identifies the times pager scheduled since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pgrrun' "
          " from the command line.") ]
 uint32 PagerRun;

[ read, Description (
          "This identifies the executable pages paged in since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'execpgin' "
          " from the command line.") ]
 uint32 ExecPagein;

[ read, Description (
          "This identifies the executable pages paged out since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'execpgout' "
          " from the command line.") ]
 uint32 ExecPageout;

[ read, Description (
          "This identifies the executable pages freed since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'execfree' "
          " from the command line.") ]
 uint32 ExecFreePages;

[ read, Description (
          "This identifies the anon pages paged in since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'anonpgin' "
          " from the command line.") ]
 uint32 AnonPagein;

[ read, Description (
          "This identifies the anon pages paged out since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'anonpgout' "
          " from the command line.") ]
 uint32 AnonPageout;

[ read, Description (
          "This identifies the anon pages freed since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'anonfree' "
          " from the command line.") ] 
 uint32 AnonPagesFreed;

[ read, Description (
          "This identifies the filesystem pages paged in since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'fspgin' "
          " from the command line.") ]
 uint32 FsPagein;

[ read, Description (
          "This identifies the pages paged out since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'fspgout' "
          " from the command line.") ]
 uint32 FsPageout;

[ read, Description ( 
          "This identifies the pages free since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'fsfree' "
          " from the command line.") ]
 uint32 FsPagesFree;


// methods
 
// The only reason we have this method is for speed -- it is a lot faster 
// than enumeration. 
[Description("Get all the per cpu vminfo statistics as one long string"
	     "excluding inherited properties."	
             "The properties appear in the sting in the same order as they"
             " appear in the mof file tab separated, the cpi id# comes first.")]
sint32 getBulkData([OUT] string data);
 
};



// ===================================================================
// Title:       Solaris per CPU system Statistical Information
// Version:     1.0
// Date:        7/10/2000
// Description: Solaris_CpuSysinfo Class definition
// ===================================================================
[Provider("com.sun.wbem.solarisprovider.perfmon.Solaris_CpuSysinfo"), Description (
"A Solaris system's per CPU system statistical information.") ]
 
class Solaris_CpuSysinfo : CIM_DeviceStatisticalInformation
{

 // Data cvollection is via the kstat api 

 // The data exported by the kstat api is very unstable.
 // The names, types and meanings of the data can change between OS 
 // releases or even patch releases because there is no formal commitment 
 // level to either the kstat namespace or the individual kstats within that space.
 // So we cannot guarantee the stability of the content of the providers` properties.



 // properties

 // This class is a subset cpu_stat structure.
 // cpu_stat is contained in /usr/include/sys/sysinfo.h.


 // NOTE: These are cumulative data since last reboot   
 // or last dynamic reconfiguration operation.
 
[ read, Description (
          "This identifies the physical block reads since last reboot"
	  " or last dynamic reconfiguration operation." 
	  " It is equivalent to running kstat -p -m cpu_stat -s 'bread' "
          " from the command line.") ]
 uint32 PhysicalBlockReads;
 
 [ read, Description (
          "This identifies the physical block writes (sync+async) since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'bwrite' "
          " from the command line.") ]
 uint32 PhysicalBlockWrites;
 
 [ read, Description (
          "This identifies the logical block reads since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'lread' "
          " from the command line.") ]
 uint32 LogicalBlockReads;
 
 [ read, Description (
          "This identifies the logical block writes since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'lwrite' "
          " from the command line.") ]
 uint32 LogicalBlockWrites;

[ read, Description (
          "This identifies the raw I/O reads since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'phread' "
          " from the command line.") ]
 uint32 RawIOReads;

[ read, Description (
          "This identifies the raw I/O writes since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'phwrite' "
          " from the command line.") ]
 uint32 RawIOWrites;

[ read, Description (
          "This identifies the context switches since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'pswitch' "
          " from the command line.") ]
 uint32 ContextSwitches;

[ read, Description (
          "This identifies the traps count since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'trap' "
          " from the command line.") ]
 uint32 Traps;

[ read, Description (
          "This identifies the device interrupts count since last reboot"
	  " or last dynamic reconfiguration operation."
	  " It is equivalent to running kstat -p -m cpu_stat -s 'intr' "
          " from the command line.") ]
 uint32 DeviceInterrupts;

[ read, Description (
          "This identifies the system calls count since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'syscall' "
          "from the command line.") ]
 uint32 SysCalls;

[ read, Description (
          "This identifies the  read() + readv() system calls count since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'sysread' "
          "from the command line.") ]
 uint32 SysReads;

[ read, Description (
          "This identifies the write() + writev() system calls since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'syswrite' "
          "from the command line.") ]
 uint32 SysWrites;

[ read, Description (
          "This identifies the forks count since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'sysfork' "
          "from the command line.") ]
 uint32 SysForks;

[ read, Description (
          "This identifies the vforks count since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'sysvfork' "
          "from the command line.") ]
 uint32 SysVforks;

[ read, Description (
          "This identifies the execs count since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'sysexec' "
          "from the command line.") ]
 uint32 SysExec;

[ read, Description (
          "This identifies the bytes read by rdwr() since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'readch' "
          "from the command line.") ]
 uint32 ReadChar;

[ read, Description (
          "This identifies the bytes written by rdwr() since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'writech' "
          "from the command line.") ]
 uint32 WriteChar;

[ read, Description (
          "This identifies the terminal input characters count since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'rawch' "
          "from the command line.") ]
 uint32 RawChar;

[ read, Description (
          "This identifies the chars handled in canonical mode since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'canch' "
          "from the command line.") ]
 uint32 CanonicalChar;

[ read, Description (
          "This identifies the terminal output characters since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'outch' "
          "from the command line.") ]
 uint32 OutputChar;

[ read, Description ( 
          "This identifies the message count (msgrcv()+msgsnd() calls) since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'msg' "
          "from the command line.") ] 
 uint32 MsgCount;

[ read, Description ( 
          "This identifies the semaphore operations count (semop() calls) since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'sema' "
          "from the command line.") ] 
 uint32 SemaOpsCount;

[ read, Description ( 
          "This identifies the pathname lookups since last reboot since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'namei' "
          "from the command line.") ]
 uint32 PnameLookups;

[ read, Description ( 
          "This identifies the ufs_iget() calls since last reboot since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'ufsiget' "
          "from the command line.") ]
 uint32 UfsInodeGets;

[ read, Description ( 
          "This identifies the directory blocks read since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'ufsdirblk' "
          "from the command line.") ]
 uint32 UfsDirBlksRead;

[ read, Description ( 
          "This identifies the inodes taken with attached pages since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'ufsipage' "
          "from the command line.") ]
 uint32 UfsInodePages;

[ read, Description ( 
          "This identifies the inodes taken with no attached pages since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'ufsinopage' "
          "from the command line.") ]
 uint32 UfsInodeNopages;

[ read, Description ( 
          "This identifies the inode table overflows since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'inodeovf' "
          "from the command line.") ]
 uint32 InodeTableOvfs;

[ read, Description ( 
          "This identifies the file table overflows since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'fileovf' "
          "from the command line.") ]
 uint32 FileTableOvfs;

[ read, Description ( 
          "This identifies the proc table overflows since last reboot"
	  "or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'procovf' "
          "from the command line.") ]
 uint32 ProcTableOvfs;

[ read, Description ( 
          "This identifies the count of interrupts as threads (not count clock interrupts) since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'intrthread' "
          "from the command line.") ]
 uint32 IntrThreads;

[ read, Description ( 
          "This identifies the count interrupts blocked/prempted/released (swtch) since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'intrblk' "
          "from the command line.") ]
 uint32 IntrBlkd;

[ read, Description (  
          "This identifies the number of times idle thread scheduled since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'idlethread' "
          "from the command line.") ]  
 uint32 IdleThread;

[ read, Description (  
          "This identifies the involuntary context switches since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'inv_swtch' "
          "from the command line.") ]
 uint32 InvolSwtch;

[ read, Description (  
          "This identifies the count of thread_create() calls since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'nthreads' "
          "from the command line.") ]
 uint32 ThreadCreates;

[ read, Description (  
          "This identifies the count of cpu migrations by threads since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'cpumigrate' "
          "from the command line.") ]  
 uint32 CpuMigrate;

[ read, Description (  
          "This identifies the count of inter-processor cross-calls since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'xcalls' "
          "from the command line.") ]
 uint32 XCalls;

[ read, Description (  
          "This identifies the count of the failed mutex enters (adaptive) since last reboot"
	  " or last dynamic reconfiguration operation."
	  "These are locks not aquired on first try."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'mutex_adenters' "
          "from the command line.") ]
 uint32 MutexAdEnters;

[ read, Description (  
          "This identifies the count of readers/writer reader failures since last reboot"
	  "or last dynamic reconfiguration operation."
	  "These are locks not aquired on first try."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'rw_rdfails' "
          "from the command line.") ]
 uint32 ReaderFailures;

[ read, Description (  
          "This identifies count of readers/writer writer failures count since last reboot"
	  "or last dynamic reconfiguration operation."
	  "These are locks not aquired on first try."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'rw_wrfails' "
          "from the command line.") ]
 uint32 Writerfailures;

[ read, Description (  
          "This identifies the count of the times loadable module loaded since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'modload' "
          "from the command line.") ]  
 uint32 ModLoad;

[ read, Description (  
          "This identifies the count of the  times loadable module unloaded since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'modunload' "
          "from the command line.") ] 
 uint32 ModUnload;

[ read, Description (  
          "This identifies the count of physical block writes (async) since last reboot"
	  " or last dynamic reconfiguration operation."
	  "It is equivalent to running kstat -p -m cpu_stat -s 'bawrite' "
          "from the command line.") ]  
 uint32 AsyncBlkWrites;


// methods

// The only reason we have this method is for speed -- it is a lot faster
// than enumeration.
[Description("Get all the per cpu sysinfo statistics as one long string"
	     "excluding inherited properties."
	     "The properties appear in the sting in the same order as they"
	     " appear in the mof file tab separated, the cpu id# comes first.")]
sint32 getBulkData([OUT] string data);

};




// ===================================================================
// Title:       Solaris System disk IO Statistical Information
// Version:     1.0
// Date:        2/25/2000
// Description: Solaris_DiskIOInformation Class definition
// ===================================================================
[Provider("com.sun.wbem.solarisprovider.perfmon.Solaris_DiskIOInformation"), Description (
"A Solaris system's disk IO statistical information."
"The physical I/O counters are the counts of raw device accesses rather than"
"block device (filesystem) accesses."
" Per Disk Device Data ClassA disk device requires two queues to be"
" instrumented. The wait queue consists of commands that have not yet been"
" issued to the disk. The active queue consists of commands that have been"
" issued to the disk but have not yet completed. Modern SCSI disks can accept"
" a large active queue."
" Definitions : "
" wait_time is a running sum of the time that the queue is non-empty."
" wait_length_time is a running sum of the product of queue length and"
" elapsed time at that length. The active queue is instrumented the same way."
" At each entry or exit from the queue the elapsed time since the previous"
" state change is added to the wait_time if the queue length is non-zero, and"
" the product of the time and the queue length is added to wait_length_time."
" In the following assume that two measurements (new and old) were separated"
" by some elapsed_time. The higher level disk statistics are obtained by the"
" following calculations."
" where read_bytes = Nread, writes = Nwritten"
" wait_length_time = Wlentime, wait_queue_length = Wtime, active_time = Rlentime"
" active_queue_length = Rtime, elapsed_time = new Wlastupdate - old Wlastupdate : "
" read_KB_per_sec = (new.read_bytes - old.read_bytes) / (1024 * elapsed_time)"
" writes_per_sec = (new.writes - old.writes) / elapsed_time"
" utilisation = busy_percent = 100 * (new.active_time - old.active_time) / elapsed_time"
" wait_queue_length = (new.wait_length_time - old.wait_length_time) / elapsed_time"
" wait_time_milliseconds = 1000 * wait_queue_length / (reads_per_sec + writes_per_sec)"
" service_time_milliseconds = 1000 * active_queue_length / (reads_per_sec + writes_per_sec)"
" response_time_milliseconds = wait_time_milliseconds + service_time_milliseconds"
" See X/Open UMA (Universal measurement arch) standard document for more information, the"
" above definitions were taken from the X/Open UMA document."
) ]
 
class Solaris_DiskIOInformation : CIM_DeviceStatisticalInformation
{


 // Data collection is via the kstat api. 

 // The data exported by the kstat api is very unstable.
 // The names, types and meanings of the data can change between OS 
 // releases or even patch releases because there is no formal commitment 
 // level to either the kstat namespace or the individual kstats within that space.
 // So we cannot guarantee the stability of the content of the providers` properties.


 
// properties

// these are a subset of  
// kstat_io_t structure which is contained in /usr/include/sys/kstat.h

// NOTE: these are raw cumulative data. A client would use them to compute the disk
// throughput information. the sampling interval would be the time between calls. 
 
[ read, Description (
          "Identifies the last time wait queue changed."
	  " This is equivalent to running kstat -p -c disk -s wlastupdate"
	  " from the command line.") ]
 real64 Wlastupdate;
 
[ read, Description (
          "Identifies the number of read operations."
	  " This is equivalent to running kstat -p -c disk -s reads"
          " from the command line.") ]
 real64 Reads;
 
[ read, Description (
          "Identifies the number of write operations."
	  " This is equivalent to running kstat -p -c disk -s writes"
          " from the command line.") ]
 real64 Writes;
 
[ read, Description (
          "Identifies the number of bytes read."
	  " This is equivalent to running kstat -p -c disk -s nread"
          " from the command line.") ]
 real64 Nread;
 
[ read, Description (
          "Identifies the number of bytes written."
	  " This is equivalent to running kstat -p -c disk -s nwritten"
          " from the command line.") ]
 real64 Nwritten;

[ read, Description (
          "Identifies the cumulative run time (length*time product)."
	  " This is equivalent to running kstat -p -c disk -s rlentime"
          " from the command line.") ]
 real64 Rlentime;
 
[ read, Description (
          "Identifies the cumulative wait time."
	  " This is equivalent to running kstat -p -c disk -s wlentime"
          " from the command line.") ]
 real64 Wlentime;

[ read, Description (
          "Identifies the cumulative run (service) time."
	  " This is equivalent to running kstat -p -c disk -s rtime"
          " from the command line.") ]
 real64 Rtime;
 
[ read, Description (
          "Identifies the cumulative wait (pre-service) time."
	  " This is equivalent to running kstat -p -c disk -s wtime"
          " from the command line.") ] 
 real64 Wtime;
 
// methods

// The only reason we have this method is for speed -- it is a lot faster
// than enumeration.
[Description("Get all the disk IO data as one long string"
	     " excluding inherited properties."
	     "The properties appear in the string in the same order as they"
             " appear in the mof file tab separated, the divice name comes first.")]
sint32 getBulkDiskIOData([OUT] string data);
 
};


// ==================================================================
// Solaris_DisklessClient
// ==================================================================

[Provider ("com.sun.wbem.solarisprovider.osserver.Solaris_DisklessClient"),
 Description (
              "Diskless clients represent systems which boot over the"
              "network and obtain all their disk resources from the"
            "network.")
]
class Solaris_DisklessClient
{

    [propagated("CIM_System.CreationClassName"), 
     key, 
     Description("The scoping domain type from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass, represented "
		 "as the subclass creation class name.")
    ]
    string SystemCreationClassName;

    [propagated("CIM_System.Name"), 
     key, 
     Description("The scoping domain name from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass.")
    ]
    string SystemName;

    [key, 
     Description (
                 "A string which indicates the hostname of "
                 "the diskless client")
    ]
    string HostName;

    [key, 
     Description (
                 "A string which indicates the type of update "
		 "to be performed by the provider"),
     Values {"filesystem", "database", "all"}
    ]
    string TypeOfUpdate;

    [read, write, 
     Description (
                 "A boolean value which indicates whether"
                 "the system should prompt for a root password")
    ]
    boolean Pw;

    [read, write, 
     Description (
                 "A string which indicates the netmask for the"
                 "network on which a diskless client is located")
    ]
    string Netmask;

    [read, write, 
     Description (
                 "A string which indicates the security policy"
                 "for a diskless client")
    ]
    string SecurityPolicy;

    [read, write, 
     Description (
                 "A string which indicates the terminal type"
                 "for a diskless client")
    ]
    string Terminal;

    [read, write, 
     Description (
                 "A string which indicates the system locale"
                 "for a diskless client")
    ]
    string Locale;

    [read, write, 
     Description (
                 "A string which indicates the root password"
                 "for a diskless client")
    ]
    string Password;

    [read, write, 
     Description (
                 "A string which indicates the ip address"
                 "for a diskless client")
    ]
    string IpAddress;

    [read, write, 
     Description (
                 "A string which indicates the ethernet address"
                 "for a diskless client")
    ]
    string EthernetAddress;

    [read, write, 
     Description (
                 "A string which indicates the instruction set, implemementation"
                 "and Solaris version for a diskless client")
    ]
    string Os;

    [read, write, 
     Description (
                 "A string which indicates the hostname of the OS server"
                 "where the fielsystems will reside for a diskless client")
    ]
    string FileServer;

    [read, write, 
     Description (
                 "A string which indicates the directory to create the"
                 "root directory in for a diskless client")
    ]
    string Root;

    [read, write, 
     Description (
                 "A string which indicates the swap area location"
                 "for a diskless client")
    ]
    string Swap;

    [read, write, 
     Description (
                 "A string which indicates the ip address of the name"
                 "server for a diskless client")
    ]
    string NameServerIpAddress;

    [read, write, 
     Description (
                 "A string which indicates the dump area location"
                 "for a diskless client")
    ]
    string Dump;

    [read, write, 
     Description (
                 "A string which indicates the path of a timezone file"
                 "for a diskless client")
    ]
    string TimeZone;

    [read, write, 
     Description (
                 "A string which indicates the name service type"
                 "for a diskless client")
    ]
    string NameService;

    [read, write, 
     Description (
                 "A string which indicates the name server hostname"
                 "for a diskless client")
    ]
    string NameServer;

    [read, write, 
     Description (
                 "A string which indicates the name service domain"
                 "for a diskless client")
    ]
    string Domain;

    [read, write, 
     Description (
                 "A string which indicates the swap area size"
                 "for a diskless client")
    ]
    uint16 SwapSize;

    [read, write, 
     Description (
                 "A string which indicates the dump area size"
                 "for a diskless client")
    ]
    uint16 DumpSize;

    [read, write, 
     Description("An array of strings representing the contents"
                 "of a sysidcfg file")
    ]
    string Sysidcfg[];

    [ Description ( 
              "Get a server interface on the same subnet as"
	      "the diskless clients")]
		sint32 getBestNetIf(
			[IN] string server,
			[IN] string clientIpAddress,
			[IN] string clientName,
			[OUT] string bestNetIf);
};

// ==================================================================
// Solaris_OsService
// ==================================================================

[Provider ("com.sun.wbem.solarisprovider.osserver.Solaris_OsService"),
 Description (
              "An Os Service represents a disk image from which"
            "a diskless client may be booted.")
]
class Solaris_OsService
{

    [propagated("CIM_System.CreationClassName"), 
     key, 
     Description("The scoping domain type from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass, represented "
		 "as the subclass creation class name.")
    ]
    string SystemCreationClassName;

    [propagated("CIM_System.Name"), 
     key, 
     Description("The scoping domain name from the weak association to an "
		 "instance of a Solaris_AdminDomain subclass.")
    ]
    string SystemName;

    [key, 
     Description (
                 "A string which indicates the architecture, platform "
                 "OS and version for the OS service")
    ]
    string Platform;

    [key, 
     Description (
                 "A string which indicates the type of update "
		 "to be performed by the provider"),
     Values {"filesystem", "database"}
    ]
    string TypeOfUpdate;

    [read, write, 
     Description (
                 "A string which indicates the locales installed "
                 "for the specified cluster")
    ]
    string Locale;

    [read, write, 
     Description (
                 "A string which indicates the Solaris cluster")
    ]
    string Cluster;

    [read, write, 
     Description (
                 "A string which indicates the path to the Solaris "
                 "CD image")
    ]
    string MediaPath;

    [ Description ( 
              "Add a patch to the spool area") ]
		sint32 addPatch([IN] string patchPatch) ;

    [ Description ( 
              "Remove a patch from the spool area") ]
		sint32 removePatch([IN] string patchId) ;

    [ Description ( 
              "Sychronize spooled patches") ]
		sint32 synchronizeSpooledPatches() ;

    [ Description ( 
              "Update clients") ]
		sint32 updateClients() ;

    [ Description ( 
              "List spooled patches") ]
		sint32 listSpooledPatches([OUT] string data[]) ;

    [ Description ( 
              "List os services and patches installed") ]
		sint32 listServicesAndPatches([OUT] string data[]) ;

    [ Description ( 
              "List clone areas and patches installed") ]
		sint32 listClonesAndPatches([OUT] string data[]) ;
};
