// ===================================================================
// Title:  Device Storage Name Binding
// $State: Exp $
// $Date: 2004/08/15 05:55:36 $
// $Source: /cvsroot/wbemservices/open/mof/dmtf/2.9/Device_StorageNameBinding.mof,v $
// $Revision: 1.1 $
// ===================================================================
//#pragma inLine ("Includes/copyright.inc")
// Copyright 1998-2004 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.
//#pragma inLine
// ===================================================================
// Description: The Device Model extends the management concepts that
//              are related to LogicalDevices. This file defines
//              a model for support for FC HBA Persistent Binding
//              and similar iSCSI  functions
// 
//              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.9 Preliminary
// CR1348 - Add support for FC HBA Persistent Binding and similar iSCSI
//  functions
// 
// ==================================================================

#pragma locale ("en_US")

// ==================================================================
// StorageNameBinding
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "StorageNameBinding instances represent bindings between "
       "transport-specific devices names and either OS device "
       "names/addresses or virtual initiator names. Bindings are "
       "defined by administrators and are persistent. The binding "
       "defines names of other elements that may or may not correlate "
       "to other CIM classes. It must be possible to create these "
       "bindings in cases when CIM instances for these other elements "
       "are not available. This may be because the elements are "
       "temporarily unavailable or because the elements are managed by "
       "some other providers or because the binding represents a "
       "'black listed' device name. A SettingData models the "
       "persistence of the binding in the absence of the elements. In "
       "the descriptions below, FC API refers to the FC API as "
       "specified in the t11_5 workgroup, and IMA refers to the iSCSI "
       "Management API as specified in the SNIA IPS Management "
       "workgroup. \n"
       "\n"
       "Three types of bindings are modeled: \n"
       "- OSStorageNameBinding models a binding from a storage "
       "elements to OS device names or addresses (as used in FC API "
       "PersistentBindings and IMA ExposeLun. One side of the binding "
       "represents a device (as viewed from the system scoping the "
       "binding) and the name exposed by the scoping system. For "
       "example, Fibre Channel HBAs support binding of Fibre Channel "
       "port names (and optionally a SCSI logical unit identifier) to "
       "OS device names. Each time the system or device is stopped and "
       "restated, the same OS device name is bound to the device. \n"
       "- StorageBridgeNameBinding models gateways where a name valid "
       "for one transport is mapped to a name valid for a different "
       "transport. This binding is used in bridge devices that allow "
       "Infiniband or iSCSI host adapters to connect to Fibre Channel "
       "devices. \n"
       "- The third type of binding is similar to the first, but no OS "
       "device name or address is provided, the OS uses its usual "
       "rules to assign names. For this type of binding, the "
       "superclass can be used.")]
class CIM_StorageNameBinding : CIM_SettingData {

      [Description (
          "BindingType describes the type of binding expressed by the "
          "setting data instance. It also defines the interpretation "
          "of TargetName. \n"
          "BindToFcDID, FcApiBindToWWPN, and FcApiBindToWWNW represent "
          "bindings in a fibre channel HBA to a D_ID (destination ID), "
          "WWPN (World Wide Port Name), or WWNW (World Wide Node "
          "Name). \n"
          "LUID is a binding based on a SCSI Inquiry VPD page 83, "
          "Association 0 logical unit identifier. \n"
          "'iSCSI Name' represents a binding to an iSCSI target as "
          "used in IMA for Static Configuration (if "
          "TargetLUNumberValid is false) or an IMA (Un)Exposed LUN "
          "record (if TargetLUNumberValid is true). \n"
          "'iSCSI Network Address' represents a binding to an iSCSI "
          "network entity. It is formatted as a host name or IP "
          "address optionally followed by a plus ('+') and a TCP port "
          "number. If '+port<#>' is omitted, the iSCSI default (3260) "
          "is used. \n"
          "'Bridge Binding' represents a binding between initiator IDs "
          "in a transport bridge device."), 
       ValueMap { "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "FcApiBindToDID", "FcApiBindToWWPN", "FcApiBindToWWNN",
          "BindToLUID", "iSCSI Target Name", "iSCSI Network Address",
          "Bridge Binding" }, 
       MappingStrings { "FC API.INCITS-T11| HBA_BIND_TYPE" }]
   uint16 BindingType;

