// ===================================================================
// Title:  Network iSCSI
// $State: Exp $
// $Date: 2004/08/15 05:55:39 $
// $Source: /cvsroot/wbemservices/open/mof/dmtf/2.9/Network_iSCSI.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 iSCSI Model defines the classes related to
// management
//              of iSCSI objects.
// 
//              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 Company Review
// CR1465 - Corrected compile errors and warnings.  System_FileServices.mof
//          was moved to CIM_Schema.mof to resolve compile order issues.
//
// Change Log for v2.9 Preliminary, initial release
//
// ==================================================================
// 
// ===================================================================

#pragma Locale ("en_US")



// ==================================================================
// iSCSICapabilities
// ==================================================================

   [Experimental, Version ( "2.8.1000" ), Description (
       "The capabilites for an iSCSI Network Entity. An instance of "
       "this class will be associated by ElementCapabilities to a "
       "instance of ComputerSystem that represents the Network Entity. "
       "These capability properties are associated to a Network "
       "Entity/ComputerSystem since they affect all login negotiations "
       "on all iSCSI ProtocolEndpoints aggregated to the system.")]
class CIM_iSCSICapabilities : CIM_Capabilities {

      [Description (
          "The minimum version number of the iSCSI specification such "
          "that this iSCSI instance supports this minimum value, the "
          "maximum value indicated by the corresponding property "
          "MaximumSpecificationVersionSupported, and all versions in "
          "between."), 
       MinValue ( 0 ), MaxValue ( 255 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiInstVersionMin" }, 
       ModelCorrespondence { 
          "CIM_iSCSICapabilities.MaximumSpecificationVersionSupported",
          "CIM_iSCSIConnection.ActiveiSCSIVersion" }]
   uint8 MinimumSpecificationVersionSupported;

      [Description (
          "The maximum version number of the iSCSI specification such "
          "that this iSCSI instance supports this maximum value, the "
          "minimum value indicated by the corresponding property "
          "MinimumSpecificationVersionSupported, and all versions in "
          "between."), 
       MinValue ( 0 ), MaxValue ( 2555 ), 
       MappingStrings { "MIB.IETF|ISCSI-MIB.iscsiInstVersionMax" }, 
       ModelCorrespondence { 
          "CIM_iSCSICapabilities.MinimumSpecificationVersionSupported",
          "CIM_iSCSIConnection.ActiveiSCSIVersion" }]
   uint8 MaximumSpecificationVersionSupported;

      [Description (
          "An array containing a list of authentication methods "
          "supported by this Network Entity."), 
       ValueMap { "2", "3", "4", "5" }, 
       Values { "(None", "SRP", "CHAP", "Kerberos" }, 
       MappingStrings { "MIB.IETF|IPS-AUTH-MIB.ipsAuthCredAuthMethod" 
          }, ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_iSCSISession.AuthenticationMethodUsed" }]
   uint16 AuthenticationMethodsSupported[];

};


// ==================================================================
// iSCSISessionSettings
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "The default negotiation settings for an iSCSI Session. These "
       "properties are used as the starting position for login "
       "negotiations between initiator and target nodes. The "
       "properties describing the resulting outcome of the login "
       "negotiation are in the iSCSISession class. Depending on a "
       "given implementation an instance of iSCSISessionSettings will "
       "be associated by ElementSettingData to one or more instances "
       "of iSCSIProtocolEndpoint, SCSIProtocolController, or "
       "ComputerSystem.")]
class CIM_iSCSISessionSettings : CIM_SettingData {

