// ===================================================================
// Title:  System Unix
// $State: Exp $
// $Date: 2004/08/15 05:55:42 $
// $Source: /cvsroot/wbemservices/open/mof/dmtf/2.9/System_Unix.mof,v $
// $Revision: 1.1 $
// ===================================================================
//#pragma inLine ("Includes/copyright.inc")
// Copyright 1998-2004 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.
// DMTF is a not-for-profit association of industry members dedicated
// to promoting enterprise and systems management and interoperability.
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members,
// provided that correct attribution is given.
// As DMTF specifications may be revised from time to time,
// the particular version and release date should always be noted.
// 
// Implementation of certain elements of this standard or proposed
// standard may be subject to third party patent rights, including
// provisional patent rights (herein "patent rights"). DMTF makes
// no representations to users of the standard as to the existence
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or
// claimants, nor for any incomplete or inaccurate identification or
// disclosure of such rights, owners or claimants. DMTF shall have no
// liability to any party, in any manner or circumstance, under any
// legal theory whatsoever, for failure to recognize, disclose, or
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product,
// protocols or testing procedures. DMTF shall have no liability to
// any party implementing such standard, whether such implementation
// is foreseeable or not, nor to any patent owner or claimant, and shall
// have no liability or responsibility for costs or losses incurred if
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the
// standard from any and all claims of infringement by a patent owner
// for such implementations.
// 
// For information about patents held by third-parties which have
// notified the DMTF that, in their opinion, such patent may relate to
// or impact implementations of DMTF standards, visit
// http://www.dmtf.org/about/policies/disclosures.php.
//#pragma inLine
// ===================================================================
// Description: The System Model defines system related management
//              concepts. This file defines the specific subclasses
//              needed to manage Unix Systems.
// 
//              The object classes below are listed in an order that
//              avoids forward references. Required objects, defined
//              by other working groups, are omitted.
// ==================================================================
// Change Log for v2.8 Final
// CR1233 - Sysdev omnibus CR - Minor MOF fixes
// 
// Change Log for v2.7 - None
// ===================================================================

#pragma locale ("en_US")


// ===================================================================
// UnixLocalFileSystem
// ===================================================================
   [Version ( "2.8.0" ), Description (
       "A class derived from LocalFileSystem that represents the Unix "
       "environment view of a file store controlled by a "
       "ComputerSystem through local means (e.g., direct device driver "
       "access). In this case, the file store is managed directly by "
       "the ComputerSystem without the need for another computer to "
       "act as a file server. This definition does not breakdown in "
       "the case of a Clustered File System. In this scenario, the "
       "FileSystem is a LocalFileSystem, weak to the Cluster.")]
class CIM_UnixLocalFileSystem : CIM_LocalFileSystem {

      [Description (
          "The number of free inodes present in the file system. This "
          "value is only valid if TotalSlots is non-zero."), 
       MappingStrings { "MIF.DMTF|Host File System|001.12" }, 
       ModelCorrespondence { "CIM_UnixLocalFileSystem.TotalInodes" }]
   uint64 FreeInodes;

      [Description (
          "The total number of inodes available in the file system. A "
          "value of zero for TotalInodes indicates that this file "
          "system does not have a preset limit."), 
       MappingStrings { "MIF.DMTF|Host File System|001.11" }]
   uint64 TotalInodes;

      [Description (
          "The reserve data capacity of the file system in bytes."), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|Host File System|001.15" }]
   uint64 FSReservedCapacity;
};


// ===================================================================
// UnixProcess
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Each instance of the CIM_UnixProcess class represents a single "
       "instance of a running program. A user of the Operating System "
       "will typically see a Process as an application or task. Within "
       "an OperatingSystem, a Process is defined by a workspace of "
       "memory resources and environmental settings that are allocated "
       "to it. On a multitasking System, this workspace prevents "
       "intrusion of resources by other Processes. Additionally, a "
       "Process can execute as multiple Threads, all which run within "
       "the same workspace.")]
class CIM_UnixProcess : CIM_Process {

