// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.10.0" ), 
    UMLPackagePath ( "CIM::Device::StorageServices" ), 
    Description ( 
       "This subclass defines the replication capabilities of a "
       "StorageConfigurationService. Multiple instances of "
       "StorageReplicationCapabilities may be associated with a "
       "StorageConfigurationService using ElementCapabilities. A "
       "provider should create one instance for each supported "
       "SynchronizationType." )]
class CIM_StorageReplicationCapabilities : CIM_Capabilities {

      [Description ( 
          "SupportedSynchronizationType describes the type of "
          "Synchronization that is characterized by this instance "
          "of StorageReplicationCapabilities. Values are:\n"
          "Async: create a mirror that is nearly always "
          "synchronized. Sync: create a mirror that is always synchronized.\n"
          "UnSyncAssocFull: create a full size snapshot (Point In "
          "Time image).\n"
          "UnSyncAssocDelta: create a delta snapshot (Point In Time image).\n"
          "UnSyncUnAssoc: create a full size, independent replica." ), 
       ValueMap { "2", "3", "4", "5", "6", "..", "32768..65535" }, 
       Values { "Async", "Sync", "UnSyncAssoc-Full", 
          "UnSyncAssoc-Delta", "UnSyncUnAssoc", "DMTF Reserved", 
          "Vendor Specific" }]
   uint16 SupportedSynchronizationType;

      [Description ( 
          "Enumeration indicating what operations will be executed "
          "as asynchronous jobs. If an operation is included in "
          "both this and SupportedSynchronousActions then the "
          "underlying implementation is indicating that it may or "
          "may not create a job." ), 
       ValueMap { "2", "3", "4", "5", "6", "7", "8", ".." }, 
       Values { "Local Replica Creation", "Remote Replica Creation", 
          "Local Replica Modification", 
          "Remote Replica Modification", "Local Replica Attachment", 
          "Remote Replica Attachment", "Buffer Creation", 
          "DMTF Reserved" }, 
       ModelCorrespondence { 
          "CIM_StorageReplicationCapabilities.SupportedSynchronousActions" }]
   uint16 SupportedAsynchronousActions[];

      [Description ( 
          "Enumeration indicating what operations will be executed "
          "without the creation of a job. If an operation is "
          "included in both this and SupportedAsynchronousActions "
          "then the underlying instrumentation is indicating that "
          "it may or may not create a job." ), 
       ValueMap { "2", "3", "4", "5", "6", "7", "8", "9", ".." }, 
       Values { "Local Replica Creation", "Remote Replica Creation", 
          "Local Replica Modification", 
          "Remote Replica Modification", "Local Replica Attachment", 
          "Remote Replica Attachment", "Buffer Creation", 
          "NetworkPipe Creation", "DMTF Reserved" }, 
       ModelCorrespondence { 
          "CIM_StorageReplicationCapabilities.SupportedAsynchronousActions" }]
   uint16 SupportedSynchronousActions[];

      [Description ( 
          "InitialReplicationState specifies which initial "
          "ReplicationState is supported by a particular provider. "
          "Values are: \n"
          "Initialized: The replication relationship is known and "
          "unsynchronized, but time required to synchronize may be "
          "long. \n"
          "Prepared: The replication relationship is known and "
          "unsynchronized and the time required to synchronize will "
          "be short. \n"
          "Synchronized: The replicas are synchronized.Idle: an "
          "UnSyncAssoc replica is ready to manage." ), 
       ValueMap { "2", "3", "4", "5", "..", "0x8000..0xFFFF" }, 
       Values { "Initialized", "Prepared", "Synchronized", "Idle", 
          "DMTF Reserved", "Vendor Specific" }, 
       ModelCorrespondence { 
          "CIM_StorageConfigurationService.AttachReplica", 
          "CIM_StorageConfigurationService.CreateReplica" }]
   uint16 InitialReplicationState;

