// Copyright (c) 2011 DMTF.  All rights reserved.
   [Version ( "2.29.0" ), 
    UMLPackagePath ( "CIM::Device::StorageDevices" ), 
    Description ( 
       "A class derived from CIM_Capabilities that models the "
       "capabilities of a multipath driver. Note that \'path\' in this "
       "context refers to end-to-end device paths (for example, SCSI "
       "initiator/target) with no understanding of edge paths between "
       "interconnect elements such as switches. Load balancing only "
       "applies to symmetric multipath devices or to the ports in "
       "SCSITargetPortGroups in active access state. \n"
       "A driver may support different algorithms for load balancing. "
       "A few common algorithms are listed. Algorithms for specific "
       "device models and software vendor specific algorithms are also "
       "accommodated. \n"
       "\n"
       "An instance of this capabilities class MUST be instantiated "
       "whenever SCSIPathConfigurationService is instantiated and they "
       "MUST be assocaited one to one using ElementCapabilities. "
       "Multiple instances of the service/acapabilities pair MAY exist "
       "if multiple multipath drivers are installed. Each "
       "LogicalDevice subclass served by the underlying multipath "
       "driver is associated to the associated Service instance via "
       "ServiceAvailableToELement." )]
class CIM_SCSIMultipathConfigurationCapabilities : CIM_Capabilities {