      [Required, Description (
          "The parent process ID of this executing process."), 
       MappingStrings { "MIF.DMTF|Process Information|001.2" }]
   string ParentProcessID;

      [Required, Description (
          "The Real User ID of this currently executing process."), 
       MappingStrings { "MIF.DMTF|Process Information|001.4" }]
   uint64 RealUserID;

      [Required, Description (
          "The Group ID of this currently executing process."), 
       MappingStrings { "MIF.DMTF|Process Information|001.2" }]
   uint64 ProcessGroupID;

      [Description (
          "If part of a group of processes are under the control of a "
          "session leader, this property holds the session ID for the "
          "group.")]
   uint64 ProcessSessionID;

      [Description (
          "The TTY currently associated with this process."), 
       MappingStrings { "MIF.DMTF|Process Information|001.5" }]
   string ProcessTTY;

      [Description (
          "The executing process's command path."), 
       MappingStrings { "MIF.DMTF|Process Information|001.7" }]
   string ModulePath;

      [Description (
          "The operating system parameters provided to the executing "
          "process. These are the argv[] values."), 
       MappingStrings { "MIF.DMTF|Process Information|001.8" }]
   string Parameters[];

      [Description (
          "The process's 'nice' value. Used to compute its priority."), 
       MappingStrings { "MIF.DMTF|Process Information|001.11" }]
   uint32 ProcessNiceValue;

      [Description (
          "A description of the event this process is currently "
          "sleeping for. The precise nature of this string is "
          "implementation defined, but is typically the address of a "
          "system data structure that will be modified when the event "
          "occurs. This string only has meaning when the "
          "ExecutionState is \"Blocked\" or \"SuspendedBlocked\"."), 
       ModelCorrespondence { "CIM_Process.ExecutionState" }]
   string ProcessWaitingForEvent;
};


// ===================================================================
// UnixProcessStatisticalInformation
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "The statistics associated with a Unix process.")]
class CIM_UnixProcessStatisticalInformation : CIM_StatisticalInformation {

      [Key, Propagated ( "CIM_Process.CSCreationClassName" ), 
       Description (
          "The scoping Process's ComputerSystem CreationClassName."), 
       MaxLen ( 256 )]
   string CSCreationClassName;

      [Key, Propagated ( "CIM_Process.CSName" ), Description (
          "The scoping Process's ComputerSystem Name."), 
       MaxLen ( 256 )]
   string CSName;

      [Key, Propagated ( "CIM_Process.OSCreationClassName" ), 
       Description (
          "The scoping Process's OperatingSystem CreationClassName."), 
       MaxLen ( 256 )]
   string OSCreationClassName;

      [Key, Propagated ( "CIM_Process.OSName" ), Description (
          "The scoping Process's OperatingSystem Name."), 
       MaxLen ( 256 )]
   string OSName;

      [Key, Propagated ( "CIM_Process.Handle" ), Description (
          "The scoping Process's Handle."), 
       MaxLen ( 256 )]
   string Handle;

      [Key, Propagated ( "CIM_Process.CreationClassName" ), 
       Description (
          "The scoping Process's CreationClassName."), 
       MaxLen ( 256 )]
   string ProcessCreationClassName;

      [Key, Override ( "Name" ), Description (
          "A string used to identify the related statistics of a "
          "Process."), 
       MaxLen ( 256 )]
   string Name;