      [Write, Description (
          "The maximum number of connections allowed in each session "
          "to and/or from this node."), 
       MinValue ( 1 ), MaxValue ( 65535 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeMaxConnections" }, 
       ModelCorrespondence { "CIM_iSCSISession.CurrentConnections" }]
   uint32 MaxConnectionsPerSession = 1;

      [Write, Description (
          "This property indicates the InitialR2T preference for this "
          "node: true = YES, false = will try to negotiate NO, will "
          "accept YES."), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeInitialR2T" }, 
       ModelCorrespondence { "CIM_iSCSISession.InitialR2T" }]
   boolean InitialR2TPreference = true;

      [Write, Description (
          "This property indicates ImmediateData preference for this "
          "node True = YES (but will accept NO), False = NO."), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeImmediateData" }, 
       ModelCorrespondence { "CIM_iSCSISession.ImmediateData" }]
   boolean ImmediateDataPreference = true;

      [Write, Description (
          "Maximum number of outstanding R2Ts allowed per ISCSI task."), 
       MinValue ( 1 ), MaxValue ( 65535 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeMaxOutstandingR2T" 
          }, 
       ModelCorrespondence { "CIM_iSCSISession.MaxOutstandingR2T" }]
   uint32 MaxOutstandingR2T = 1;

      [Write, Description (
          "The maximum length (bytes) supported for unsolicited data "
          "to/from this node."), 
       Units ( "Bytes" ), MinValue ( 512 ), MaxValue ( 16777215 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeFirstBurstLength" 
          }, 
       ModelCorrespondence { 
          "CIM_iSCSISession.MaxUnsolicitedFirstDataBurstLength" }]
   uint32 MaxUnsolicitedFirstDataBurstLength = 65536;

      [Write, Description (
          "The maximum number of bytes which can be sent within a "
          "single sequence of Data-In or Data-Out PDUs."), 
       Units ( "Bytes" ), MinValue ( 512 ), MaxValue ( 16777215 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeMaxBurstLength" }, 
       ModelCorrespondence { "CIM_iSCSISession.MaxDataBurstLength" }]
   uint32 MaxDataBurstLength = 262144;

      [Write, Description (
          "The DataSequenceInOrder preference of this node. False "
          "(=No) indicates that iSCSI data PDU sequences MAY be "
          "transferred in any order. True (=Yes) indicates that data "
          "PDU sequences MUST be transferred using continuously "
          "increasing offsets, except during error recovery."), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiNodeDataSequenceInOrder" }, 
       ModelCorrespondence { "CIM_iSCSISession.DataSequenceInOrder" }]
   boolean DataSequenceInOrderPreference = true;

      [Write, Description (
          "The DataPDUInOrder preference of this node. False (=No) "
          "indicates that iSCSI data PDUs within sequences MAY be in "
          "any order. True (=Yes) indicates that data PDUs within "
          "sequences MUST be at continuously increasing addresses, "
          "with no gaps or overlay between PDUs."), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeDataPDUInOrder" }, 
       ModelCorrespondence { "CIM_iSCSISession.DataPDUInOrder" }]
   boolean DataPDUInOrderPreference = true;

      [Write, Description (
          "The DefaultTime2Wait preference of this node. This is the "
          "minimum time, in seconds, to wait before attempting an "
          "explicit/implicit logout or active iSCSI task reassignment "
          "after an unexpected connection termination or a connection "
          "reset."), 
       Units ( "Seconds" ), MinValue ( 0 ), MaxValue ( 3600 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiNodeDefaultTime2Wait" 
          }]
   uint32 DefaultTimeToWaitPreference = 2;

      [Write, Description (
          "The DefaultTime2Retain preference of this node. This is the "
          "maximum time, in seconds after an initial wait (Time2Wait), "
          "before which an active iSCSI task reassignment is still "
          "possible after an unexpected connection termination or a "
          "connection reset."), 
       Units ( "Seconds" ), MinValue ( 0 ), MaxValue ( 3600 ), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiNodeDefaultTime2Retain" }]
   uint32 DefaultTimeToRetainPreference = 20;

      [Write, Description (
          "The ErrorRecoveryLevel preference of this node. Currently, "
          "only 0-2 are valid. This is designed to accommodate future "
          "error recover levels. \n"
          "Higher error recovery levels imply support in addition to "
          "support for the lower error level functions. In other "
          "words, error level 2 implies support for levels 0-1, since "
          "those functions are subsets of error level 2."), 
       MinValue ( 0 ), MaxValue ( 255 ), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiNodeErrorRecoveryLevel" }, 
       ModelCorrespondence { "CIM_iSCSISession.ErrorRecoveryLevel" }]
   uint32 ErrorRecoveryLevelPreference = 0;
};


// ==================================================================
// iSCSISessionStatistics
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "Traffic and error statistics for an iSCSI Session. An instance "
       "of this class will be associated by ElementStatisticalData to "
       "the instance of iSCSISession.")]
class CIM_iSCSISessionStatistics : CIM_StatisticalData {