      [Description (
          "If true, then all target logical units are bound to the OS. "
          "Not valid to set this if BindingType is BindToLUID."), 
       MappingStrings { "FC API.INCITS-T11| HBA_BIND_TARGETS" }, 
       ModelCorrespondence { 
          "CIM_StorageNameBinding.LogicalUnitNumber",
          "CIM_StorageNameBinding.BindingType" }]
   boolean BindAllLogicalUnits = false;

      [Description (
          "If false (the default), the specified target unit(s) is "
          "exposed to the OS. If true, the OS-related properties are "
          "ignored, and the target related properties identify target "
          "unit(s) that are hidden from the OS. In most cases, this is "
          "false.")]
   boolean Hide = false;

      [Description (
          "The name (dependent on BindingType) identifying the SCSI "
          "target. If BindingType is FcApiBindToDID, TargetName holds "
          "a hexadecimal-encoded representation of the 32-bit D_ID \n"
          "and corresponds to FC API HBA_FCPID.FcId. \n"
          "If BindingType is FcApiBindToWWPN or FcApiBindToWWNN, "
          "TargetName holds a hexadecimal-encoded representation of "
          "the 64-bit FC Port or Node World Wide Name. \n"
          "If BindingType is BindToLUID, TargetName holds a SCSI "
          "Logical Unit Name from Inquiry VPD page 83, Association 0 "
          "as defined in SCSI Primary Commands. If the identifier "
          "descriptor (in the SCSI response) has Code Set Binary, then "
          "TargetName is its hexadecimal-encoded value."), 
       MappingStrings { "FC API.INCITS-T11| HBA_FcpId | FcId",
          "FC API.INCITS-T11| HBA_FcpId | NodeWWN",
          "FC API.INCITS-T11| HBA_FcpId | PortWWN",
          "FC API.INCITS-T11| HBA_FcpId | FcId",
          "FC API.INCITS-T11| HBA_LUID" }]
   String TargetName;

      [Description (
          "A string containing a hexadecimal-encoded representation of "
          "the 64-bit SCSI Logical Unit Number in the format described "
          "in the T10 SCSI Architecture Model specification. This "
          "format consists of four 2-byte fields. In most cases, the "
          "human-oriented logical unit number will be in the high- "
          "order two bytes and the low-order six bytes will be zero. "
          "This property is only valid if BindAllLogicalUnits is false "
          "and BindingType is not ."), 
       MappingStrings { "FC API.INCITS-T11| HBA_FcpId | FcpLun" }, 
       ModelCorrespondence { 
          "CIM_StorageNameBinding.BindAllLogicalUnits" }]
   string LogicalUnitNumber;

      [Description (
          "A status associated with the previous attempt to enable the "
          "binding - this may be set many times after the binding is "
          "created. The first subset is defined by FC API: \n"
          "BadOSBus - request included a bad OS SCSI bus number \n"
          "BadOSTarget - request included a bad SCSI target number \n"
          "BadOSLun - request included a bad OS SCSI logical unit "
          "number \n"
          "OSAddressAlreadyBound - request included an OS SCSI ID that "
          "was already bound \n"
          "BadFcid - request included a bad or unlocatable FCP Target "
          "FCID \n"
          "BadWWNN - request included a bad FCP Target Node_Name \n"
          "BadWWPN - request included a bad FCP Target Port Name \n"
          "BadTargetLU - request included an FCP Logical Unit Number "
          "not defined by the identified Target. \n"
          "BadLUID - request included an undefined in inaccessible "
          "LUID."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
          "10" }, 
       Values { "Unknown", "Other", "OK", "BadOSBus", "BadOSTarget",
          "BadOSLun", "BadFcId", "BadWWNN", "BadWWPN", "BadTargetLU",
          "BadLUID" }, 
       MappingStrings { "FC API.INCITS-T11|HBA_FCPBINDING2|Status" }, 
       ModelCorrespondence { "CIM_StorageNameBinding.OtherStatus" }]
   uint32 Status;

      [Description (
          "A string describing the status if Status is 'Other'."), 
       ModelCorrespondence { "CIM_StorageNameBinding.Status" }]
   string OtherStatus;
};


// ==================================================================
// OSStorageNameBinding
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "OSStorageNameBinding represent a binding between a "
       "transport-specific name and an OS device name or address. "
       "Bindings are defined by administrators and are persistent.")]
class CIM_OSStorageNameBinding : CIM_StorageNameBinding {