      [Description (
          "A string used to identify the related statistics of a "
          "Process. This key allows multiple instances of statistics "
          "to correspond to a single process. The multiple instances "
          "could be used in applications such as time-sliced "
          "statistics."), 
       Units ( "Percent" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.12" }]
   uint32 CPUTime;

      [Description (
          "The number of KiloBytes of real text space used by the "
          "process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.15" }]
   uint64 RealText;

      [Description (
          "The number of KiloBytes of real data space used by the "
          "process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.16" }]
   uint64 RealData;

      [Description (
          "The number of KiloBytes of real stack space used by the "
          "process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.17" }]
   uint64 RealStack;

      [Description (
          "The number of KiloBytes of virtual text space used by the "
          "process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.18" }]
   uint64 VirtualText;

      [Description (
          "The number of KiloBytes of virtual data space used by the "
          "process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.19" }]
   uint64 VirtualData;

      [Description (
          "The number of KiloBytes of virtual stack space used by the "
          "process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.20" }]
   uint64 VirtualStack;

      [Description (
          "The number of KiloBytes of virtual space used for memory "
          "mapped files by the process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.22" }]
   uint64 VirtualMemoryMappedFileSize;

      [Description (
          "The number of KiloBytes of shared memory used by the "
          "process."), 
       Units ( "KiloBytes" ), 
       MappingStrings { "MIF.DMTF|Process Information|001.21" }]
   uint64 VirtualSharedMemory;

      [Description (
          "CPU time of terminated child processes in clock ticks."), 
       Units ( "Clock Ticks" ), Counter]
   uint64 CpuTimeDeadChildren;

      [Description (
          "System time of terminated child processes in clock ticks."), 
       Units ( "Clock Ticks" ), Counter]
   uint64 SystemTimeDeadChildren;
};


// ==================================================================
// UnixProcessStatistics
// ==================================================================
   [Association, Version ( "2.6.0" ), Description (
       "CIM_UnixProcessStatistics is an association that relates a "
       "CIM_UnixProcess to its StatisticalInformation.")]
class CIM_UnixProcessStatistics : CIM_Statistics {

      [Override ( "Element" ), Min ( 1 ), Max ( 1 ), Description (
          "The Process for which statistical or metric data is "
          "defined.")]
   CIM_UnixProcess REF Element;

      [Override ( "Stats" ), Weak, Description (
          "The UNIX Process statistical information/object.")]
   CIM_UnixProcessStatisticalInformation REF Stats;
};


// ===================================================================
// UnixThread
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Threads represent the ability to execute units of a Process or "
       "task in parallel. A UnixThread inherits from the superclass, "
       "CIM_Thread, which is weak to the Process. The values used are "
       "defined in sched.h and psched.h.")]
class CIM_UnixThread : CIM_Thread {

      [Description (
          "Indicates the thread's scheduling policy. Set to \"Other\" "
          "when using OtherSchedPolicy to specifiy additional values. "
          "\"Other\" represents SCHED_OTHER as defined in sched.h."), 
       ValueMap { "0", "1", "2", "3" }, 
       Values { "Unknown", "Other", "SCHED_FIFO", "SCHED_RR" }, 
       ModelCorrespondence { "CIM_UnixThread.OtherSchedPolicy" }]
   uint16 SchedPolicy;

      [Description (
          "Indicates the thread's scheduling policy when SchedPolicy "
          "is set to \"Other\"."), 
       ModelCorrespondence { "CIM_UnixThread.SchedPolicy" }]
   string OtherSchedPolicy;

      [Description (
          "Indicates the size of the guard area for a created thread's "
          "stack.")]
   string GuardSize;

      [Description (
          "Indicates the creation state of the thread."), 
       ValueMap { "0", "2", "3" }, 
       Values { "Unknown", "PTHREAD_CREATE_DETACHED",
          "PTHREAD_CREATE_JOINABLE" }]
   uint16 DetachState;

      [Description (
          "Indicates how the scheduling attributes are to be set."), 
       ValueMap { "0", "2", "3" }, 
       Values { "Unknown", "PTHREAD_INHERIT_SCHED",
          "PTHREAD_EXPLICIT_SCHED" }]
   uint16 InheritSched;

      [Description (
          "Indicates the contention scope of the thread."), 
       ValueMap { "0", "2", "3" }, 
       Values { "Unknown", "PTHREAD_SCOPE_SYSTEM",
          "PTHREAD_SCOPE_PROCESS" }]
   uint16 ContentionScope;

      [Description (
          "Indicates the size of storage to be used for the thread's "
          "stack.")]
   string StackSize;

      [Description (
          "Indicates the thread's concurrency level.")]
   uint64 ConcurrencyLevel;

      [Description (
          "Indicates the thread's cancelability state."), 
       ValueMap { "0", "2", "3" }, 
       Values { "Unknown", "PTHREAD_CANCEL_ENABLE",
          "PTHREAD_CANCEL_DISABLE" }]
   uint16 CancelState;