      [Description ( 
          "Enumeration indicating which specialized storage element "
          "types are supported by this instance of "
          "StorageReplicationCapabilities. Specialized types are "
          "indicated by the value of the IntendedUsage in "
          "StorageSetting." ), 
       ValueMap { "2", "3", "4", "5", "6", "7", "8", "..", 
          "0x8000..0xFFFF" }, 
       Values { "Delta Pool", "Delta Pool Component", 
          "Remote Mirror", "Local Mirror", "Full Snapshot", 
          "Delta Snapshot", "Replication Buffer", "DMTF Reserved", 
          "Vendor Specific" }]
   uint16 SupportedSpecializedElements[];

      [Description ( 
          "Enumeration indicating which ModifySynchronization "
          "operations are supported by this instance of "
          "StorageReplicationCapabilities." ), 
       ValueMap { "2", "3", "4", "5", "6", "7", "8", "9", "10", 
          "11", "12", "13", "..", "0x8000..0xFFFF" }, 
       Values { "Detach", "Fracture", "Resync", "Restore", 
          "Prepare", "Unprepare", "Quiesce", "Unquiesce", 
          "Reset To Sync", "Reset To Async", "Start Copy", 
          "Stop Copy", "DMTF Reserved", "Vendor Specific" }, 
       ModelCorrespondence { 
          "CIM_StorageConfigurationService.ModifySynchronization" }]
   uint16 SupportedModifyOperations[];

      [Description ( 
          "Indicates host access restrictions for replicas with "
          "thesecapabilities. Values: 2 = not accessible. \n"
          "3 = no restrictions. Any host may access. 4 = only "
          "accessible by associated source element hosts. 5 = not "
          "accessible by source element hosts. Other hosts OK." ), 
       ValueMap { "2", "3", "4", "5", ".." }, 
       Values { "Not Accessible", "No Restrictions", 
          "Source Hosts Only", "Source Hosts Excluded", 
          "DMTF Reserved" }]
   uint16 ReplicaHostAccessibility;

      [Description ( 
          "Lists the replica synchronization states in which the "
          "provider allows host access to replicas. Accessibility "
          "does not guarantee replica contents are valid or "
          "consistent." ), 
       ValueMap { "2", "3", "4", "5", "6", "7", "8", "9", "10", 
          "11", "12", "13", "14", "15", "..", "0x8000.." }, 
       Values { "Initialized", "Prepare In Progress", "Prepared", 
          "Resync In Progress", "Synchronized", 
          "Fracture In Progress", "Quiesce In Progress", "Quiesced", 
          "Restore In Progress", "Idle", "Broken", "Fractured", 
          "Frozen", "Copy In Progress", "DMTF Reserved", 
          "Vendor Specific" }, 
       ModelCorrespondence { "CIM_StorageSynchronized.SyncState" }]
   uint16 HostAccessibleState[];

      [Description ( 
          "True indicates space limits on allocation from "
          "StoragePools may be enforced." )]
   boolean SpaceLimitSupported;

      [Description ( 
          "True indicates space reserved for replicas can be from a "
          "specialized pool." )]
   boolean SpaceReservationSupported;

      [Description ( 
          "True indicates local mirror can be snapshot source." )]
   boolean LocalMirrorSnapshotSupported;

      [Description ( 
          "True indicates remote mirror can be snapshot source." )]
   boolean RemoteMirrorSnapshotSupported;

      [Description ( 
          "True indicates all delta replicas associated with the "
          "same source element can be incrementally dependent. Only "
          "the oldest replica in the set may be deleted or "
          "resynced." )]
   boolean IncrementalDeltasSupported;

      [Description ( 
          "True indicates replicas can persist during power off or "
          "system reset. False indicates replicas lost during these "
          "events." )]
   boolean PersistentReplicasSupported;

      [Description ( 
          "True indicates peer-to-peer connections are "
          "bi-directional. False indicates connections are "
          "uni-directional." )]
   boolean BidirectionalConnectionsSupported;

      [Description ( 
          "Maximum number of replicas that can be associated with "
          "one source element." )]
   uint16 MaximumReplicasPerSource;

      [Description ( 
          "Maximum number of port pairs assigned to a peer-to-peer "
          "connection." )]
   uint16 MaximumPortsPerConnection;

