// =================================================================== // Title: Device SCC Storage Extent Model 2.8 // Filename: Device28_SCCExtents.mof // Version: 2.8 // Release: Preliminary // Date: 05/29/2003 // =================================================================== // 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 - none // // 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 {"CIMProtectedExtentBasedOn", "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_ProtectedSpaceBasedOn"}, Version ("2.7.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_ProtectedSpaceBasedOn.Antecedent"}, Override ("Antecedent"), Max (1), Description ( "The PhysicalExtent.") ] CIM_PhysicalExtent REF Antecedent; [Deprecated {"CIM_ProtectedSpaceBasedOn.Dependent"}, Override ("Dependent"), Description ( "The AggregatePSExtent which is built on the " "PhysicalExtent.") ] CIM_AggregatePSExtent REF Dependent; }; // =================================================================== // AggregatePSExtentBasedOnAggregatePExtent // =================================================================== [Association, Deprecated {"CIM_ProtectedSpaceBasedOn"}, Version ("2.7.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_ProtectedSpaceBasedOn.Antecedent"}, Override ("Antecedent"), Max (1), Description ( "The AggregatePExtent.") ] CIM_AggregatePExtent REF Antecedent; [Deprecated {"CIM_ProtectedSpaceBasedOn.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 // ===================================================================