      [Description (
          "Indicates the thread's cancelability type."), 
       ValueMap { "0", "2", "3" }, 
       Values { "Unknown", "PTHREAD_CANCEL_DEFERRED",
          "PTHREAD_CANCEL_ASYNCHRONOUS" }]
   uint16 CancelType;
};


// ===================================================================
// UnixFile
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "The UnixFile class holds properties that are valid for various "
       "subclasses of LogicalFile, in a Unix environment. This is "
       "defined as a separate and unique class since it is applicable "
       "to Unix files, directories, etc. It is associated via a "
       "FileIdentity relationship to these subclasses of LogicalFile. "
       "Unless this approach of creating and associating a separate "
       "class is used, it is necessary to subclass each of the "
       "inheritance hierarchies under LogicalFile, duplicating the "
       "properties in this class. The referenced _PC* and _POSIX* "
       "constants are defined in unistd.h. Some properties indicate "
       "whether the UNIX implementation support a feature such as "
       "asynchronous I/O or priority I/O. If supported, sysconf "
       "returns the value as defined in the appropriate header file "
       "such as unistd.h. If a feature is not supported, then pathconf "
       "returns a -1. In this case, the corresponding property should "
       "be returned without any value.")]
class CIM_UnixFile : CIM_LogicalElement {

      [Key, Propagated ( "CIM_LogicalFile.CSCreationClassName" ), 
       Description (
          "The scoping ComputerSystem's CreationClassName."), 
       MaxLen ( 256 )]
   string CSCreationClassName;

      [Key, Propagated ( "CIM_LogicalFile.CSName" ), Description (
          "The scoping ComputerSystem's Name."), 
       MaxLen ( 256 )]
   string CSName;

      [Key, Propagated ( "CIM_LogicalFile.FSCreationClassName" ), 
       Description (
          "The scoping FileSystem's CreationClassName."), 
       MaxLen ( 256 )]
   string FSCreationClassName;

      [Key, Propagated ( "CIM_LogicalFile.FSName" ), Description (
          "The scoping FileSystem's Name."), 
       MaxLen ( 256 )]
   string FSName;

      [Key, Propagated ( "CIM_LogicalFile.CreationClassName" ), 
       Description (
          "The scoping LogicalFile's CreationClassName."), 
       MaxLen ( 256 )]
   string LFCreationClassName;

      [Key, Propagated ( "CIM_LogicalFile.Name" ), Description (
          "The scoping LogicalFile's Name."), 
       MaxLen ( 1024 )]
   string LFName;

      [Required, Description (
          "An Identifer that uniquely describes the owner of this "
          "file.")]
   string UserID;

      [Required, Description (
          "An identifier that describes the group that owns this file.")]
   string GroupID;

      [Description (
          "Indicates restricted deletion for directories, or possible "
          "implementation defined properties for executable files. For "
          "directories this is known as the sticky bit.")]
   boolean SaveText;

      [Description (
          "Count of the number of names for this file."), 
       Counter]
   uint64 LinkCount;

      [Description (
          "File Inode number, as printed by \"ls -i\"."), 
       MappingStrings { "UNIX.TOG|ls -i" }]
   string FileInodeNumber;

      [Description (
          "Indicates whether the associated file has setuid "
          "permissions.")]
   boolean SetUid;

      [Description (
          "Indicates whether the associated file has setgid "
          "permissions.")]
   boolean SetGid;

      [Description (
          "The time that the Inode was last modified. This includes "
          "the Inode creation time, state modification, and etc.")]
   datetime  LastModifiedInode;