      [Description ( 
          "Maximum number of peer-to-peer connections to which a "
          "port maybe assigned." )]
   uint16 MaximumConnectionsPerPort;

      [Description ( 
          "Maximum number of peer connections supported by this "
          "instance of StorageConfigurationService." )]
   uint16 MaximumPeerConnections;

      [Description ( 
          "Maximum local mirror replication depth allowed by this "
          "instance of StorageConfigurationService. Value 1 "
          "indicates multi-level replication not supported." )]
   uint16 MaximumLocalReplicationDepth = 1;

      [Description ( 
          "Maximum remote mirror replication depth allowed by this "
          "instance of StorageConfigurationService. Value N means "
          "that remote replicas can span N linked peer-to-peer "
          "connections. Value 1 indicates multi-level replication "
          "not supported." )]
   uint16 MaximumRemoteReplicationDepth = 1;

      [Description ( 
          "Start or do not start background copy when replica is created."
           ), 
       ValueMap { "0", "1", "2", "..", "0x8000.." }, 
       Values { "Not Managed", "Start", "Do Not Start", 
          "DMTF Reserved", "Vendor Specific" }]
   uint16 InitialSynchronizationDefault;

      [Description ( 
          "ReplicationPriority allows the priority of background "
          "Replication I/O to be managed relative to host I/O. "
          "Default applies to initial or deferred background "
          "Replication operations. Value can be modified while in "
          "Replication-in-progress state. Values: Low: Replication "
          "engine I/O lower priority than host I/O. \n"
          "Same: Replication engine I/O has the same priority as "
          "host I/O. \n"
          "High: Replication engine I/O has higher priority than "
          "host I/O." ), 
       ValueMap { "0", "1", "2", "3", "..", "0x8000.." }, 
       Values { "Not Managed", "Low", "Same", "High", 
          "DMTF Reserved", "Vendor Specific" }]
   uint16 ReplicationPriorityDefault;

      [Description ( 
          "Warning threshold for generating an indication for "
          "RemainingManagedSpace. Value of zero means no warning "
          "generated.Triggered when RemainingManagedSpace <= "
          "(TotalManagedSpace*LowSpaceWarningThreshold)/100." ), 
       Units ( "Percentage" ), 
       MinValue ( 0 ), 
       MaxValue ( 100 ), 
       PUnit ( "percent" )]
   uint8 LowSpaceWarningThresholdDefault;

      [Description ( 
          "Warning threshold for instance modification indication "
          "for SpaceConsumed by a replica element. Value of zero "
          "means no warning generated. Triggered when SpaceConsumed "
          ">= (SpaceLimit*SpaceLimitWarningThreshold)/100." ), 
       Units ( "Percentage" ), 
       MinValue ( 0 ), 
       MaxValue ( 100 ), 
       PUnit ( "percent" )]
   uint8 SpaceLimitWarningThresholdDefault;

      [Description ( 
          "Remote replication provides StorageConfigurationService "
          "instances for source systems and target systems. A "
          "client determines that extrinsic methods of the service "
          "should be invoked to one instance or the other based on "
          "the value of this property. Values: Not Specified: "
          "invoke a method to either system instance. Source: "
          "invoke to source element service instance. Target: "
          "invoke to target element service instance. Proxy: find "
          "and invoke to proxy service instance." ), 
       ValueMap { "2", "3", "4", "5", "..", "0x8000.." }, 
       Values { "Not Specified", "Source", "Target", "Proxy", 
          "DMTF Reserved", "Vendor Specific" }]
   uint16 RemoteReplicationServicePointAccess;

      [Description ( 
          "Remote replication provides StorageConfigurationService "
          "instances for source systems and target systems. A "
          "client determines that extrinsic methods of the service "
          "should be invoked to one instance or the other based on "
          "the value of this property. If the primary instance is "
          "unavailable, the provider may indicate an alternate "
          "instance. Values: None: no alternate exists. Source: "
          "invoke to source element service instance. Target: "
          "invoke to target element service instance. Proxy: find "
          "and invoke alternate proxy service instance." ), 
       ValueMap { "2", "3", "4", "5", "..", "0x8000.." }, 
       Values { "None", "Source", "Target", "Proxy", 
          "DMTF Reserved", "Vendor Specific" }]
   uint16 AlternateReplicationServicePointAccess;

