// Copyright (c) 2005 DMTF.  All rights reserved.
// <change cr="ArchCR00066.004" type="add">Add UmlPackagePath
// qualifier values to CIM Schema.</change>
// ==================================================================
//  CIM_StorageExtent 
// ==================================================================
   [Version ( "2.13.0" ), 
    UMLPackagePath ( "CIM::Core::StorageExtent" ), 
    Description ( 
       "StorageExtent describes the capabilities and management of the "
       "various media that exist to store data and allow data "
       "retrieval. This superclass could be used to represent the "
       "various components of RAID (Hardware or Software) or as a raw "
       "logical extent on top of physical media." )]
class CIM_StorageExtent : CIM_LogicalDevice {

      [Description ( "Type of data organization used." ), 
       ValueMap { "0", "1", "2", "3", "4" }, 
       Values { "Other", "Unknown", "Fixed Block", "Variable Block", 
          "Count Key Data" }]
   uint16 DataOrganization;

      [Description ( 
          "A free form string describing the media and/or its use." ), 
       MappingStrings { "MIB.IETF|HOST-RESOURCES-MIB.hrStorageDescr" }]
   string Purpose;

      [Description ( 
          "Access describes whether the media is readable "
          "(value=1), writeable (value=2), or both (value=3). "
          "\"Unknown\" (0) and \"Write Once\" (4) can also be "
          "defined." ), 
       ValueMap { "0", "1", "2", "3", "4" }, 
       Values { "Unknown", "Readable", "Writeable", 
          "Read/Write Supported", "Write Once" }]
   uint16 Access;

      [Description ( 
          "ErrorMethodology is a free-form string describing the "
          "type of error detection and correction supported by this "
          "StorageExtent." )]
   string ErrorMethodology;

