// ===================================================================
// Title:       Core Redundancy 2.8
// Filename:    Core28_Redundancy.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 Core Model defines basic management concepts.
//              This file defines the concepts and classes to support
//              Redundancy.
// 
//              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
// CR1210 - Removal of experimental Qualifiers for core.
// CR1223 - SysDev Omnibus CR - Minor MOF corrections.
// 
// Change Log for v2.8 Preliminary
// CR1019 - CIM Versioning for 2.8 Preliminary
// CR1071 - Add RedundancySet, SparedSet, IsSpare, StorageRedundancySet,
//          and ExtraCapacitySet.
// 
// Change Log for v2.7.1
//       - Remove aggregate qualifier from the PartComponent of
//         RedundancyComponent.
// 
// Change Log for v2.7 Final
// CR940 - Fix Value/ValueMap mismatch in StorageRedundancySet.
//         TypeOfAlgorithm
// CR968 - Keep RedundancySet, SparedSet, IsSpare, StorageRedundancySet,
//         and ExtraCapacitySet experimental for 2.8
// 
// Change Log for v2.7
// CR722 - Update description for StorageRedundancyGroup
// CR752 - Add RedundancySet, SparedSet, IsSpare, StorageRedundancySet,
//         and ExtraCapacitySet
//       - Update the description for RedundancyGroup
// ==================================================================

#pragma locale ("en_US")



// ===================================================================
// RedundancyGroup
// ===================================================================
   [Version ( "2.8.0" ), Description (
       "A class derived from LogicalElement that is a special "
       "collection of ManagedSystemElements. This collection indicates "
       "that the aggregated components together provide redundancy. "
       "All elements aggregated in a RedundancyGroup should be "
       "instantiations of the same object class.")]
class CIM_RedundancyGroup : CIM_LogicalElement {

      [Key, Description (
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this property "
          "allows all instances of this class and its subclasses to be "
          "uniquely identified."), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Override ( "Name" ), Description (
          "The RedundancyGroup Name serves as the key for the Group's "
          "instance in an enterprise environment."), 
       MaxLen ( 256 )]
   string Name;

      [Description (
          "RedundancyStatus provides information on the state of the "
          "RedundancyGroup. \"Fully Redundant\" (value=2) means that "
          "all of the configured redundancy is still available; "
          "\"Degraded Redundancy\" (3) means that some failures have "
          "been experienced but some reduced amount of redundancy is "
          "still available; \"Redundancy Lost\" (4) means that a "
          "sufficient number of failures have been experienced such "
          "that no redundancy is available and the next failure "
          "experienced will cause overall failure. Also, the values, "
          "\"Other\" (1) and \"Unknown\" (0), are defined."), 
       ValueMap { "0", "1", "2", "3", "4" }, 
       Values { "Unknown", "Other", "Fully Redundant",
          "Degraded Redundancy", "Redundancy Lost" }]
   uint16 RedundancyStatus;
};


// ===================================================================
// RedundancyComponent
// ===================================================================
   [Association, Aggregation, Version ( "2.7.1" ), Description (
       "A RedundancyGroup aggregates Managed System Elements and "
       "indicates that these elements, taken together, provide "
       "redundancy. All elements aggregated in a RedundancyGroup "
       "should be instantiations of the same object class.")]
class CIM_RedundancyComponent : CIM_Component {

      [Aggregate, Override ( "GroupComponent" ), Description (
          "The RedundancyComponent association indicates that 'this "
          "set of fans' or 'these physical extents' participate in a "
          "single RedundancyGroup.")]
   CIM_RedundancyGroup REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "The component of the redundancy group.")]
   CIM_ManagedSystemElement REF PartComponent;
};


// ===================================================================
// SpareGroup
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "A class derived from RedundancyGroup indicating that one or "
       "more of the aggregated elements can be spared. (The actual "
       "Spares are defined using the ActsAsSpare association.) An "
       "example is the use of redundant NICs in a ComputerSystem - "
       "where one NIC is primary and the other is Spare. The 'primary' "
       "NIC would be a member of the SpareGroup (associated using the "
       "RedundancyComponent class) and the 'other' NIC would be "
       "associated using the ActsAsSpare relationship.")]
class CIM_SpareGroup : CIM_RedundancyGroup {