      [Description ( 
          "DeltaReplicaPool indicates that a specialized pool is "
          "required as a container for delta replica elements. "
          "Values: Any: delta replicas can be created in any pool. "
          "Exclusive: one specialized, exclusive pool must be "
          "created for each source element that has associated "
          "delta replicas. Shared: one specialized, shared pool "
          "must be created to be shared by all source elements with "
          "associated delta replicas." ), 
       ValueMap { "2", "3", "4", "..", "0x8000.." }, 
       Values { "Any", "Exclusive", "Shared", "DMTF Reserved", 
          "Vendor Specific" }]
   uint16 DeltaReplicaPoolAccess;

      [Description ( 
          "Remote replication buffer elements are instances of "
          "CIM_Memory. A buffer element may be created from a "
          "component extent with a BasedOn association or in a "
          "storage pool with an AllocatedFromStoragePool "
          "association. The provider can also make the size and "
          "element type opaque to a client. Values: \n"
          "Not specified: client allows provider to determine size "
          "and container element type. \n"
          "InExtent: buffer must be created from passed component "
          "extent. \n"
          "InPool: buffer must be created in passed pool." ), 
       ValueMap { "0", "2", "3", "..", "0x8000.." }, 
       Values { "Not specified", "InExtent", "InPool", 
          "DMTF Reserved", "Vendor Specific" }]
   uint16 RemoteBufferElementType;

      [Description ( 
          "Array provider may require multiple buffer elements per "
          "array instance as indicated by this property. Values: \n"
          "Array: one buffer element for the entire array. \n"
          "ComponentCS: one buffer element per ComputerSystem "
          "element in a clustered array. \n"
          "Pipe: one or two buffer elements per replication pipe." ), 
       ValueMap { "2", "3", "4", "..", "0x8000.." }, 
       Values { "Array", "ComponentCS", "Pipe", "DMTF Reserved", 
          "Vendor Specific" }]
   uint16 RemoteBufferHost;

      [Description ( 
          "This property allows the provider to indicate the "
          "required location for remote buffer elements. Values: \n"
          "Source: buffer needed only on platforms hosting source "
          "elements. \n"
          "Target: buffer needed only on platforms hosting target "
          "elements. \n"
          "Both: buffers needed for both source and target "
          "platforms." ), 
       ValueMap { "2", "3", "4", "..", "0x8000.." }, 
       Values { "Source", "Target", "Both", "DMTF Reserved", 
          "Vendor Specific" }]
   uint16 RemoteBufferLocation;

      [Description ( 
          "Peer may require a write buffer for remote replica "
          "elements with async I/O buffering. Typically used to "
          "increase remote mirror replication engine performance "
          "while maintaining high availability. Values: \n"
          "Required: must have buffer if any Async remote replicas "
          "are created. \n"
          "Optional: may have buffer if any Async remote replicas "
          "are created." ), 
       ValueMap { "0", "2", "3", "..", "0x8000.." }, 
       Values { "Not Supported", "Required", "Optional", 
          "DMTF Reserved", "Vendor Specific" }]
   uint16 RemoteBufferSupported;

      [Description ( 
          "Indicate if an async remote replica pair is allowed to "
          "use a write buffer for asynchronous write buffering. - "
          "Not Managed: use or not of the buffer is up to the "
          "implementation. - Use Buffer: use of a buffer is "
          "required. - Do Not Use Buffer: a buffer shall not be "
          "used." ), 
       ValueMap { "0", "1", "2", "..", "0x8000.." }, 
       Values { "Not Managed", "Use Buffer", "Do Not Use Buffer", 
          "DMTF Reserved", "Vendor Specific" }]
   uint16 UseReplicationBufferDefault;

      [Description ( 
          "Peer connection protocol is a private, vendor-specific "
          "protocol for replication data transport. A client "
          "verifies that two peers support the same protocol before "
          "establishing a peer-to-peer connection." )]
   string PeerConnectionProtocol;


};
