// ===================================================================
// Title:       Device SCC Storage Extent Model 2.8
// Filename:    Device28_SCCExtents.mof
// Version:     2.8
// Status:      Final
// Date:        Jan 26, 2004
// ===================================================================
// Copyright 1999-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 Device Model extends the management concepts that
//              are related to LogicalDevices. This file describes
//              the modeling of SCC (SCSI Controller Commands) using
//              StorageExtents.
// 
//              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 (correct deprecations)
// 
// Change Log for v2.7
// CR722 - Deprecate PSExtentBaseOnPExtent, VolumeSetBasedOnPSExtent,
//         LogicalDiskBasedOnVolumeSet, AggregatePSExtent,
//         AggregatePSExtentBasedOnPExtent,
//         AggregatePSExtentBasedOnAggregatePExtent,
//         PExtentRedundancyComponent, AggregateRedundancyComponent,
//         PhysicalExtent, ProtectedSpaceExtent, VolumeSet,
//         AggregatePExtent, and AggregatePSExtent
// CR846 - Deprecate RealizesPExtent and RealizesAggregatePExtent
// CR861 - Add Deprecated qualifier to the individual properties of
//         the Deprecated SCC classes
// CR882 - Deprecate Snapshot and SnapshotOfExtent. Therefore moved
//         definitions from StorageExtents.mof to here.
// ==================================================================

#pragma locale ("en_US")


// ===================================================================
// PhysicalExtent
// ===================================================================
   [Deprecated { "CIM_ProtectedExtentBasedOn",
       "CIM_CompositeExtentBasedOn" }, Version ( "2.7.0" ), 
    Description (
       "Deprecated - use CIM_ProtectedExtentBasedOn or "
       "CIM_CompositeExtentBasedOn instead. The information on check "
       "and user data is better expressed in the association that "
       "layers the storage, than in the extent itself. A "
       "PhysicalExtent is used to model an SCC RAID implementation. It "
       "defines the consecutive addressable block addresses on a "
       "single storage device, that are treated as a single "
       "StorageExtent and that are in the same StorageRedundancyGroup. "
       "An alternate possibility, if automatic configuration is used, "
       "is to instantiate or extend the AggregatePExtent class.")]
class CIM_PhysicalExtent : CIM_StorageExtent {

      [Deprecated { "CIM_CompositeExtentBasedOn.BlockSize",
          "CIM_ProtectedExtentBasedOn.BlockSize" },
          Override ( "BlockSize" ), 
       MappingStrings { "MIF.DMTF|Physical Extent|001.4" }]
   uint64 BlockSize;

      [Deprecated { "CIM_CompositeExtentBasedOn.NumberOfBlocks",
          "CIM_ProtectedExtentBasedOn.NumberOfBlocks" },
          Override ( "NumberOfBlocks" ), 
       MappingStrings { "MIF.DMTF|Physical Extent|001.3" }]
   uint64 NumberOfBlocks;

