// ===================================================================
// Title:       System Unix 2.7
// Filename:    System27_Unix.mof
// Version:     2.7.0
// Release:     Final
// Date:        04/02/03
// ===================================================================
// Copyright 2001-2003 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.
// ===================================================================
// 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.7 - None
// ===================================================================

#pragma locale ("en_US")


// ===================================================================
// UnixLocalFileSystem
// ===================================================================
[Version ("2.6.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.TotalSlots"} ]
    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."),
        MappingStrings{"MIF.DMTF|Host File System|001.15"},
        Units("Bytes") ]
    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 {
    
    [Propagated("CIM_Process.CSCreationClassName"),
        Key, MaxLen (256), Description (
            "The scoping Process's ComputerSystem CreationClassName.") ]
    string CSCreationClassName;
    
    [Propagated("CIM_Process.CSName"),
        Key, MaxLen (256),
        Description ("The scoping Process's ComputerSystem Name.") ]
    string CSName;
    
    [Propagated("CIM_Process.OSCreationClassName"),
        Key, MaxLen (256),
        Description (
            "The scoping Process's OperatingSystem "
            "CreationClassName.") ]
    string OSCreationClassName;
    
    [Propagated("CIM_Process.OSName"),
        Key, MaxLen (256),
        Description ("The scoping Process's OperatingSystem Name.") ]
    string OSName;
    
    [Propagated("CIM_Process.Handle"),
        Key, MaxLen (256),
        Description ("The scoping Process's Handle.") ]
    string Handle;
    
    [Propagated("CIM_Process.CreationClassName"),
        Key, MaxLen (256), Description (
            "The scoping Process's CreationClassName.") ]
    string ProcessCreationClassName;
    
    [Key, MaxLen (256), Override ("Name"), Description (
         "A string used to identify the related statistics "
         "of a Process.") ]
    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."),
        MappingStrings{"MIF.DMTF|Process Information|001.12"},
        Units("Percent") ]
    uint32 CPUTime;
    
    [Description ("The number of KiloBytes of real text space "
        "used by the process."),
        MappingStrings{"MIF.DMTF|Process Information|001.15"},
        Units("KiloBytes") ]
    uint64 RealText;
    
    [Description ("The number of KiloBytes of real data "
        "space used by the process."),
        MappingStrings{"MIF.DMTF|Process Information|001.16"},
        Units("KiloBytes") ]
    uint64 RealData;
    
    [Description ("The number of KiloBytes of real stack space "
        "used by the process."),
        MappingStrings{"MIF.DMTF|Process Information|001.17"},
        Units("KiloBytes") ]
    uint64 RealStack;
    
    [Description (
        "The number of KiloBytes of virtual text space used by the "
        "process."),
        MappingStrings{"MIF.DMTF|Process Information|001.18"},
        Units("KiloBytes") ]
    uint64 VirtualText;
    
    [Description (
        "The number of KiloBytes of virtual data space used by the "
        "process."),
        MappingStrings{"MIF.DMTF|Process Information|001.19"},
        Units("KiloBytes") ]
    uint64 VirtualData;
    
    [Description (
        "The number of KiloBytes of virtual stack space used by the "
        "process."),
        MappingStrings{"MIF.DMTF|Process Information|001.20"},
        Units("KiloBytes") ]
    uint64 VirtualStack;
    
    [Description (
        "The number of KiloBytes of virtual space used for memory "
        "mapped files by the process."),
        MappingStrings{"MIF.DMTF|Process Information|001.22"},
        Units("KiloBytes") ]
    uint64 VirtualMemoryMappedFileSize;
    
    [Description (
        "The number of KiloBytes of shared memory used by the"
        "process."),
        MappingStrings{"MIF.DMTF|Process Information|001.21"},
        Units("KiloBytes") ]
    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 {
      
    [Propagated ("CIM_LogicalFile.CSCreationClassName"),
        Key, MaxLen (256),
        Description ("The scoping ComputerSystem's CreationClassName.") ]
    string CSCreationClassName;
    
    [Propagated ("CIM_LogicalFile.CSName"),
        Key, MaxLen (256),
        Description ("The scoping ComputerSystem's Name.") ]
    string CSName;
    
    [Propagated ("CIM_LogicalFile.FSCreationClassName"), 
        Key, MaxLen (256),
        Description ("The scoping FileSystem's CreationClassName.") ]
    string FSCreationClassName;
    
    [Propagated ("CIM_LogicalFile.FSName"),
        Key, MaxLen (256),
        Description ("The scoping FileSystem's Name.") ]
    string FSName;
    
    [Propagated ("CIM_LogicalFile.CreationClassName"),
        Key, MaxLen (256), Description (
            "The scoping LogicalFile's CreationClassName. ") ]
    string LFCreationClassName;    
    
    [Propagated ("CIM_LogicalFile.Name"), 
        Key, MaxLen (1024), Description (
            "The scoping LogicalFile's Name. ") ]
    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."),
        MinValue(14), Units ("Bytes"),
        MappingStrings {"POSIX.TOG|pathconf|_POSIX_NAME_MAX"} ]
    uint64 NameMax; 
    
    [Description ("Maximum number of bytes in a pathname, including "
        "the terminating null character."),
        MinValue(255), Units ("Bytes"),
        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."),
        ModelCorrespondence {"CIM_UnixFile.NameMax"},
        MappingStrings {"POSIX.TOG|pathconf|_PC_NO_TRUNC"} ]
    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."),
        MinValue(32), Units ("Bits"),
        MappingStrings {"POSIX.TOG|pathconf|_PC_FILESIZEBITS"} ]
    uint64 FileSizeBits; 
};


// ===================================================================
// UnixDeviceFile
// ===================================================================
[Version ("2.6.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 Type property is "
        "set to \"Other\"."),
        ModelCorrespondence {"CIM_UnixDeviceFile.Type"} ] 
    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
// ===================================================================