      [Override ( "BindingType" ), Description (
          "OSStorageNameBinding only allows a subset of binding types."), 
       ValueMap { "2", "3", "4", "5" }, 
       Values { "FcApiBindToDID", "FcApiBindToWWPN", "FcApiBindToWWNN",
          "BindToLUID" }, 
       MappingStrings { "FC API.INCITS-T11| HBA_BIND_TYPE" }]
   uint16 BindingType;

      [Description (
          "A device file name valid for the current operating system. "
          "It should follow the OS device naming guidelines in the FC "
          "API or IMA specification."), 
       MappingStrings { "FC API.INCITS-T11|HBA_SCSIID|OSDeviceName",
          "IMA.SNIA|IMA_LU_PROPERTIES|osDeviceName" }]
   string OSDeviceName;

      [Description (
          "A flag indicating whether OSBusNumber, OSTargetNumber, and "
          "OSLUN prosperities are valid."), 
       MappingStrings { "IMA.SNIA|IMA_LU_PROPERTIES|osParallelIdsValid" 
          }]
   boolean OSAddressesValid = false;

      [Description (
          "The Bus Number as used in some OSes whether Bus, Target, "
          "and LU number together form a unique internal address."), 
       MappingStrings { "FC API.INCITS-T11|HBA_SCSIID|SCSIBusNumber",
          "IMA.SNIA|IMA_LU_PROPERTIES|osBusNumber" }]
   uint32 OSBusNumber;

      [Description (
          "The Target Number as used in some OSes whether Bus, Target, "
          "and LU number together form a unique internal address."), 
       MappingStrings { "FC " 
          "API.INCITS-T11|HBA_SCSIID|SCSITargetNumber",
          "IMA.SNIA|IMA_LU_PROPERTIES|osTargetId" }]
   uint32 OSTargetNumber;

      [Description (
          "The Logical Unit Number as used in some OSes where Bus, "
          "Target, and LU number together form a unique internal "
          "address."), 
       MappingStrings { "FC API.INCITS-T11|HBA_SCSIID|SCSIOSLUN",
          "IMA.SNIA|IMA_LU_PROPERTIES|osLun" }]
   uint32 OSLUN;

      [Description (
          "The type of the ports in LocalPortName."), 
       ValueMap { "2", "3" }, 
       Values { "FC Port WWN", "iSCSI Name" }]
   uint16 LocalPortNameType;

      [Description (
          "A list of port names on the current system associated with "
          "this persistent binding."), 
       MappingStrings { "FC API.INCITS-T11|hbaPortWWN" }]
   string LocalPortNames[];

};

// ==================================================================
// StorageBridgeNameBinding
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "StorageBridgeBinding represents a binding between two "
       "transport-specific initiator port names. One name is "
       "associated with the initiator port in the format appropriate "
       "for the port type. The other name is an administratively "
       "assigned name with a format appropriate for transport on the "
       "target side of the bridge. This virtual initiator port name is "
       "used by the bridge when it communicates with targets from the "
       "bound initiator. This virtual name is needed for target device "
       "management functions that use initiator port names, such as "
       "LUN masking and mapping. \n"
       "For example, an Infiniband/FibreChannel bridge support "
       "Infiniband initiator ports and allows the administrator to "
       "assign a Fibre Channel Port WWN (AssignedPortName) to each "
       "Infiniband initiator (InitiatorPortName). \n"
       "The TargetName property from the superclass may be used to "
       "restrict this binding to a specific target. If TargetPort is "
       "left null, the binding affects all targets seen by the bridge.")]
class CIM_StorageBridgeNameBinding : CIM_StorageNameBinding {

      [Override ( "BindingType" ), Description (
          "StorageBridgeNameBinding only allows one binding type."), 
       ValueMap { "8" }, 
       Values { "Bridge Binding" }]
   uint16 BindingType;

      [Description (
          "The name of the initiator port using the name Type of the "
          "actual transport."), 
       MappingStrings { "FC API.INCITS-T11|Bind_SRP_Initiator|SRP " 
          "Initiator Port Identifier" }, 
       ModelCorrespondence { 
          "CIM_StorageBridgeNameBinding.InitiatorPortNameType" }]
   string InitiatorPortName;

      [Description (
          "The name of the initiator port using the name Type of the "
          "actual transport."), 
       ValueMap { "2", "3", "4" }, 
       Values { "FibreChannel Port WWN", "SRP Port Identifier",
          "iSCSI Name" }, 
       ModelCorrespondence { 
          "CIM_StorageBridgeNameBinding.InitiatorPortName" }]
   uint16 InitiatorPortNameType;