      [Description (
          "This method is forces a failover from one ManagedSystem "
          "Element to another. There are two parameters to the "
          "Failover method, FailoverFrom and FailoverTo. The "
          "FailoverFrom parameter is a reference to the primary "
          "ManagedSystemElement that will become inactive after the "
          "method. This Element should be associated with the "
          "SpareGroup through the RedundancyComponent relationship. "
          "The FailoverTo parameter is a reference to the "
          "ManagedSystemElement that will take over for the primary. "
          "This Element should be associated with the SpareGroup "
          "through the ActsAsSpare association. Once the failover has "
          "occurred, the SpareGroup and the Redundancy Component and "
          "ActsAsSpare associations will be updated with current "
          "status. For example, the ActsAsSpare association that "
          "contained the FailoverTo Element will be deleted and a new "
          "RedundancyComponent association instantiated in its place. "
          "The method should return 0 if successful, 1 if the request "
          "is not supported, and some other value if any other error "
          "occurred. In a subclass, the set of possible return codes "
          "could be specified, using a ValueMap qualifier on the "
          "method. The strings to which the ValueMap contents are "
          "'translated' may also be specified in the subclass as a "
          "Values array qualifier.")]
   uint32 Failover( 
         [IN, Description (
             "The primary ManagedSystemElement that will become "
             "inactive after the method.")]
      CIM_ManagedSystemElement REF FailoverFrom, 
         [IN, Description (
             "The ManagedSystemElement that will take over from the "
             "primary MSE.")]
      CIM_ManagedSystemElement REF FailoverTo); 
};


// ===================================================================
// ActsAsSpare
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "The ActsAsSpare association indicates which elements can spare "
       "or replace the other aggregated elements. The fact that a "
       "spare can operate in \"hot standby\" mode is specified on an "
       "element by element basis.")]
class CIM_ActsAsSpare {

      [Key, Description (
          "The SpareGroup.")]
   CIM_SpareGroup REF Group;

      [Key, Description (
          "A ManagedSystemElement acting as a spare and participating "
          "in the SpareGroup.")]
   CIM_ManagedSystemElement REF Spare;

      [Description (
          "HotStandby is a boolean indicating that the spare is "
          "operating as a hot standby.")]
   boolean HotStandby;
};


// ===================================================================
// StorageRedundancyGroup
// ===================================================================
   [Version ( "2.7.0" ), Description (
       "A class derived from RedundancyGroup containing mass "
       "storage-related redundancy information. StorageRedundancy "
       "Groups are used to protect user data. They act on one or more "
       "underlying StorageExtents, associated via "
       "ExtentRedundancyComponent and produce one or more protected "
       "StorageExtents that are associated to the underlying "
       "StorageExtents via ProtectedExtentBasedOn or "
       "CompositeExtentBasedOn. StorageRedundancyGroups may overlap. "
       "However, the underlying StorageExtents within the overlap "
       "should not contain any check data.")]
class CIM_StorageRedundancyGroup : CIM_RedundancyGroup {

      [Description (
          "The TypeOfAlgorithm specifies the algorithm used for data "
          "redundancy and reconstruction. For example, \"P+Q\" (value "
          "=5) or \"P+S\" (7) may be specified. The value of 0, is "
          "defined as \"None\" to indicate that data redundancy is not "
          "active. An inactive redundancy should only be instantiated "
          "if data striping or concatenation are active. These are "
          "indicated by the IsStriped or IsConcatentated boolean "
          "properties of this RedundancyGroup."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7" }, 
       Values { "None", "Other", "Unknown", "Copy", "XOR", "P+Q", "S",
          "P+S" }, 
       MappingStrings { "MIF.DMTF|Redundancy Group|001.2" }]
   uint16 TypeOfAlgorithm;

      [Description (
          "StorageRedundancy provides additional information on the "
          "state of the RedundancyGroup, beyond the RedundancyStatus "
          "property. Information like \"Reconfig In Progress\" (value "
          "=1) or \"Redundancy Disabled\" can be specified using this "
          "property."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "No Additional Status", "Reconfig In Progress",
          "Data Lost", "Not Currently Configured", "Protected Rebuild",
          "Redundancy Disabled", "Unprotected Rebuild",
          "Recalculating", "Verifying" }]
   uint16 StorageRedundancy;

      [Description (
          "True indicates that the data is striped across the various "
          "StorageExtents in the Group.")]
   boolean IsStriped;

      [Description (
          "True indicates that the data is concatenated across the "
          "various StorageExtents in the Group.")]
   boolean IsConcatenated;
};


// ===================================================================
// ExtraCapacityGroup
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "A class derived from RedundancyGroup indicating that the "
       "aggregated elements have more capacity or capability than is "
       "needed. An example of this type of redundancy is the "
       "installation of N+1 power supplies or fans in a system.")]
class CIM_ExtraCapacityGroup : CIM_RedundancyGroup {

      [Description (
          "MinNumberNeeded indicates the smallest number of elements "
          "that must be operational in order to have redundancy. For "
          "example, in an N+1 redundancy relationship, the "
          "MinNumberNeeded property should be set equal to N.")]
   uint32 MinNumberNeeded;

      [Description (
          "Boolean indicating whether load balancing is supported by "
          "the ExtraCapacityGroup.")]
   boolean LoadBalancedGroup;
};


// ===================================================================
// ExtentRedundancyComponent
// ===================================================================
   [Association, Aggregation, Version ( "2.6.0" ), Description (
       "Describes the StorageExtents participating in a Storage "
       "RedundancyGroup.")]
class CIM_ExtentRedundancyComponent : CIM_RedundancyComponent {

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

      [Override ( "PartComponent" ), Description (
          "The StorageExtent participating in the RedundancyGroup.")]
   CIM_StorageExtent REF PartComponent;
};


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