      [Description (
          "Maximum number of links to a single file."), 
       MinValue ( 8 ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_LINK_MAX" }]
   uint64 LinkMax;

      [Description (
          "Maximum number of bytes in a filename, not including "
          "terminating null."), 
       Units ( "Bytes" ), MinValue ( 14 ), 
       MappingStrings { "POSIX.TOG|pathconf|_POSIX_NAME_MAX" }]
   uint64 NameMax;

      [Description (
          "Maximum number of bytes in a pathname, including the "
          "terminating null character."), 
       Units ( "Bytes" ), MinValue ( 255 ), 
       MappingStrings { "POSIX.TOG|pathconf|_POSIX_PATH_MAX" }]
   uint64 PathMax;

      [Description (
          "The use of chown() is restricted to a process with "
          "appropriate privileges. chown() is used to change the group "
          "ID of a file. The group ID can be changed to the effective "
          "group ID or one of its supplementary group IDs."), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_CHOWN_RESTRICTED" }]
   uint64 PosixChownRestricted;

      [Description (
          "Indicates whether pathname components longer than NameMax "
          "generate an error."), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_NO_TRUNC" }, 
       ModelCorrespondence { "CIM_UnixFile.NameMax" }]
   uint64 PosixNoTrunc;

      [Description (
          "Indicates whether asynchronous input or output operations "
          "may be performed for the associated file."), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_ASYNC_IO" }]
   uint64 PosixAsyncIo;

      [Description (
          "Indicates whether prioritized input or output operations "
          "may be performed for the associated file."), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_PRIO_IO" }]
   uint64 PosixPrioIo;

      [Description (
          "Indicates whether synchronised input or output operations "
          "may be performed for the associated file."), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_SYNC_IO" }]
   uint64 PosixSyncIo;
};


// ===================================================================
// FileIdentity
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "CIM_FileIdentity indicates that a UnixFile describes Unix- "
       "specific aspects of the various subclasses of LogicalFile. The "
       "association exists since it forces UnixFile to be weak to "
       "(scoped by) the LogicalFile. This is not true in the "
       "association's superclass, LogicalIdentity.")]
class CIM_FileIdentity : CIM_LogicalIdentity {

      [Override ( "SystemElement" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The Logical File.")]
   CIM_LogicalFile ref SystemElement;

      [Override ( "SameElement" ), Weak, Max ( 1 ), Description (
          "SameElement represents the additional aspects of the "
          "Unix/Linux Logical file.")]
   CIM_UnixFile ref SameElement;
};


// ===================================================================
// UnixDirectory
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "UnixDirectory is a type of File that logically groups "
       "UnixFiles 'contained' in it.")]
class CIM_UnixDirectory : CIM_Directory {

      [Description (
          "Minimum number of bits needed to represent the maximum size "
          "of a Unix file allowed in the specified directory, as a "
          "signed integer value. Thus, a value of 32 indicates a "
          "maximum size of 2**31 bytes."), 
       Units ( "Bits" ), MinValue ( 32 ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_FILESIZEBITS" }]
   uint64 FileSizeBits;
};


// ===================================================================
// UnixDeviceFile
// ===================================================================
   [Version ( "2.8.0" ), Description (
       "DeviceFile is a special type of LogicalFile that represents a "
       "Device. This class is a specialization of DeviceFile for a "
       "Unix environment.")]
class CIM_UnixDeviceFile : CIM_DeviceFile {

      [Description (
          "The type of device file."), 
       ValueMap { "0", "1", "2", "3" }, 
       Values { "Unknown", "Other", "Block", "Character" }, 
       ModelCorrespondence { "CIM_UnixDeviceFile.OtherTypeDescription" 
          }]
   uint16 DeviceFileType;

      [Description (
          "Additional information when the DeviceFileType property is "
          "set to \"Other\"."), 
       ModelCorrespondence { "CIM_UnixDeviceFile.DeviceFileType" }]
   string OtherTypeDescription;

      [Required, Description (
          "The device Identifier: this is the st_rdev field in the "
          "stat structure.")]
   string DeviceId;

      [Description (
          "Additional information provided by the driver. This "
          "property may be null if no information is available, or a "
          "general description of the device when available, e.g. "
          "\"Non-rewind tape streamer\".")]
   string DeviceDescription;

      [Required, Description (
          "The Device's Major Id.")]
   string DeviceMajor;

      [Required, Description (
          "The Device's Minor Id.")]
   string DeviceMinor;
};


// ===================================================================
// end of file
// ===================================================================