      [Description (
          "The name of the initiator port assigned by the "
          "administrator using the name type of the target-side "
          "transport."), 
       MappingStrings { "FC API.INCITS-T11|Bind_SRP_Initiator|FC_Port " 
          "Name Identifier" }, 
       ModelCorrespondence { 
          "CIM_StorageBridgeNameBinding.AssignedPortNameType" }]
   string AssignedPortName;

      [Description (
          "The name of the initiator port using the name Type of the "
          "actual transport."), 
       ValueMap { "2", "3", "4" }, 
       Values { "FibreChannel Port WWN", "SRP Port Identifier",
          "iSCSI Name" }, 
       ModelCorrespondence { 
          "CIM_StorageBridgeNameBinding.AssignedPortName" }]
   uint16 AssignedPortNameType;

};

// ==================================================================
// StorageNameBindingService
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "Provides functions needed for name binding.")]
class CIM_StorageNameBindingService : CIM_Service {

      [Description (
          "This method requests that the driver create a name binding "
          "from a target (and option logical unit) and lets the OS "
          "assign the name."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "..", "32768..65535" }, 
       Values { "Success", "Not Supported", "Unknown", "Timeout",
          "Failed", "Invalid Parameter", "DMTF Reserved",
          "Vendor Specific" }]
   uint32 CreateStorageNameBinding ( 
         [IN, Description (
             "The value to assign to BindingType."), 
          ValueMap { "2", "3", "4", "5", "6", "7" }, 
          Values { "FcApiBindToDID", "FcApiBindToWWPN",
             "FcApiBindToWWNN", "BindToLUID", "iSCSI Target Name",
             "iSCSI Network Address" }]
      uint16 BindingType,
      
         [IN, Description (
             "The value to assign to BindAllLogicalUnits.")]
      boolean BindAllLogicalUnits,
      
         [IN, Description (
             "The value to assign to Hide.")]
      boolean Hide,
      
         [IN, Description (
             "The value to assign to TargetName.")]
      string TargetName,
      
         [IN, Description (
             "The value to assign to LogicalUnitNumber.")]
      string LogicalUnitNumber,
      
         [IN ( false ), OUT, Description (
             "A reference to the created name binding instance.")]
      CIM_StorageNameBinding REF Binding); 

      [Description (
          "This method requests that the driver create a name binding "
          "from a target (and option logical unit) to a specified OS "
          "Device Name or addresses."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "..", "32768..65535" }, 
       Values { "Success", "Not Supported", "Unknown", "Timeout",
          "Failed", "Invalid Parameter", "DMTF Reserved",
          "Vendor Specific" }]
   uint32 CreateOSStorageNameBinding ( 
         [IN, Description (
             "The value to assign to BindingType."), 
          ValueMap { "2", "3", "4", "5", "6", "7" }, 
          Values { "FcApiBindToDID", "FcApiBindToWWPN",
             "FcApiBindToWWNN", "BindToLUID", "iSCSI Target Name",
             "iSCSI Network Address" }]
      uint16 BindingType,
      
         [IN, Description (
             "The value to assign to BindAllLogicalUnits.")]
      boolean BindAllLogicalUnits,
      
         [IN, Description (
             "The value to assign to Hide.")]
      boolean Hide,
      
         [IN, Description (
             "The value to assign to TargetName.")]
      string TargetName,
      
         [IN, Description (
             "The value to assign to LogicalUnitNumber.")]
      string LogicalUnitNumber,
      
         [IN, Description (
             "The value to assign to OSDeviceName.")]
      string OSDeviceName,
      
         [IN, Description (
             "The value to assign to OSAddressesValid.")]
      boolean OSAddressesValid,
      
         [IN, Description (
             "The value to assign to OSBusNumber.")]
      uint32 OSBusNumber,
      
         [IN, Description (
             "The value to assign to OSTargetNumber.")]
      uint32 OSTargetNumber,
      
         [IN, Description (
             "The value to assign to OSLUN.")]
      uint32 OSLUN,
      
         [IN, Description (
             "The type of the ports in LocalPortNames."), 
          ValueMap { "2", "3" }, 
          Values { "FC Port WWN", "iSCSI Name" }]
      uint16 LocalPortNameType,
      
         [IN, Description (
             "The values to assign to LocalPortNames.")]
      string LocalPortNames[],
      
         [IN ( false ), OUT, Description (
             "A reference to the created name binding instance.")]
      CIM_StorageNameBinding REF Binding); 