      [Description (
          "The count of Command PDUs transferred on this session."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiSsnCmdPDUs" }]
   uint64 CommandPDUsTransferred;

      [Description (
          "The count of Response PDUs transferred on this session."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiSsnRspPDUs" }]
   uint64 ResponsePDUsTransferred;

      [Description (
          "The count of bytes(data octets) that were transmitted by "
          "the local iSCSI node on this session."), 
       Units ( "Bytes" ), Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiSsnTxDataOctets" }]
   uint64 BytesTransmitted;

      [Description (
          "The count of bytes(data octets) that were received by the "
          "local iSCSI node on this session."), 
       Units ( "Bytes" ), Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiSsnRxDataOctets" }]
   uint64 BytesReceived;

      [Description (
          "The count of PDUs which were received on the session and "
          "contained header or data digest errors."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiSsnDigestErrors" }]
   uint64 DigestErrors;

      [Description (
          "The count of connections within this session which have "
          "been terminated due to timeout."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiSsnCxnTimeoutErrors" }]
   uint64 ConnectionTimeoutErrors;
};


// ==================================================================
// iSCSIConnection
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "This class contains the attributes of and negotiated values "
       "for, an iSCSI Connection which is modeled as a subclass of "
       "NetworkPipe. The original settings that are a starting point "
       "for negotiation are found in the class "
       "iSCSIConnectionSettings.")]
class CIM_iSCSIConnection : CIM_NetworkPipe {

      [Description (
          "The iSCSI Connection ID for this connection."), 
       MinValue ( 1 ), MaxValue ( 65535 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiCxnCid" }]
   uint32 ConnectionID;

      [Description (
          "The maximum data payload size supported for command or data "
          "PDUs able to be received on this connection."), 
       Units ( "Bytes" ), MinValue ( 512 ), MaxValue ( 16777215 ), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiCxnMaxRecvDataSegLength" }, 
       ModelCorrespondence { 
          "CIM_iSCSIConnectionSettings.MaxReceiveDataSegmentLength" }]
   uint16 MaxReceiveDataSegmentLength;

      [Description (
          "The maximum data payload size supported for command or data "
          "PDUs to be sent on this connection."), 
       Units ( "Bytes" ), MinValue ( 512 ), MaxValue ( 16777215 ), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiCxnMaxXmitDataSegLength" }]
   uint16 MaxTransmitDataSegmentLength;

      [Description (
          "This property identifies the iSCSI header digest scheme in "
          "use within this connection."), 
       ValueMap { "1", "2", "3" }, 
       Values { "Other", "No Digest", "CRC32C" }, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiCxnHeaderIntegrity" }, 
       ModelCorrespondence { 
          "CIM_iSCSIConnectionSettings.PrimaryHeaderDigestMethod",
          "CIM_iSCSIConnectionSettings.SecondaryHeaderDigestMethod",
          "CIM_iSCSIConnection.OtherHeaderDigestMethod" }]
   uint16 HeaderDigestMethod;

      [Description (
          "A string describing the Header Digest scheme in use when "
          "HeaderDigestMethod is equal to the value 1, \"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSIConnectionSettings.OtherPrimaryHeaderDigestMethod",
          "CIM_iSCSIConnectionSettings.OtherSecondaryHeaderDigestMethod",
          "CIM_iSCSIConnection.HeaderDigestMethod" }]
   string OtherHeaderDigestMethod;

      [Description (
          "This property identifies the iSCSI data digest scheme in "
          "use within this connection."), 
       ValueMap { "1", "2", "3" }, 
       Values { "Other", "No Digest", "CRC32C" }, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiCxnDataIntegrity" }, 
       ModelCorrespondence { 
          "CIM_iSCSIConnectionSettings.PrimaryHeaderDigestMethod",
          "CIM_iSCSIConnectionSettings.SecondaryHeaderDigestMethod",
          "CIM_iSCSIConnection.OtherDataDigestMethod" }]
   uint16 DataDigestMethod;

      [Description (
          "A string describing the Data Digest scheme in use when "
          "DataDigestMethod is equal to the value 1, \"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSIConnectionSettings.OtherPrimaryDataDigestMethod",
          "CIM_iSCSIConnectionSettings.OtherSecondaryDataDigestMethod",
          "CIM_iSCSIConnection.DataDigestMethod" }]
   string OtherDataDigestMethod;

      [Description (
          "This property indicates whether or not this connection is "
          "receiving markers in in its incoming data stream."), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiCxnRecvMarker" }, 
       ModelCorrespondence { 
          "CIM_iSCSIConnectionSettings.RequestingMarkersOnReceive" }]
   boolean ReceivingMarkers;

      [Description (
          "This property indicates whether or not this connection is "
          "inserting markers in in its outgoing data stream."), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiCxnSendMarker" }]
   boolean SendingMarkers;

      [Description (
          "Active version number of the iSCSI specification negotiated "
          "on this connection."), 
       MinValue ( 0 ), MaxValue ( 255 ), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiCxnVersionActive" }, 
       ModelCorrespondence { 
          "CIM_iSCSICapabilities.MinimumSpecificationVersionSupported",
          "CIM_iSCSICapabilities.MaximumSpecificationVersionSupported" 
          }]
   boolean ActiveiSCSIVersion;
};


// ==================================================================
// iSCSIConnectionSettings
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "The settings for an iSCSI NetworkPortal that are the starting "
       "point for negotiation for connection establishment. An "
       "instance of this class will be associated by "
       "ElementSettingData to an instance of either "
       "TCPProtocolEndpoint (When the NetworkPortal is a target) or "
       "IPProtocolEndpoint (When the NetworkPortal is an initiator). "
       "The properties that reflect the actual outcome of the "
       "negotiation are found in the iSCSIConnection class.")]
class CIM_iSCSIConnectionSettings : CIM_SettingData {

      [Write, Description (
          "The maximum PDU length this portal can receive. This MAY be "
          "constrained by hardware characteristics and individual "
          "implementations MAY choose not to allow this property to be "
          "changed."), 
       Units ( "Bytes" ), MinValue ( 512 ), MaxValue ( 16777215 ), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiPortalMaxRecvDataSegLength" }, 
       ModelCorrespondence { 
          "CIM_iSCSIConnection.MaxReceiveDataSegmentLength" }]
   uint32 MaxReceiveDataSegmentLength = 8192;

      [Write, Description (
          "The preferred header digest for this portal."), 
       ValueMap { "1", "2", "3" }, 
       Values { "Other", "No Digest", "CRC32C" }, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiPortalPrimaryHdrDigest" }, 
       ModelCorrespondence { "CIM_iSCSIConnection.HeaderDigestMethod",
          "CIM_iSCSIConnectionSettings.OtherPrimaryHeaderDigestMethod" 
          }]
   uint16 PrimaryHeaderDigestMethod = 3;

      [Write, Description (
          "A string describing the preferred Header Digest method when "
          "PrimaryHeaderDigestMethod is equal to the value 1, "
          "\"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSIConnection.OtherHeaderDigestMethod",
          "CIM_iSCSIConnectionSettings.PrimaryHeaderDigestMethod" }]
   string OtherPrimaryHeaderDigestMethod;

      [Write, Description (
          "The preferred data digest method for this portal."), 
       ValueMap { "1", "2", "3" }, 
       Values { "Other", "No Digest", "CRC32C" }, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiPortalPrimaryDataDigest" }, 
       ModelCorrespondence { "CIM_iSCSIConnection.DataDigestMethod",
          "CIM_iSCSIConnectionSettings.OtherPrimaryDataDigestMethod" }]
   uint16 PrimaryDataDigestMethod = 3;

      [Write, Description (
          "A string describing the preferred Data Digest method when "
          "PrimaryDataDigestMethod is equal to the value 1, \"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSIConnection.OtherDataDigestMethod",
          "CIM_iSCSIConnectionSettings.PrimaryDataDigestMethod" }]
   string OtherPrimaryDataDigestMethod;

      [Write, Description (
          "An alternate header digest preference for this portal."), 
       ValueMap { "1", "2", "3" }, 
       Values { "Other", "No Digest", "CRC32C" }, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiPortalSecondaryHdrDigest" }, 
       ModelCorrespondence { "CIM_iSCSIConnection.HeaderDigestMethod",
          "CIM_iSCSIConnectionSettings.OtherSecondaryHeaderDigestMethod" 
          }]
   uint16 SecondaryHeaderDigestMethod = 2;

      [Write, Description (
          "A string describing the alternate Header Digest method "
          "preference when SecondaryHeaderDigestMethod is equal to the "
          "value 1, \"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSIConnection.OtherHeaderDigestMethod",
          "CIM_iSCSIConnectionSettings.SecondaryHeaderDigestMethod" }]
   string OtherSecondaryHeaderDigestMethod;

      [Write, Description (
          "An alternate data digest preference for this portal."), 
       ValueMap { "1", "2", "3" }, 
       Values { "Other", "No Digest", "CRC32C" }, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiPortalSecondaryDataDigest" }, 
       ModelCorrespondence { "CIM_iSCSIConnection.DataDigestMethod",
          "CIM_iSCSIConnectionSettings.OtherSecondaryDataDigestMethod" 
          }]
   uint16 SecondaryDataDigestMethod = 2;

      [Write, Description (
          "A string describing the alternate Data Digest method "
          "preference when SecondaryDataDigestMethod is equal to the "
          "value 1, \"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSIConnection.OtherDataDigestMethod",
          "CIM_iSCSIConnectionSettings.SecondaryDataDigestMethod" }]
   string OtherSecondaryDataDigestMethod;

      [Write, Description (
          "This property indicates whether or not this portal will "
          "request markers in it's incoming data stream."), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiPortalRecvMarker" }, 
       ModelCorrespondence { "CIM_iSCSIConnection.ReceivingMarkers" }]
   boolean RequestingMarkersOnReceive = false;
};


// ==================================================================
//    iSCSIConfigurationService
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "The iSCSIConfigurationService provides methods that allow a "
       "client to manipulate iSCSIProtocolEndpoints in an iSCSI Node. "
       "iSCSIProtocolController models the iSCSI Port. The instance of "
       "the service is scoped by an instance of ComputerSystem that "
       "represents that Network Entity. The capabilities of this "
       "service are defined in the companion class "
       "iSCSIConfigurationCapabilities.")]

class CIM_iSCSIConfigurationService : CIM_Service {

      [Description (
          "This method creates an iSCSI Port in the form of an "
          "instance of iSCSIProtocolEndpoint. As part of the creation "
          "process the iSCSIProtocolEndpoint is 'bound to' the "
          "underlying TCP or IP ProtocolEndpoints which are specified "
          "as inputs by creating instances of the BindsTo association "
          "between the new instance and those instances. In addition, "
          "an instance of SAPAvailableForElement is created between "
          "the specified SCSIProtocolController and the new instance "
          "of iSCSIProtocolEndpoint."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6..4095", "4096",
          "4097", "4098", "4099", "4100", "4101", "4102", "4103",
          "4104..32767", "32768..65535" }, 
       Values { "Success", "Not Supported", "Unspecified Error",
          "Timeout", "Failed", "Invalid Parameter", "DMTF Reserved",
          "SCSIProtocolController Non-existent",
          "Role Not Supported By Specified SCSIProtocolController",
          "Identifier In Use, Not Unique",
          "Identifier Selection Not Supported",
          "ProtocolEndpoint Non-Existent",
          "TCPProtocolEndpoint Not Bound To Underlying " 
          "IPProtocolEndpoint",
          "TCPProtocolEndpoint In Use By Other iSCSIProtocolEndpoint In "
           "Same Target SCSIProtocolController",
          "ProtocolEndpoints Not From Same Endpoint Collection",
          "Method Reserved", "Vendor Specific" }]
   uint32 CreateiSCSIProtocolEndpoint ( 
         [IN, Description (
             "The SCSIProtocolController instance representing the "
             "iSCSI Node that will contain the iSCSI Port.")]
      CIM_SCSIProtocolController REF iSCSINode, 
         [IN, Description (
             "For iSCSI, each iSCSIProtocolEndpoint must act as either "
             "a target or an initiator endpoint. This property "
             "indicates which role this iSCSIProtocolEndpoint "
             "implements."), 
          ValueMap { "2", "3" }, 
          Values { "Initiator", "Target" }]
      uint16 Role, 
         [IN, Description (
             "If this is an Initiator Port, Identifier MUST contain "
             "the ISID, if this is a Target Port, Identifier MUST "
             "contain the Target Portal Group Tag (TGPT). Each "
             "iSCSIProtocolEndpoint (iSCSI port) associated to a "
             "common SCSIProtocolController (iSCSI node) must have a "
             "unique Identifier. This field is a string that contains "
             "12 hexadecimal digits. If the property "
             "IdentifierSelectionSupported in class "
             "iSCSIConfigurationCapabilities is false, this parameter "
             "MUST be set to NULL."), 
          MaxLen ( 13 ), 
          ModelCorrespondence { 
             "CIM_iSCSIConfigurationCapabilities.IdentifierSelectionSupported" 
             }]
      string Identifier, 
         [IN, Description (
             "Array of References to either TCPProtocolEndpoints "
             "representing Target NetworkPortals or IPProtocolEndpoint "
             "instances representing Initiator NetworkPortals. If "
             "TCPProtocolEndpoints are supplied each MUST be in turn "
             "associated to an instance of IPProtocolEndpoint via a "
             "BindsTo association in order to provide the Target "
             "Network Portal functionality. The selected Portal "
             "endpoints MUST be from the same "
             "SystemSpecificCollection, which represents a Portal "
             "Group.")]
      CIM_ProtocolEndpoint REF NetworkPortals[], 
         [IN ( false ), OUT, Description (
             "A reference to the new iSCSIProtocolEndpoint that is "
             "created.")]
      CIM_iSCSIProtocolEndpoint REF iSCSIPort ); 

      [Description (
          "The method deletes an instance of iSCSIProtocolEndpoint and "
          "all associations in which this iSCSIProtocolEndpoint is "
          "referenced."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6..4095", "4096",
          "4097..32767", "32768..65535" }, 
       Values { "Success", "Not Supported", "Unspecified Error",
          "Timeout", "Failed", "Invalid Parameter", "DMTF Reserved",
          "Endpoint Non-Existent", "Method Reserved",
       "Vendor Specific" }]
   uint32 DeleteiSCSIProtocolEndpoint ( 
         [IN, Description (
             "The iSCSIProtocolEndpoint to be deleted.")]
      CIM_iSCSIProtocolEndpoint REF iSCSIPort ); 

      [Description (
          "This method provides for modification of an existing "
          "iSCSIProtocolEndpoint by associating a TCPProtocolEndpoint "
          "representing an Target NetworkPortal or an "
          "IPProtocolEndpoint instance representing an Initiator "
          "NetworkPortal to the iSCSIProtocolEndpoint. The association "
          "is persisted as an instance of BindsTo. The selected Portal "
          "endpoint must be from the same SystemSpecificCollection, "
          "which represents a Portal Group, as the endpoints currently "
          "bound to the iSCSIProtocolEndpoint. This action is intended "
          "to be reversed by the use of the intrinsic method "
          "'DeleteInstance'."), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6..4095", "4096",
          "4097", "4098", "4099", "4100..32767", "32768..65535" }, 
       Values { "Success", "Not Supported", "Unspecified Error",
          "Timeout", "Failed", "Invalid Parameter", "DMTF Reserved",
          "ProtocolEndpoint Non-Existent",
          "TCPProtocolEndpoint Not Bound To Underlying " 
          "IPProtocolEndpoint",
          "ProtocolEndpoint In Use By Other iSCSIProtocolEndpoint In " 
          "Same Target SCSIProtocolController",
          "ProtocolEndpoint Not From Same Endpoint Collection",
          "Method Reserved", "Vendor Specific" }]
   uint32 BindiSCSIProtocolEndPoint ( 
         [IN, Description (
             "A reference to the iSCSIProtocolEndpoint.")]
      CIM_iSCSIProtocolEndpoint REF iSCSIPort, 
         [IN, Description (
             "The ProtocolEndpoint instance. If an iSCSI Initiator "
             "Port is being modified this will be an "
             "IPProtocolEndpoint. If an iSCSI Target Port is being "
             "modified this will be a TCPProtocolEndpoint.")]
      CIM_ProtocolEndpoint REF NetworkPortal ); 
};


// ==================================================================
// iSCSIConfigurationCapabilities
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "A subclass of Capabilities that defines the capabilities of a "
       "iSCSIConfigurationService.")]

class CIM_iSCSIConfigurationCapabilities : CIM_Capabilities {

      [Description (
          "iSCSI Ports are modeled by instances of "
          "iSCSIProtocolEndpoints. If true, this property indicates "
          "that iSCSIProtocolEndpoints may be dynamically created and "
          "deleted in a Node. If false, iSCSIProtocolEndpoints are "
          "preexisting and statically defined within the Node.")]
   boolean iSCSIProtocolEndpointCreationSupported = false;

      [Description (
          "If false, the implementation chooses the Identifier for the "
          "iSCSIProtocolEndpoint and the Identifier cannot be supplied "
          "as a parameter to CreateiSCSIProtocolEndpoint and MUST be "
          "NULL.")]
   boolean IdentifierSelectionSupported = false;
};


// ==================================================================
// iSCSILoginStatistics
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "Statistics for Logins and Logouts to or from an iSCSI Node. An "
       "instance of this class will be associated by "
       "ElementStatisticalData to an instance of "
       "SCSIProtocolController that represents the Node. The Node can "
       "be either an Initiator or Target and so the interpretation of "
       "the properties in this class varies accordingly.")]
class CIM_iSCSILoginStatistics : CIM_StatisticalData {

      [Description (
          "This property counts the number of times a login attempt "
          "from this node(initiator) or to this node(target) has "
          "failed."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiIntrLoginFailures",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLoginFailures" }]
   uint64 LoginFailures;

      [Description (
          "The timestamp of the most recent failure of a login attempt "
          "from this node(initiator) or to this node(target). A value "
          "of zero indicates that no such failures have occurred since "
          "the last system boot."), 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiIntrLastFailureTime",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLastFailureTime" }, 
       ModelCorrespondence { 
          "CIM_iSCSILoginStatistics.LastLoginFailureType",
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteNodeName" }]
   datetime LastLoginFailureTime;

      [Description (
          "The type of the most recent failure of a login attempt from "
          "this node(initiator) or to this node(target)."), 
       ValueMap { "1", "2", "3", "4", "5" }, 
       Values { "Other", "Negotiate", "Authenticate", "Authorize",
          "Redirect" }, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiIntrLastFailureType",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLastFailureType" }, 
       ModelCorrespondence { 
          "CIM_iSCSILoginStatistics.OtherLastLoginFailureType",
          "CIM_iSCSILoginStatistics.LastLoginFailureTime",
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteNodeName" }]
   uint16 LastLoginFailureType;

      [Description (
          "A string describing the type of the last login failure when "
          "LastLoginFailureType is equal to the value 1, \"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSILoginStatistics.LastLoginFailureType" }]
   string OtherLastLoginFailureType;

      [Description (
          "The iSCSI name of the remote node that failed the last "
          "login attempt."), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLastTgtFailureName",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLastIntrFailureName" }, 
       ModelCorrespondence { 
          "CIM_iSCSILoginStatistics.LastLoginFailureTime",
          "CIM_iSCSILoginStatistics.LastLoginFailureType",
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteAddressType",
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteAddress" }]
   string LastLoginFailureRemoteNodeName;

      [Description (
          "The type of Internet Network Address of the remote node "
          "that failed the last login attempt."), 
       ValueMap { "1", "2" }, 
       Values { "IPv4", "IPv6" }, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLastTgtFailureAddrType",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLastIntrFailureAddrType" }, 
       ModelCorrespondence { 
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteNodeName",
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteAddress" }]
   uint16 LastLoginFailureRemoteAddressType;

      [Description (
          "An Internet Network Address giving the host address of the "
          "remote node that failed the last login attempt."), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLastTgtFailureAddr",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLastIntrFailureAddr" }, 
       ModelCorrespondence { 
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteNodeName",
          "CIM_iSCSILoginStatistics.LastLoginFailureRemoteAddressType" 
          }]
   uint32 LastLoginFailureRemoteAddress;

      [Description (
          "The count of Login Response PDUs with status 0x0000, Accept "
          "Login, received by this node(initator), or transmitted by "
          "this node (target)."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiIntrLoginAcceptRsps",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLoginAccepts" }]
   uint64 SuccessfulLogins;

      [Description (
          "If the node is an initiator this property is the number of "
          "times it has aborted a login because parameter negotiation "
          "with the target failed. \n"
          "If the node is a target the property is the number of times "
          "a it has effectively refused a login because the parameter "
          "negotiation failed. While this situation can occur, the "
          "exact mechanism is as yet undefined in the iSCSI Protocol "
          "Spec."), 
       Counter, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLoginNegotiateFails",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLoginNegotiateFails" }]
   uint64 NegotiationLoginFailures;

      [Description (
          "If the node is an initiator this property is the number of "
          "times it has aborted a login because the target could not "
          "be authenticated. If the node is a target this property is "
          "the count of Login Response PDUs with status 0x0201, "
          "Authentication Failed, transmitted by this target."), 
       Counter, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLoginAuthenticateFails",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLoginAuthenticateFails" }]
   uint64 AuthenticationLoginFailures;

      [Description (
          "If the node is an initiator this property is the count of "
          "Login Response PDUs with status class 0x201, "
          "'Authentication Failed', received by this initiator. If the "
          "node is a target the property is the count of Login "
          "Response PDUs with status 0x0202, 'Forbidden Target', "
          "transmitted by this target."), 
       Counter, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLoginAuthFailRsps",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLoginAuthorizeFails" }]
   uint64 AuthorizationLoginFailures;

      [Description (
          "The count of Login Response PDUs with status class 0x01, "
          "Redirection, received by this node(initiator) or "
          "transmitted by this node(target)."), 
       Counter, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLoginRedirectRsps",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLoginRedirects" }]
   uint64 LoginRedirects;

      [Description (
          "The number of failure Login Response PDUs which were "
          "received by this node(initiator) or were transmitted by "
          "this node(target), and which were not counted by any other "
          "property in this class."), 
       Counter, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiIntrLoginOtherFailRsps",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLoginOtherFails" }]
   uint64 OtherLoginFailures;

      [Description (
          "The count of Logout Command PDUs generated by this node "
          "(initiator) or received by this node(target), with reason "
          "code 0 (closes the session)."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiIntrLogoutNormals",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLogoutNormals" }]
   uint64 NormalLogouts;

      [Description (
          "The count of Logout Command PDUs generated by this node, "
          "(initiator) or received by this node(target), with any "
          "reason code other than 0."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiIntrLogoutOthers",
          "MIB.IETF|iSCSI-MIB.iscsiTgtLogoutOthers" }]
   uint64 OtherLogouts;
};


// ==================================================================
// iSCSISessionFailures
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "Failure Statistics for Sessions associated with a iSCSI Node. "
       "An instance of this class will be associated by "
       "ElementStatisticalData to an instance of "
       "SCSIProtocolController representing an iSCSI Node. These "
       "statistics are associated to a Node since they describe the "
       "aggregated Session data for all failed Sessions associated to "
       "iSCSI protocol endpoints used by the Node.")]