      [Description ( 
          "The load balance types supported by the driver for all "
          "logical units on a target device. If \'Product "
          "Specified\' is included, one or more instances of "
          "CIM_Product must be aggregated to the capabilities "
          "instance via ConcreteComponent. Each Product instance "
          "provides the SCSI Vendor, Product, and Revision ID of a "
          "supported product." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7" }, 
       Values { "Unknown", "Other", "No Load Balancing", 
          "Round Robin", "Least Blocks", "Least IO", "LBA Region", 
          "Product Specific" }, 
       ArrayType ( "Indexed" ), 
       MappingStrings { "MP_API.SNIA|MP_LOAD_BALANCE_TYPE" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.OtherSupportedLoadBalanceAlgorithmNames", 
          "CIM_SCSIMultipathConfigurationCapabilities.OtherSupportedLoadBalanceVendorNames" }]
   uint16 SupportedLoadBalanceTypes[];

      [Description ( 
          "When the corresponding array entry in "
          "SupportedLoadBalanceTypes[] is \'Other\', this entry "
          "provides a string describing the load balancing "
          "algorithm. When the corresponding array entry in "
          "SupportedLoadBalanceTypes[] is \'Product Specific\', "
          "this entry provides a string specifying the SCSI "
          "vendor/product/revision and must be formatted as exactly "
          "28 ASCII characters - 8 for vendor, 16 for product, and "
          "4 for revision (see SCSI SPC Inquiry response)" ), 
       ArrayType ( "Indexed" ), 
       MappingStrings { "SPC.INCITS-T10 |Standard Inquiry Response", 
          "MP_API.SNIA|MP_LOAD_BALANCE_TYPE", 
          "MP_API.SNIA|MP_DEVICE_PRODUCT_PROPERTIES" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.SupportedLoadBalanceTypes", 
          "CIM_SCSIMultipathConfigurationCapabilities.OtherSupportedLoadBalanceVendorNames" }]
   string OtherSupportedLoadBalanceAlgorithmNames[];

      [Description ( 
          "When the corresponding array entry in "
          "SupportedLoadBalanceTypes[] is \'Other\', this entry "
          "provides a string describing the vendor associated with "
          "the load balancing algorithm." ), 
       ArrayType ( "Indexed" ), 
       MappingStrings { "MP_API.SNIA|MP_LOAD_BALANCE_TYPE" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.SupportedLoadBalanceTypes", 
          "CIM_SCSIMultipathConfigurationCapabilities.OtherSupportedLoadBalanceAlgorithmNames" }]
   string OtherSupportedLoadBalanceVendorNames[];

      [Description ( 
          "The capability of the driver to support the SetTPGAccess "
          "method. True if the implementation supports activating "
          "target port groups." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|canSetTPGAccess" }, 
       ModelCorrespondence { 
          "CIM_SCSIPathConfigurationService.SetTPGAccess" }]
   boolean CanSetTPGAccess = false;

      [Description ( 
          "The capability of the driver to support the "
          "SetOverridePath and CancelOverridePaths methods. True if "
          "the implementation supports path overrides." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|canOverridePaths" }, 
       ModelCorrespondence { 
          "CIM_SCSIPathConfigurationService.SetOverridePath" }]
   boolean CanOverridePaths = false;

      [Description ( 
          "False if the MP drivers assure only a single device file "
          "name (e.g. /dev/dsk/...) exists for each MP device. True "
          "if the implementation exposes (or leaves exposed) device "
          "files for the individual paths encapsulated by the "
          "multipath device file. This is typically true for MP "
          "drivers that sit near the top of the driver stack and "
          "false for transport drivers at the bottom of the stack." ), 
       MappingStrings { 
          "MP_API.SNIA|Plugin Properties|exposesPathDeviceFiles" }]
   boolean ExposesPathDeviceFiles;

      [Description ( 
          "A string representing the primary file names the driver "
          "uses for multipath logical units, if those filenames do "
          "not match the names in Logical Unit osDeviceName as "
          "documented in Appendix A of the SNIA MP API "
          "specification. The name is expressing in the following "
          "format: \n"
          "\'*\' represents one or more alphanumeric characters \n"
          "\'#\' represents a string of consecutive digits \n"
          "\'%\' represents a string of hexadecimal digits \n"
          "backslash is an escape character for literal "
          "presentation of *, #, or %. Any other character is "
          "interpreted literally. For example, \'/dev/vx/dmp/*\'. "
          "If the multipath driver creates multipath logical unit "
          "device file names in the same namespace as the OS then "
          "this property should be left null." ), 
       MaxLen ( 256 ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|deviceNameFilespace" }]
   string DeviceNameFilespace;

      [Description ( 
          "True if the only supported device types are those "
          "described in aggregated CIM_Product instances as "
          "described in the description of "
          "SupportedLoadBalanceTypes." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|deviceNameFilespace" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.SupportedLoadBalanceTypes" }]
   boolean OnlySupportsSpecifiedProducts = false;

      [Description ( 
          "Describes the range of administer settable path weights "
          "supported by the driver. A driver with no path "
          "preference capabilities should set this property to "
          "zero. A driver with the ability to enable/disable paths "
          "should set this property to 1. Drivers with more weight "
          "settings can set the property appropriately." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|maximumWeight" }]
   uint32 MaximumWeight;

      [Description ( 
          "Specifies whether the implementation supports "
          "auto-failback (to re-enable paths that revert to a good "
          "state) at the plugin level, the multipath logical unit "
          "level, both levels or whether auto-failback is "
          "unsupported." ), 
       ValueMap { "0", "2", "3", "4", "5" }, 
       Values { "Unknown", "No Autofailback support", 
          "Autofailback support service-wide", 
          "Autofailback support per logical unit", 
          "Autofailback support per service or logical unit" }, 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|autofailbackSupport" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.AutofailbackEnabled", 
          "CIM_SCSIMultipathSettings.AutofailbackEnabled" }]
   uint16 AutofailbackSupport;

      [Description ( 
          "A Boolean indicating that autofailback is enabled to all "
          "logical units associated to the "
          "CIM_SCSIPathConfigurationService associated with this "
          "capabilities instance (unless overridden by "
          "CIM_SCSIMultipathSettings AutoFailbackEnabled." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|autoFailbackEnabled" }, 
       ModelCorrespondence { 
          "CIM_SCSIMultipathConfigurationCapabilities.AutofailbackSupport", 
          "CIM_SCSIMultipathSettings.AutofailbackEnabled" }]
   boolean AutoFailbackEnabled;

      [Description ( 
          "The maximum polling rate (in seconds) supported by the "
          "driver. A value of zero indicates the driver/plugin does "
          "not support polling. This maximum applies to both "
          "BadPathPollingRate and InactivePathPollingRate." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|pollingRateMax" }]
   uint32 PollingRateMax;

      [Write, Description ( 
          "The current rate in seconds. Only valid when "
          "pollingRateMax is greater than 0 and canAutoFailback are "
          "true." ), 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|currentPollingRate" }]
   uint32 CurrentPollingRate;

      [Write, Description ( 
          "The load balance types supported by the driver if not "
          "overridden by an administrative action." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6" }, 
       Values { "Unknown", "Other", "No Load Balancing", 
          "Round Robin", "Least Blocks", "Least IO", 
          "Product Specific" }, 
       MappingStrings { 
          "MP_API.SNIA|MP_PLUGIN_PROPERTIES|defaultLoadBalanceType" }]
   uint16 DefaultLoadBalanceType;


};