      [Description (
          "This method requests that the driver create a name binding "
          "between real and virtual initiator names on a bridge."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "..", "32768..65535" }, 
       Values { "Success", "Not Supported", "Unknown", "Timeout",
          "Failed", "Invalid Parameter", "DMTF Reserved",
          "Vendor Specific" }]
   uint32 CreateStorageBridgeNameBinding ( 
         [IN, Description (
             "The value to assign to BindingType."), 
          ValueMap { "2", "3", "4", "5", "6", "7" }, 
          Values { "FcApiBindToDID", "FcApiBindToWWPN",
             "FcApiBindToWWNN", "BindToLUID", "iSCSI Target Name",
             "iSCSI Network Address" }]
      uint16 BindingType,
      
         [IN, Description (
             "The value to assign to BindAllLogicalUnits.")]
      boolean BindAllLogicalUnits,
      
         [IN, Description (
             "The value to assign to Hide.")]
      boolean Hide,
      
         [IN, Description (
             "The value to assign to TargetName.")]
      string TargetName,
      
         [IN, Description (
             "The value to assign to InitiatorPortName.")]
      string InitiatorPortName,
      
         [IN, Description (
             "The value to assign to InitiatorPortNameType."), 
          ValueMap { "2", "3", "4" }, 
          Values { "FibreChannel Port WWN", "SRP Port Identifier",
             "iSCSI Name" }]
      uint16 InitiatorPortNameType,
      
         [IN, Description (
             "The value to assign to AssignedPortName.")]
      string AssignedPortName,
      
         [IN, Description (
             "The value to assign to AssignedPortNameType."), 
          ValueMap { "2", "3", "4" }, 
          Values { "FibreChannel Port WWN", "SRP Port Identifier",
             "iSCSI Name" }]
      uint16 AssignedPortNameType,
      
         [IN ( false ), OUT, Description (
             "A reference to the created name binding instance.")]
      CIM_StorageNameBinding REF Binding); 

};

// ==================================================================
// StorageNameBindingCapabilities
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "StorageNameBindingCapabilities describes the current "
       "implementation's support for optional behavior.")]
class CIM_StorageNameBindingCapabilities : CIM_Capabilities {

      [Description (
          "The type of bindings supported."), 
       ValueMap { "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "FcApiBindToDID", "FcApiBindToWWPN", "FcApiBindToWWNN",
          "BindToLUID", "iSCSI Target Name", "iSCSI Network Address",
          "Bridge Binding" }, 
       MappingStrings { "FC API.INCITS-T11| HBA_BIND_TYPE" }]
   uint16 ValidBindingTypes [];

      [Description (
          "Set to true if the implementation requires the associated "
          "software element be reset. In the case of drivers, this "
          "requires a system reboot. Set to false if the "
          "implementation can activate bindings without a reset.")]
   boolean ActivateBindingRequiresReset;

      [Description (
          "Set to true if the implementation supports "
          "OSStorageNameBinding and allows overriding OS "
          "bus/target/LUN numbers. Set to false if not "
          "OSStorageNameBinding or if overriding OS address is not "
          "supported."), 
       MappingStrings { "FC API.INCITS-T11|HBA_CAN_BIND_ANY_LUNS" }, 
       ModelCorrespondence { "CIM_OSStorageNameBinding.OSBusNumber",
          "CIM_OSStorageNameBinding.OSTargetNumber",
          "CIM_OSStorageNameBinding.OSLUN" }]
   boolean CanMapAddresses;

      [Description (
          "Set to true if the implementation supports "
          "OSStorageNameBinding and supports binding all logical units "
          "from a target to the OS. Set to false if not "
          "OSStorageNameBinding or if the implementation requires "
          "binding each logical unit independently."), 
       MappingStrings { "FC API.INCITS-T11|HBA_CAN_BIND_TARGETS" }]
   boolean CanBindAllLuns;

      [Description (
          "Set to true if the implementation supports auto-discovery "
          "and automatic name binding; create binding methods in "
          "StorageBindingService are not supported. Set to false "
          "indicates that create binding methods are supported."), 
       MappingStrings { "FC API.INCITS-T11|HBA_CAN_BIND_AUTOMAP" }]
   boolean AutoDiscovery;

      [Description (
          "Set to true if the implementation supports "
          "OSStorageNameBinding method and supports changing "
          "OSDeviceName by specifying a non-null OSDeviceName "
          "parameter to CreateOSStorageNameBinding.")]
   boolean CanSetOSDeviceName;

};

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