class CIM_iSCSISessionFailures : CIM_StatisticalData {

      [Description (
          "The number of times a session belonging to this Network "
          "Entity has been failed."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiInstSsnFailures" }]
   uint64 SessionFailures;

      [Description (
          "The type of the last session failure."), 
       ValueMap { "1", "2", "3", "4" }, 
       Values { "Other", "Digest", "Timeout", "Format" }, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiInstLastSsnFailureType" }, 
       ModelCorrespondence { 
          "CIM_iSCSISessionFailures.OtherLastSessionFailureType",
          "CIM_iSCSISessionFailures.LastSessionFailureRemoteNodeName" }]
   uint16 LastSessionFailureType;

      [Description (
          "A string describing the type of the last Session failure "
          "when LastSessionFailureType is equal to the value 1, "
          "\"Other\"."), 
       ModelCorrespondence { 
          "CIM_iSCSISessionFailures.LastSessionFailureType" }]
   string OtherLastSessionFailureType;

      [Description (
          "The iSCSI name of the remote node from the failed session."), 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiInstLastSsnRmtNodeName" }, 
       ModelCorrespondence { 
          "CIM_iSCSISessionFailures.LastSessionFailureType" }]
   string LastSessionFailureRemoteNodeName;

      [Description (
          "The count of sessions which were failed due to receipt of a "
          "PDU containing header or data digest errors."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiInstSsnDigestErrors" }]
   uint64 SessionDigestFailures;

      [Description (
          "The count of sessions which were failed due to a sequence "
          "exceeding a time limit."), 
       Counter, 
       MappingStrings { 
          "MIB.IETF|iSCSI-MIB.iscsiInstSsnCxnTimeoutErrors" }]
   uint64 SessionConnectionTimeoutFailures;

      [Description (
          "The count of sessions which were failed due to receipt of a "
          "PDU which contained a format error."), 
       Counter, 
       MappingStrings { "MIB.IETF|iSCSI-MIB.iscsiInstSsnFormatErrors" }]
   uint64 SessionFormatErrors;
};


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