      [Deprecated { 
          "CIM_CompositeExtentBasedOn.UnitsBeforeCheckDataInterleave",
          "CIM_ProtectedExtentBasedOn.UnitsBeforeCheckDataInterleave" }, 
       Description (
          "Number of bytes of user data to skip before starting the "
          "check data interleave."), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|Physical Extent|001.6" }]
   uint64 UnitsBeforeCheckDataInterleave;

      [Deprecated { "CIM_CompositeExtentBasedOn.UnitsOfCheckData",
          "CIM_ProtectedExtentBasedOn.UnitsOfCheckData" }, 
       Description (
          "Number of bytes to be reserved for check data."), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|Physical Extent|001.7" }]
   uint64 UnitsOfCheckData;

      [Deprecated { "CIM_CompositeExtentBasedOn.UnitsOfUserData",
          "CIM_ProtectedExtentBasedOn.UnitsOfUserData" }, Description (
          "Number of bytes to be reserved for user data."), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|Physical Extent|001.8" }]
   uint64 UnitsOfUserData;
};


// ===================================================================
// ProtectedSpaceExtent
// ===================================================================
   [Deprecated { 
       "CIM_ProtectedExtentBasedOn","CIM_CompositeExtentBasedOn" },
    Version ( "2.7.0" ), Description (
       "Deprecated - use CIM_ProtectedExtentBasedOn or "
       "CIM_CompositeExtentBasedOn instead. The information on check "
       "and user data is better expressed in the association that "
       "layers the storage, than in the extent itself. A "
       "ProtectedSpaceExtent is used to model an SCC RAID "
       "implementation. ProtectedSpaceExtent defines addressable "
       "logical block addresses, treated as a single Extent, located "
       "on one or more PhysicalExtents. ProtectedSpaceExtents exclude "
       "any logical blocks mapped as check data and contain user data "
       "stripe depth mapping information. An alternate possibility, if "
       "automatic configuration is used, is to instantiate or extend "
       "the AggregatePSExtent class.")]
class CIM_ProtectedSpaceExtent : CIM_StorageExtent {

      [Deprecated { "CIM_CompositeExtentBasedOn.BlockSize",
          "CIM_ProtectedExtentBasedOn.BlockSize" },
          Override ( "BlockSize" ), 
       MappingStrings { "MIF.DMTF|Protected Space Extent|001.4" }]
   uint64 BlockSize;

      [Deprecated { "CIM_CompositeExtentBasedOn.NumberOfBlocks",
          "CIM_ProtectedExtentBasedOn.NumberOfBlocks" },
          Override ( "NumberOfBlocks" ), Description (
          "The number of user data blocks contained in this Extent."), 
       MappingStrings { "MIF.DMTF|Protected Space Extent|001.3" }]
   uint64 NumberOfBlocks;

      [Deprecated { "CIM_CompositeExtentBasedOn.UserDataStripeDepth" }, 
       Description (
          "For a ProtectedSpaceExtent that is allocated to a Volume "
          "Set (i.e. is named in a CIM_VolumeSetBasedOnPSExtent "
          "association), this property is the number of user data "
          "bytes placed on this ProtectedSpaceExtent before moving on "
          "to the next ProtectedSpaceExtent in the VolumeSet. "
          "Otherwise, this ProtectedSpaceExtent is considered to be "
          "unallocated, and this property shall be set to zero (0h.)"), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|Protected Space Extent|001.6" }]
   uint64 UserDataStripeDepth;
};


// ===================================================================
// PSExtentBasedOnPExtent
// ===================================================================
   [Association, Deprecated { "CIM_ProtectedExtentBasedOn",
       "CIM_CompositeExtentBasedOn" }, Version ( "2.7.0" ), 
    Description (
       "Covered by ProtectedExtentBasedOn or CompositeExtentBasedOn, "
       "since PhysicalExtent itself is deprecated in lieu of these "
       "associations. ProtectedSpaceExtents are BasedOn a "
       "PhysicalExtent. This relationship is made explicit by this "
       "association.")]
class CIM_PSExtentBasedOnPExtent : CIM_BasedOn {

      [Deprecated { "CIM_CompositeExtentBasedOn.Antecedent",
          "CIM_ProtectedExtentBasedOn.Antecedent" },
          Override ( "Antecedent" ), Description (
          "The PhysicalExtent.")]
   CIM_PhysicalExtent REF Antecedent;

      [Deprecated { "CIM_CompositeExtentBasedOn.Dependent",
          "CIM_ProtectedExtentBasedOn.Dependent" },
          Override ( "Dependent" ), Description (
          "The ProtectedSpaceExtent which is built on the Physical "
          "Extent.")]
   CIM_ProtectedSpaceExtent REF Dependent;

      [Deprecated { "CIM_CompositeExtentBasedOn.StartingAddress",
          "CIM_ProtectedExtentBasedOn.StartingAddress" },
          Override ( "StartingAddress" ), Description (
          "The starting logical block address of the PhysicalExtent "
          "from which this ProtectedSpaceExtent is derived."), 
       MappingStrings { "MIF.DMTF|Protected Space Extent|001.2" }]
   uint64 StartingAddress;
};


// ===================================================================
// VolumeSet
// ===================================================================
   [Deprecated { "CIM_CompositeExtent" }, Version ( "2.7.0" ), 
    Description (
       "VolumeSet is deprecated in lieu of CompositeExtent, which "
       "removes the restriction that the Set must be exported. A "
       "VolumeSet can be used to model an SCC RAID implementation. "
       "VolumeSets represent a contiguous range of logical blocks "
       "presented to the operating environment. VolumeSets may "
       "overlap. However, the underlying PhysicalExtents within the "
       "overlap shall not contain any check data. They are BasedOn one "
       "or more ProtectedSpaceExtents. These BasedOn associations "
       "should be instantiated or subclassed as needed.")]
class CIM_VolumeSet : CIM_StorageVolume {

      [Deprecated { "CIM_CompositeExtent.NumberOfBlocks" },
          Override ( "NumberOfBlocks" ), 
       MappingStrings { "MIF.DMTF|Volume Set|001.3" }]
   uint64 NumberOfBlocks;

      [Deprecated { "CIM_CompositeExtent.ExtentStripeLength" }, 
       Description (
          "Number of contiguous ProtectedSpaceExtents counted before "
          "looping back to the first ProtectedSpaceExtent of the "
          "current stripe. It is the number of Extents forming the "
          "user data stripe."), 
       MappingStrings { "MIF.DMTF|Volume Set|001.4" }]
   uint64 PSExtentStripeLength;

      [Deprecated { "CIM_CompositeExtent.ExtentInterleaveDepth" }, 
       Description (
          "Number of ProtectedSpaceExtents to stripe as a collective "
          "set. In SCC, this value is defined as the number of stripes "
          "to count before continuing to map into the next contiguous "
          "set of Extents, beyond the current stripe."), 
       MappingStrings { "MIF.DMTF|Volume Set|001.5" }]
   uint64 PSExtentInterleaveDepth;

      [Deprecated { "No value" }, Description (
          "VolumeSets in SCC have additional status information beyond "
          "that captured in the Availability and other properties, "
          "inherited from ManagedSystemElement. This additional "
          "information (for example, \"Protection Disabled\", value=9) "
          "is captured in the VolumeStatus property."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
          "10", "11", "12", "13", "14" }, 
       Values { "Other", "Unknown", "None/Not Applicable", "Broken",
          "Data Lost", "Dynamic Reconfig", "Exposed",
          "Fractionally Exposed", "Partially Exposed",
          "Protection Disabled", 
          // 10             
          "Readying", "Rebuild", "Recalculate", "Spare in Use",
          "Verify In Progress" }]
   uint16 VolumeStatus;
};


// ===================================================================
// VolumeSetBasedOnPSExtent
// ===================================================================
   [Association, Deprecated { "CIM_CompositeExtentBasedOn" },
       Version ( "2.7.0" ), Description (
       "This association is deprecated in lieu of "
       "CompositeExtentBasedOn, since VolumeSets and "
       "ProtectedSpaceExtents are themselves deprecated. The "
       "relationship describes that VolumeSets are BasedOn on one or "
       "more ProtectedSpaceExtents.")]
class CIM_VolumeSetBasedOnPSExtent : CIM_BasedOn {

      [Deprecated { "CIM_CompositeExtentBasedOn.Antecedent" },
       Override ( "Antecedent" ), Min ( 1 ), Description (
          "The ProtectedSpaceExtent.")]
   CIM_ProtectedSpaceExtent REF Antecedent;

      [Deprecated { "CIM_CompositeExtentBasedOn.Dependent" },
       Override ( "Dependent" ), Description (
          "The VolumeSet which is built on the ProtectedSpace Extent.")]
   CIM_VolumeSet REF Dependent;

      [Deprecated { 
          "CIM_CompositeExtentBasedOn.LBAsMappedByDecrementing" }, 
       Description (
          "True if logical blocks in the ProtectedSpaceExtent are "
          "mapped in decrementing order. This property corresponds to "
          "the INCDEC value in the SCC-2 Volume Set PS_Extent "
          "Descriptor.")]
   boolean LBAsMappedByDecrementing;

      [Deprecated { 
          "CIM_CompositeExtentBasedOn.LBAMappingIncludesCheckData" }, 
       Description (
          "True if the logical block mapping algorithm includes check "
          "data bytes. This property corresponds to the NOCHKSKIP "
          "attribute in the SCC-2 Volume Set PS_Extent Descriptor.")]
   boolean LBAMappingIncludesCheckData;
};


// ===================================================================
// LogicalDiskBasedOnVolumeSet
// ===================================================================
   [Association, Deprecated { "CIM_BasedOn" }, Version ( "2.7.0" ), 
    Description (
       "This association describes that LogicalDisks can be BasedOn a "
       "VolumeSet. However, there is no need for the specificity of "
       "this association. It is deprecated in lieu of the generic "
       "BasedOn relationship.")]
class CIM_LogicalDiskBasedOnVolumeSet : CIM_LogicalDiskBasedOnVolume {

      [Deprecated { "CIM_BasedOn.Antecedent" },
       Override ( "Antecedent" ), Max ( 1 ), Description (
          "The VolumeSet.")]
   CIM_VolumeSet REF Antecedent;
};


// ===================================================================
// AggregatePExtent
// ===================================================================
   [Deprecated { "CIM_StorageExtent", "CIM_CompositeExtentBasedOn" },
    Version ( "2.7.0" ), Description (
       "This class is deprecated in lieu of the generic StorageExtent "
       "object and the ProtectedExtentBasedOn association. An "
       "AggregatePExtent is used to model an SCC RAID implementation. "
       "AggregatePExtents provide summary information about the "
       "addressable logical blocks which are in the same "
       "StorageRedundancyGroup and reside on the same storage device. "
       "This is an alternative grouping for PhysicalExtents, when only "
       "summary information is needed or when automatic configuration "
       "is used.")]
class CIM_AggregatePExtent : CIM_StorageExtent {

      [Deprecated { "CIM_CompositeExtentBasedOn.NumberOfBlocks",
          "CIM_StorageExtent.NumberOfBlocks" },
          Override ( "NumberOfBlocks" ), Description (
          "Total number of blocks (including the check data blocks) "
          "contained in this AggregatePExtent. The block size (an "
          "inherited property) should be set to the same value as for "
          "the MediaAccessDevice associated with this Extent."), 
       MappingStrings { "MIF.DMTF|Aggregate Physical Extent|001.2" }]
   uint64 NumberOfBlocks;

      [Deprecated { "CIM_CompositeExtentBasedOn.UnitsOfCheckData" }, 
       Description (
          "The number of blocks contained in this AggregatePExtent to "
          "be used as check data. If this AggregatePExtent is "
          "available, then this value shall be zero."), 
       MappingStrings { "MIF.DMTF|Aggregate Physical Extent|001.3" }]
   uint64 BlocksOfCheckData;
};


// ===================================================================
// AggregatePSExtent
// ===================================================================
   [Deprecated { "CIM_StorageExtent", "CIM_CompositeExtentBasedOn" },
    Version ( "2.7.0" ), Description (
       "Similar to AggregatePExtent, this class is deprecated in lieu "
       "of the generic StorageExtent object and the "
       "ProtectedExtentBasedOn association. An AggregatePSExtent is "
       "used to model an SCC RAID implementation. AggregatePSExtents "
       "define the number of addressable logical blocks on a single "
       "storage device, excluding any logical blocks mapped as check "
       "data. This is an alternative grouping for ProtectedSpace "
       "Extents, when only summary information is needed or when "
       "automatic configuration is used.")]
class CIM_AggregatePSExtent : CIM_StorageExtent {

      [Deprecated { "CIM_CompositeExtentBasedOn.NumberOfBlocks",
          "CIM_StorageExtent.NumberOfBlocks" },
          Override ( "NumberOfBlocks" ), Description (
          "Total number of user data blocks that are contained in this "
          "Extent."), 
       MappingStrings { "MIF.DMTF|Aggregate Protected Space " 
          "Extent|001.2" }]
   uint64 NumberOfBlocks;
};


// ===================================================================
// AggregatePSExtentBasedOnPExtent
// ===================================================================
   [Association, Deprecated { "CIM_ProtectedExtentBasedOn" },
       Version ( "2.8.0" ), Description (
       "This association is deprecated in lieu of "
       "ProtectedSpaceBasedOn, since PhysicalExtents and "
       "AggregatePSExtents are themselves deprecated. The association "
       "describes that AggregatePSExtents are BasedOn a single "
       "PhysicalExtent.")]
class CIM_AggregatePSExtentBasedOnPExtent : CIM_BasedOn {

      [Deprecated { "CIM_ProtectedExtentBasedOn.Antecedent" },
       Override ( "Antecedent" ), Max ( 1 ), Description (
          "The PhysicalExtent.")]
   CIM_PhysicalExtent REF Antecedent;

      [Deprecated { "CIM_ProtectedExtentBasedOn.Dependent" },
       Override ( "Dependent" ), Description (
          "The AggregatePSExtent which is built on the PhysicalExtent.")]
   CIM_AggregatePSExtent REF Dependent;
};


// ===================================================================
// AggregatePSExtentBasedOnAggregatePExtent
// ===================================================================
   [Association, Deprecated { "CIM_ProtectedExtentBasedOn" },
       Version ( "2.8.0" ), Description (
       "This association is deprecated in lieu of "
       "ProtectedSpaceBasedOn, since AggregatePExtents and "
       "AggregatePSExtents are themselves deprecated. The association "
       "describes that AggregatePSExtents are BasedOn a single "
       "AggregatePExtent.")]
class CIM_AggregatePSExtentBasedOnAggregatePExtent : CIM_BasedOn {

      [Deprecated { "CIM_ProtectedExtentBasedOn.Antecedent" },
       Override ( "Antecedent" ), Max ( 1 ), Description (
          "The AggregatePExtent.")]
   CIM_AggregatePExtent REF Antecedent;

      [Deprecated { "CIM_ProtectedExtentBasedOn.Dependent" },
       Override ( "Dependent" ), Description (
          "The AggregatePSExtent which is built on the Aggregate "
          "PExtent.")]
   CIM_AggregatePSExtent REF Dependent;
};


// ===================================================================
// PExtentRedundancyComponent
// ===================================================================
   [Association, Deprecated { "CIM_ExtentRedundancyComponent" },
    Aggregation, Version ( "2.7.0" ), Description (
       "Describes the PhysicalExtents participating in a Storage "
       "RedundancyGroup. However, there is no need for the specificity "
       "of this association. It is deprecated in lieu of the generic "
       "ExtentRedundancyComponent relationship, its superclass.")]
class CIM_PExtentRedundancyComponent : CIM_ExtentRedundancyComponent {

      [Deprecated { "CIM_ExtentRedundancyComponent.GroupComponent" },
       Aggregate, Override ( "GroupComponent" ), Description (
          "The StorageRedundancyGroup.")]
   CIM_StorageRedundancyGroup REF GroupComponent;

      [Deprecated { "CIM_ExtentRedundancyComponent.PartComponent" },
       Override ( "PartComponent" ), Description (
          "The PhysicalExtent participating in the RedundancyGroup.")]
   CIM_PhysicalExtent REF PartComponent;
};


// ===================================================================
// AggregateRedundancyComponent
// ===================================================================
   [Association, Deprecated { "CIM_ExtentRedundancyComponent" },
    Aggregation, Version ( "2.7.0" ), Description (
       "Describes the AggregatePExtent in a StorageRedundancyGroup. "
       "However, there is no need for the specificity of this "
       "association. It is deprecated in lieu of the generic "
       "ExtentRedundancyComponent relationship, its superclass.")]
class CIM_AggregateRedundancyComponent : CIM_ExtentRedundancyComponent {

      [Deprecated { "CIM_ExtentRedundancyComponent.GroupComponent" },
       Aggregate, Override ( "GroupComponent" ), Description (
          "The StorageRedundancyGroup.")]
   CIM_StorageRedundancyGroup REF GroupComponent;

      [Deprecated { "CIM_ExtentRedundancyComponent.PartComponent" },
       Override ( "PartComponent" ), Description (
          "The AggregatePExtent participating in the RedundancyGroup.")]
   CIM_AggregatePExtent REF PartComponent;
};


// ===================================================================
// RealizesPExtent
// ===================================================================
   [Association, Deprecated { "CIM_RealizesExtent" },
    Version ( "2.7.0" ), Description (
       "PhysicalExtents are realized on a PhysicalMedia. This is "
       "described by RealizesPExtent. However, there is no need for "
       "the specificity of this association. It is deprecated in lieu "
       "of the generic RealizesExtent relationship.")]
class CIM_RealizesPExtent : CIM_RealizesExtent {

      [Deprecated { "CIM_RealizesExtent.Antecedent" },
          Override ( "Antecedent" ), Max ( 1 ), Description (
          "The PhysicalMedia on which the Extent is realized.")]
   CIM_PhysicalMedia REF Antecedent;

      [Deprecated { "CIM_RealizesExtent.Dependent" },
          Override ( "Dependent" ), Description (
          "The PhysicalExtent that is located on the Media.")]
   CIM_PhysicalExtent REF Dependent;
};


// ===================================================================
// RealizesAggregatePExtent
// ===================================================================
   [Association, Deprecated { "CIM_RealizesExtent" },
    Version ( "2.7.0" ), Description (
       "AggregatePExtents are realized on a PhysicalMedia. This is "
       "described by RealizesAggregatePExtent. However, there is no "
       "need for the specificity of this association. It is deprecated "
       "in lieu of the generic RealizesExtent relationship.")]
class CIM_RealizesAggregatePExtent : CIM_RealizesExtent {

      [Deprecated { "CIM_RealizesExtent.Antecedent" },
          Override ( "Antecedent" ), Max ( 1 ), Description (
          "The PhysicalMedia on which the Extent is realized.")]
   CIM_PhysicalMedia REF Antecedent;

      [Deprecated { "CIM_RealizesExtent.Dependent" },
          Override ( "Dependent" ), Description (
          "The AggregatePExtent that is located on the Media.")]
   CIM_AggregatePExtent REF Dependent;
};


// ===================================================================
// Snapshot
// ===================================================================
   [Deprecated { "No Value" }, Version ( "2.7.0" ), Description (
       "Deprecated. Snapshots are now modeled in a more abstrct way "
       "using StorageExtent and StorageSynchronized. \n"
       "The Snapshot class is an optional construct. It can be used to "
       "represent an Extent that contains a full copy of another "
       "Extent, or the changes to that Extent when performing a "
       "delta-based (delta before or delta after) copy. \n"
       "Snapshot's definition in CIM is not equivalent to the act of "
       "creating a volume or file-based snapshot, or a point in time "
       "copy. It is at a much lower level and represents the use of "
       "storage to hold a copied image of an Extent, or to hold "
       "changes to an Extent. Use of the Snapshot object when making a "
       "full copy is only recommended if the purpose is to describe "
       "the existence of a copy. (This use will be very infrequent.) "
       "The problem with describing an Extent solely as a 'snapshot' "
       "is that when the snapshot/copy is broken, the object must be "
       "destroyed. Typically, this object still holds valid data, and "
       "would have to be reinstantiated. If the 'full copy' object is "
       "to be treated as a StorageVolume or more general Extent, then "
       "it should be modeled as such from the beginning - i.e., not as "
       "an instance of Snapshot but as an instance of a generic "
       "StorageExtent or StorageVolume. In this case, the Synchronized "
       "association would be used to describe that one StorageExtent "
       "is synchronized with another. \n"
       "When describing a delta-based snapshot/point in time copy, the "
       "Snapshot object represents the store holding the before/after "
       "image changes to the original Extent. For example, when doing "
       "a 'delta before' Snapshot, the resultant target would be "
       "modeled as a StorageExtent that is BasedOn the original Extent "
       "and the instance of Snapshot (that holds the changes to the "
       "original Extent).")]
class CIM_Snapshot : CIM_StorageExtent {

      [Deprecated { "CIM_Synchronized.SyncMaintained" }, Description (
          "True indicates that the snapshot is synced.")]
   boolean IsSynced;

      [Deprecated { "CIM_Synchronized.WhenSynced" }, Description (
          "The time stamp indicating when the sync occurred.")]
   datetime SyncTime;
};


// ===================================================================
// SnapshotOfExtent
// ===================================================================
   [Association, Deprecated { "No Value" }, Version ( "2.7.0" ), 
    Description (
       "Deprecated. Snapshots are now modeled in a more abstract way "
       "using StorageExtent and CIM_StorageSynchronized. \n"
       "SnapshotOfExtent is an association between an Extent and its "
       "Snapshot. This relationship is made explicit in this "
       "association.")]
class CIM_SnapshotOfExtent : CIM_Dependency {

      [Deprecated { "No Value" }, Override ( "Antecedent" ), Max ( 1 ), 
       Description (
          "The StorageExtent.")]
   CIM_StorageExtent REF Antecedent;

      [Deprecated { "No Value" }, Override ( "Dependent" ), 
       Description (
          "The Snapshot.")]
   CIM_Snapshot REF Dependent;

      [Deprecated { "CIM_StorageSynchronized.CopyType" }, Description (
          "The type of snapshot."), 
       ValueMap { "0", "1", "2", "3", "4" }, 
       Values { "Other", "Unknown", "Copy", "Before Delta",
          "After Delta" }]
   uint16 SnapshotType;
};


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