// Copyright (c) 2011 DMTF.  All rights reserved.
   [Version ( "2.29.0" ), 
    UMLPackagePath ( "CIM::Device::StorageDevices" ), 
    Description ( 
       "A class derived from SystemSpecificCollection that models SCSI "
       "Target Port Groups. SCSITargetPortGroup is part of the model "
       "for devices with asymmetric access to logical units - access "
       "is optimized for a subset of target ports. SCSITargetPortGroup "
       "is aggregated to SCSIProtocolEndpoints that expose a common "
       "ValueMap { 2, 3, 4, 5, 6 }, Values { Active/Optimized, "
       "Active/Non-optimized, StandBy, Unavailable, Transitioning }, "
       "access state for a set of associated logical Units (modeled by "
       "various subclasses of LogicalDevice). SCSITargetPortGroups "
       "only apply to target devices with asymmetric multipath access "
       "and not to devices with symmetric (or single path) access." )]
class CIM_SCSITargetPortGroup : CIM_SystemSpecificCollection {

      [Write, Description ( 
          "A boolean indicating whether the associated logical unit "
          "has asymmetric multipath access. If Asymmetric is true, "
          "then there MUST be a SCSITargetPortGroup instance "
          "associated to the LogicalDevice." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES|asymmetric" }]
   boolean Asymmetric = false;

      [Write, Description ( 
          "The load balance type for the associated logical unit." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7" }, 
       Values { "Unknown", "Other", "No Load Balancing", 
          "Round Robin", "Least Blocks", "Least IO", 
          "Product Specific", "Service Wide Default" }, 
       MappingStrings { 
          "MP_API.SNIA|MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES|currentLoadBalanceType" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathSettings.OtherCurrentLoadBalanceType" }]
   uint16 CurrentLoadBalanceType = 7;

      [Write, Description ( 
          "A string describing the current load balance algorithm "
          "if CurrentLoadBalanceType is 1 (\'Other\'). This string "
          "MUST be identical to one of the strings from "
          "CIM_SCSIMultipathConfigurationCapabilities "
          "OtherSupportedLoadBalanceAlgorithmNames." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES|currentLoadBalanceType" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.OtherSupportedLoadBalanceAlgorithmNames", 
          "CIM_SCSIMultipathSettings.CurrentLoadBalanceType" }]
   string OtherCurrentLoadBalanceType;

      [Write, Description ( 
          "The auto-failback setting for the associated logical "
          "units. Either enabled, disabled, or all associated "
          "logical units follow the service-wide setting from the "
          "capabilities class associated with the appropriate "
          "service." ), 
       ValueMap { "2", "3", "4" }, 
       Values { "Enabled for the associated logical units", 
          "Disabled for the associated logical units", 
          "The associated logical units use the service-wide setting" }, 
       MappingStrings { 
          "MP_API.SNIA|MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES|autoFailbackEnabled" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.AutoFailbackEnabled" }]
   uint16 AutoFailbackEnabled = 4;

      [Write, Description ( 
          "The maximum polling rate (in seconds) supported by the "
          "driver if different from the service-wide max from the "
          "capabilities instance. Zero (0) indicates the driver "
          "either does not poll for autofailback or has not "
          "provided an interface to set the polling rate for "
          "multipath logical units. If this property and the "
          "service PollingRateMax are non-zero, this value has "
          "precedence for the associate logical units. The "
          "instrumentation should not instantiate this property if "
          "the value from "
          "CIM_SCSIMultipathConfigurationCapabilities is used for "
          "the associated logical units." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES|pollingRateMax" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.PollingRateMax" }]
   uint32 PollingRateMax;

      [Write, Description ( 
          "The current polling rate (in seconds) for auto-failback. "
          "This cannot exceed PollingRateMax. If this property and "
          "the service-wide Capabilities instance "
          "CurrentPollingRate are non-zero, this value has "
          "precedence for the associated logical units. The "
          "instrumentation should not instantiate this property if "
          "the value from "
          "CIM_SCSIMultipathConfigurationCapabilities is used for "
          "the associated logical units." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES|currentPollingRate" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.CurrentPollingRate" }]
   uint32 CurrentPollingRate;

      [Description ( 
          "Access to all associated logical units through all "
          "aggregated ports share this access state. Access to the "
          "Logical Units through other ports is specified by the "
          "access state of those port\'s target port group." ), 
       ValueMap { "2", "3", "4", "5", "6" }, 
       Values { "Active/Optimized", "Active/Non-optimized", 
          "StandBy", "Unavailable", "Transitioning" }, 
       MappingStrings { "SPC.INCITS-T10 |Asymmetric Access State", 
          "MP_API.SNIA|MP_ACCESS_STATE_TYPE" }]
   uint16 AccessState;

      [Description ( 
          "True indicates that the underlying implementation "
          "provides an interface allowing drivers to explicitly "
          "request activation of a target port group - either "
          "through the SCSI SET TARGET PORT GROUP or a proprietary "
          "command." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_TARGET_PORT_PROPERTIES|explicitFailover" }]
   boolean ExplicitFailover;

      [Description ( 
          "An integer identifier for the target port group. This "
          "corresponds to the TARGET PORT GROUP field in the REPORT "
          "TARGET PORT GROUPS response and the TARGET PORT GROUP "
          "field in an INQUIRY VPD page 85 response, type 5h "
          "identifier." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_TARGET_PORT_PROPERTIES|tpgID", 
          "SPC.INCITS-T10 | Target Port Group Descriptor | Target Port Group", 
          "SPC.INCITS-T10 | Inquiry VPD page 0x85 | Target Port Group" }]
   uint16 Identifier;

      [Description ( 
          "True indicates that the target device indicates that "
          "access to the associated logical units through the ports "
          "in this target port group is preferred over access "
          "through other ports. This may correspond to the PREF bit "
          "in the SCSI TARGET PORT GROUP descriptor or an "
          "equivalent vendor-specific interface." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_TARGET_PORT_PROPERTIES|preferredLUPath", 
          "SPC.INCITS-T10 | Target Port Group Descriptor | PREF" }]
   boolean Preferred;

      [Description ( 
          "True indicates that the underlying implementation "
          "provides an interface allowing the administrator to "
          "reassign logical units to target port groups." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_TARGET_PORT_PROPERTIES|supportsLuAssignment" }]
   boolean SupportsLuAssignment;


};