      [Description ( 
          "Size in bytes of the blocks which form this "
          "StorageExtent. If variable block size, then the maximum "
          "block size in bytes should be specified. If the block "
          "size is unknown or if a block concept is not valid (for "
          "example, for AggregateExtents, Memory or LogicalDisks), "
          "enter a 1." ), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|Host Storage|001.4", 
          "MIB.IETF|HOST-RESOURCES-MIB.hrStorageAllocationUnits", 
          "MIF.DMTF|Storage Devices|001.5" }]
   uint64 BlockSize;

      [Description ( 
          "Total number of logically contiguous blocks, of size "
          "Block Size, which form this Extent. The total size of "
          "the Extent can be calculated by multiplying BlockSize by "
          "NumberOfBlocks. If the BlockSize is 1, this property is "
          "the total size of the Extent." ), 
       MappingStrings { "MIF.DMTF|Host Storage|001.5", 
          "MIB.IETF|HOST-RESOURCES-MIB.hrStorageSize" }]
   uint64 NumberOfBlocks;

      [Description ( 
          "The maximum number of blocks, of size BlockSize, which "
          "are available for consumption when layering "
          "StorageExtents using the BasedOn association. This "
          "property only has meaning when this StorageExtent is an "
          "Antecedent reference in a BasedOn relationship. For "
          "example, a StorageExtent could be composed of 120 "
          "blocks. However, the Extent itself may use 20 blocks for "
          "redundancy data. If another StorageExtent is BasedOn "
          "this Extent, only 100 blocks would be available to it. "
          "This information (\'100 blocks is available for "
          "consumption\') is indicated in the ConsumableBlocks "
          "property." )]
   uint64 ConsumableBlocks;

      [Description ( 
          "True indicates that the underlying StorageExtent(s) "
          "participate in a StorageRedundancyGroup." )]
   boolean IsBasedOnUnderlyingRedundancy;

      [Description ( 
          "Boolean set to TRUE if the Storage is sequentially "
          "accessed by a MediaAccessDevice. A TapePartition is an "
          "example of a sequentially accessed StorageExtent. "
          "StorageVolumes, Disk Partitions and LogicalDisks "
          "represent randomly accessed Extents." )]
   boolean SequentialAccess;

      [Description ( 
          "StorageExtents have additional status information beyond "
          "that captured in the OperationalStatus and other "
          "properties, inherited from ManagedSystemElement. This "
          "additional information (for example, \"Protection "
          "Disabled\", value=9) is captured in the ExtentStatus "
          "property. \n"
          "\'In-Band Access Granted\' says that access to data on "
          "an extent is granted to some consumer and is only valid "
          "when \'Exported\' is also set. It is set as a side "
          "effect of PrivilegeManagementService.ChangeAccess or "
          "equivalent interfaces. \n"
          "\'Imported\' indicates that the extent is used in the "
          "current system, but known to be managed by some other "
          "system. For example, a server imports volumes from a "
          "disk array. \n"
          "\'Exported\' indicates the extent is meant to be used by "
          "some comsumer. A disk array\'s logical units are "
          "exported. \n"
          "Intermediate composite extents may be neither imported "
          "nor exported." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11", "12", "13", "14", "15", "16", "17", 
          "18..32767", "32768..65535" }, 
       Values { "Other", "Unknown", "None/Not Applicable", "Broken", 
          "Data Lost", "Dynamic Reconfig", "Exposed", 
          "Fractionally Exposed", "Partially Exposed", 
          "Protection Disabled", "Readying", "Rebuild", 
          "Recalculate", "Spare in Use", "Verify In Progress", 
          "In-Band Access Granted", "Imported", "Exported", 
          "DMTF Reserved", "Vendor Reserved" }]
   uint16 ExtentStatus[];

      [Description ( 
          "Indicates whether or not there exists no single point of failure."
           ), 
       ModelCorrespondence { 
          "CIM_StorageSetting.NoSinglePointOfFailure" }]
   boolean NoSinglePointOfFailure;

      [Description ( 
          "Number of complete copies of data currently maintained." ), 
       ModelCorrespondence { 
          "CIM_StorageSetting.DataRedundancyGoal", 
          "CIM_StorageSetting.DataRedundancyMax", 
          "CIM_StorageSetting.DataRedundancyMin" }]
   uint16 DataRedundancy;

      [Description ( 
          "How many physical packages can currently fail without "
          "data loss. For example, in the storage domain, this "
          "might be disk spindles." ), 
       ModelCorrespondence { 
          "CIM_StorageSetting.PackageRedundancyGoal", 
          "CIM_StorageSetting.PackageRedundancyMax", 
          "CIM_StorageSetting.PackageRedundancyMin" }]
   uint16 PackageRedundancy;

      [Description ( 
          "Current value for Delta reservation. This is a "
          "percentage that specifies the amount of space that "
          "should be reserved in a replica for caching changes." ), 
       Units ( "Percentage" ), 
       MinValue ( 1 ), 
       MaxValue ( 100 ), 
       ModelCorrespondence { 
          "CIM_StorageSetting.DeltaReservationGoal", 
          "CIM_StorageSetting.DeltaReservationMax", 
          "CIM_StorageSetting.DeltaReservationMin" }]
   uint8 DeltaReservation;

      [Description ( 
          "If true, \"Primordial\" indicates that the containing "
          "System does not have the ability to create or delete "
          "this operational element. This is important because "
          "StorageExtents are assembled into higher-level "
          "abstractions using the BasedOn association. Although the "
          "higher-level abstractions can be created and deleted, "
          "the most basic, (i.e. primordial), hardware-based "
          "storage entities cannot. They are physically realized as "
          "part of the System, or are actually managed by some "
          "other System and imported as if they were physically "
          "realized. In other words, a Primordial StorageExtent "
          "exists in, but is not created by its System and "
          "conversely a non-Primordial StorageExtent is created in "
          "the context of its System. For StorageVolumes, this "
          "property will generally be false. One use of this "
          "property is to enable algorithms that aggregate "
          "StorageExtent.ConsumableSpace across all, StorageExtents "
          "but that also want to distinquish the space that "
          "underlies Primordial StoragePools. Since implementations "
          "are not required to surface all Component StorageExtents "
          "of a StoragePool, this information is not accessible in "
          "any other way." )]
   boolean Primordial = false;

      [Override ( "Name" ), 
       Description ( "A unique identifier for the Extent." ), 
       MappingStrings { 
          "SPC.INCITS-T10| VPD 83, Association 0 | Identifier" }, 
       ModelCorrespondence { "CIM_StorageExtent.NameFormat", 
          "CIM_StorageExtent.NameNamespace" }]
   string Name;

      [Description ( 
          "The list here applies to all StorageExtent subclasses. "
          "Please look at the Description in each subclass for "
          "guidelines on the approriate values for that subclass. "
          "Note that any of these formats could apply to a "
          "CompositeExtent. \n"
          "\n"
          "Note - this property originally touched on two concepts "
          "that are now separated into this property and "
          "NameNamespace. Values 2,3,4,5,6, and 8 are retained for "
          "backwards compatibility but are deprecated in lieu of "
          "the corresponding values in "
          "CIM_StorageExtent.NameNamespace. \n"
          "\n"
          "For example, the preferred source for SCSI virtual "
          "(RAID) disk names is from Inquiry VPD page 83 response, "
          "type 3 identifiers. These will have NameFormat set to "
          "\'NAA\' and NameNamespace to \'VPD83Type3\'. \n"
          "\n"
          "Format of the Name property. Values for extents "
          "representing SCSI volumes are (per SCSI SPC-3): \n"
          "2 = VPD Page 83, NAA IEEE Registered Extended "
          "(VPD83NAA6) \n"
          "(DEPRECATED) \n"
          "3 = VPD Page 83, NAA IEEE Registered (VPD83NAA5) \n"
          "(DEPRECATED) \n"
          "4 = VPD Page 83, (VPD83Type2) (DEPRECATED) \n"
          "5 = VPD Page 83, \n"
          "T10 Vendor Identification (VPD83Type1) (DEPRECATED) \n"
          "6 = VPD Page 83, Vendor Specific (VPD83Type0) "
          "(DEPRECATED) \n"
          "7 = Serial Number/Vendor/Model (SNVM) SNVM is 3 strings "
          "representing the vendor name, product name within the "
          "vendor namespace, and the serial number within the model "
          "namespace. Strings are delimited with a \'+\'. Spaces "
          "may be included and are significant. The serial number "
          "is the text representation of the serial number in "
          "hexadecimal upper case. This represents the vendor and "
          "model ID from SCSI Inquiry data; the vendor field MUST "
          "be 8 characters wide and the product field MUST be 16 "
          "characters wide. For example, \n"
          "\'ACME____+SUPER DISK______+124437458\' (_ is a space "
          "character) \n"
          "8 = Node WWN (for single LUN/controller) (NodeWWN) \n"
          "(DEPRECATED) \n"
          "9 = NAA as a generic format. See \n"
          "http://standards.ieee.org/regauth/oui/tutorials/fibrecomp_id.html. "
          "Formatted as 16 or 32 unseparated uppercase hex "
          "characters (2 per binary byte). For example "
          "\'21000020372D3C73\' \n"
          "10 = EUI as a generic format (EUI64) See \n"
          "http://standards.ieee.org/regauth/oui/tutorials/EUI64.html. \n"
          "Formatted as 16 unseparated uppercase hex characters (2 "
          "per binary byte) \n"
          "11 = T10 vendor identifier format as returned by SCSI "
          "Inquiry VPD page 83, identifier type 1. See T10 SPC-3 "
          "specification. This is the 8-byte ASCII vendor ID from "
          "the T10 registry followed by a vendor specific ASCII "
          "identifier; spaces are permitted. For non SCSI volumes, "
          "\'SNVM\' may be the most appropriate choice. 12 = OS "
          "Device Name (for LogicalDisks). See LogicalDisk Name "
          "description for details." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11", "12" }, 
       Values { "Unknown", "Other", "VPD83NAA6", "VPD83NAA5", 
          "VPD83Type2", "VPD83Type1", "VPD83Type0", "SNVM", 
          "NodeWWN", "NAA", "EUI64", "T10VID", "OS Device Name" }, 
       ModelCorrespondence { "CIM_StorageExtent.Name", 
          "CIM_StorageExtent.NameNamespace", 
          "CIM_StorageExtent.OtherNameFormat" }]
   uint16 NameFormat;

      [Description ( 
          "The preferred source SCSI for volume names is SCSI VPD "
          "Page 83 responses. Page 83 returns a list of identifiers "
          "for various device elements. The metadata for each "
          "identifier includes an Association field, identifiers "
          "with association of 0 apply to volumes. Page 83 supports "
          "several namespaces specified in the Type field in the "
          "identifier metadata. See SCSI SPC-3 specification. \n"
          "2 = VPD Page 83, Type 3 NAA (NameFormat SHOULD be NAA) \n"
          "3 = VPD Page 83, Type 2 EUI64 (NameFormat EUI) \n"
          "4 = VPD Page 83, Type 1 T10 Vendor Identification \n"
          "(NameFormat T10) \n"
          "Less preferred volume namespaces from other interfaces: \n"
          "5 = VPD page 80, Serial number (NameFormat SHOULD be "
          "Other) \n"
          "6 = FC NodeWWN (NameFormat SHOULD be NAA or EUI) \n"
          "7 = Serial Number/Vendor/Model (NameFormat SHOULD be "
          "SNVM) \n"
          "The preferred namespace for LogigicalDisk names is "
          "platform specific device namespace; see LogigicalDIsk "
          "Description. \n"
          "8 = OS Device Namespace." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "Unknown", "Other", "VPD83Type3", "VPD83Type2", 
          "VPD83Type1", "VPD80", "NodeWWN", "SNVM", 
          "OS Device Namespace" }, 
       MappingStrings { 
          "SPC.INCITS-T10| VPD 83, Association 0 | Identifier" }, 
       ModelCorrespondence { "CIM_StorageExtent.Name", 
          "CIM_StorageExtent.OtherNameNamespace", 
          "CIM_StorageExtent.NameFormat" }]
   uint16 NameNamespace;

      [Description ( 
          "A string describing the namespace of the Name property "
          "when NameNamespace includes the value 1, \"Other\"." ), 
       ModelCorrespondence { "CIM_StorageExtent.NameNamespace" }]
   string OtherNameNamespace;

      [Description ( 
          "A string describing the format of the Name property when "
          "NameFormat includes the value 1, \"Other\"." ), 
       ModelCorrespondence { "CIM_StorageExtent.NameFormat" }]
   string OtherNameFormat;


};
