-- =====================================================================
-- Copyright (c) 2010-2014 Hewlett-Packard Development Company, L.P.
--
-- Description:
--      This MIB module is for configuring and monitoring VSAN (Virtual
--      Storage Area Network) and domain management related entities.
-- Reference:
-- Version: V1.1
-- History:
--   V1.0 Initial version created by qiaoxinghua 2013-02-27
--   V1.1 Added hpnicfVsanDmDomainIdChangeNotify and
--        hpnicfVsanDmDomainIdChangeNotifyEnable by qiaoxinghua 2014-3-4
-- =====================================================================
HPN-ICF-VSAN-MIB DEFINITIONS ::= BEGIN

IMPORTS
    OBJECT-TYPE, MODULE-IDENTITY, NOTIFICATION-TYPE, Counter32
        FROM SNMPv2-SMI
    RowStatus, TruthValue
        FROM SNMPv2-TC
    HpnicfFcVsanIndex, HpnicfFcNameIdOrZero, HpnicfFcDomainPriority, HpnicfFcDomainId,
    HpnicfFcNameId, HpnicfFcDomainIdOrZero, HpnicfFcDmState, HpnicfFcDomainIdList
        FROM HPN-ICF-FC-TC-MIB
    ifIndex
        FROM IF-MIB
    hpnicfCommon
        FROM HPN-ICF-OID-MIB;

hpnicfSan MODULE-IDENTITY
    LAST-UPDATED   "201403041550Z"
    ORGANIZATION
        ""
    CONTACT-INFO
        ""
    DESCRIPTION
        "This MIB module is for configuring and monitoring VSAN
         and domain management related entities."
    REVISION       "201403041550Z"
    DESCRIPTION
        "Added hpnicfVsanDmDomainIdChangeNotify and
         hpnicfVsanDmDomainIdChangeNotifyEnable."
    REVISION       "201302280940Z"
    DESCRIPTION
        "Initial version of this MIB module."

    ::= { hpnicfCommon 127 }

--
-- Node definitions
--
hpnicfVsan OBJECT IDENTIFIER ::= { hpnicfSan 1 }

hpnicfVsanMibObjects OBJECT IDENTIFIER ::= { hpnicfVsan 1 }

hpnicfVsanDmConfiguration OBJECT IDENTIFIER ::= { hpnicfVsanMibObjects 1 }

-- VSAN Table
hpnicfVsanTable  OBJECT-TYPE
    SYNTAX      SEQUENCE OF HpnicfVsanEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table contains all the VSANs configured on the device.  It can
         be used to manage and monitor the VSANs on local device."
    ::= { hpnicfVsanDmConfiguration 1 }

hpnicfVsanEntry OBJECT-TYPE
    SYNTAX      HpnicfVsanEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry that contains information about a VSAN in the hpnicfVsanTable."
    INDEX { hpnicfVsanIndex }
    ::= { hpnicfVsanTable 1 }

HpnicfVsanEntry ::=
    SEQUENCE {
        hpnicfVsanIndex
            HpnicfFcVsanIndex,
        hpnicfVsanCoreSwitchName
            HpnicfFcNameIdOrZero,
        hpnicfVsanRowStatus
            RowStatus
       }

hpnicfVsanIndex OBJECT-TYPE
    SYNTAX      HpnicfFcVsanIndex
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
        "The identifier of the VSAN."
    ::= { hpnicfVsanEntry 1 }

hpnicfVsanCoreSwitchName OBJECT-TYPE
    SYNTAX      HpnicfFcNameIdOrZero (SIZE(8 | 16))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The Core Switch_Name of the VSAN, which is indicated by
         the switch's WWN(World Wide Name)."
    ::= { hpnicfVsanEntry 2 }

hpnicfVsanRowStatus OBJECT-TYPE
    SYNTAX      RowStatus
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "RowStatus.  Now only three states are supported:
         createAndGo, active, and destroy."
    ::= { hpnicfVsanEntry 3 }

-- DM Configuration
hpnicfVsanDmTable     OBJECT-TYPE
    SYNTAX      SEQUENCE OF HpnicfVsanDmEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table contains domain management related configurations
         and information of VSANs.
         An entry in this table is created when corresponding VSAN
         is created, as well as deleted when the VSAN is deleted."
    ::= { hpnicfVsanDmConfiguration 2 }

hpnicfVsanDmEntry  OBJECT-TYPE
    SYNTAX      HpnicfVsanDmEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry of domain management related configurations
         and information of a specified VSAN."
    INDEX { hpnicfVsanIndex }
    ::= { hpnicfVsanDmTable 1}

HpnicfVsanDmEntry ::=
    SEQUENCE {
              hpnicfVsanDmDomainConfigureEnable     TruthValue,
              hpnicfVsanDmFabricNameConfigured      HpnicfFcNameIdOrZero,
              hpnicfVsanDmPriorityConfigured        HpnicfFcDomainPriority,
              hpnicfVsanDmAllowedDomainIdList       HpnicfFcDomainIdList,
              hpnicfVsanDmDomainIdConfigured        HpnicfFcDomainIdOrZero,
              hpnicfVsanDmDomainIdTypeConfigured    INTEGER,
              hpnicfVsanDmAutoReconfigureEnable     TruthValue,
              hpnicfVsanDmDomainRestart             INTEGER,
              hpnicfVsanDmState                     HpnicfFcDmState,
              hpnicfVsanDmDomainIdAssigned          HpnicfFcDomainIdOrZero,
              hpnicfVsanDmPrincipalSwitchWWN        HpnicfFcNameId,
              hpnicfVsanDmLocalSwitchWWN            HpnicfFcNameId,
              hpnicfVsanDmPrincipalSwRunPriority    HpnicfFcDomainPriority,
              hpnicfVsanDmLocalSwRunPriority        HpnicfFcDomainPriority,
              hpnicfVsanDmPrincipalSwSlctCnt        Counter32,
              hpnicfVsanDmLocalPrincipalSwSlctCnt   Counter32,
              hpnicfVsanDmBFCnt                     Counter32,
              hpnicfVsanDmRCFCnt                    Counter32
             }

hpnicfVsanDmDomainConfigureEnable  OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "To enable or disable the fabric configuration function
         in this VSAN.
         true:  enabled, the fabric will be built dynamically.
         false: disabled, the fabric should be built statically
                by manual configurations."
    DEFVAL          { true }
    ::= { hpnicfVsanDmEntry 1 }

hpnicfVsanDmFabricNameConfigured    OBJECT-TYPE
    SYNTAX          HpnicfFcNameIdOrZero
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Specifies the fabric name in this VSAN, and will use a
         zero-length octet string as default value if not configured.
         The fabric name specified here takes effect only if the
         value of hpnicfVsanDmDomainConfigureEnable is 'false', and the
         same fabric name should be configured for all switches in
         this VSAN.
         If the value of hpnicfVsanDmDomainConfigureEnable is 'true',
         the principal switch WWN is used as fabric name.
         The value should be set to zero-length when canceling
         a configured fabric name."
    ::= { hpnicfVsanDmEntry 2 }

hpnicfVsanDmPriorityConfigured    OBJECT-TYPE
    SYNTAX          HpnicfFcDomainPriority
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Specifies the priority of a switch in this VSAN, which
         is used during principal switch selection to cause one
         Switch to be favored over another."
    DEFVAL         { 128 }
    ::= { hpnicfVsanDmEntry 3 }

hpnicfVsanDmAllowedDomainIdList    OBJECT-TYPE
    SYNTAX          HpnicfFcDomainIdList
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Specifies the list of domain IDs that are allowed in the
         VSAN, and the configuration has different meanings in
         different scenarios:

         1. Principal switch: Can only assign domains IDs within
            the allowed domain ID list.  If the allowed domain ID
            list configured does not include any of the already
            assigned domain IDs or manually configured domain IDs,
            the configuration will fail.

         2. Non-principal switch: The manually configured domain
            ID must be within the allowed domain ID list, or
            the configuration will fail.  Besides, the domain ID
            assigned by principal switch must within the allowed
            domain ID list, or the switch will refuse the assigned
            domain ID and isolate the upstream interface.  If the
            runtime domain ID for a switch is beyond the new
            configured ID list, the configuration will fail.
         The default value is a zero-length octet string.  If This
         value is set with zero-length, the configuration will be
         cancelled in this VSAN."
    ::= { hpnicfVsanDmEntry 4 }

hpnicfVsanDmDomainIdConfigured    OBJECT-TYPE
    SYNTAX          HpnicfFcDomainIdOrZero
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Used to configure or cancel a domain ID for a switch in
         this VSAN.

         When this value is not zero, the domain ID type should
         be specified together via hpnicfVsanDmDomainIdTypeConfigured,
         or the default value of preferred type will be taken.
         The zero value is used to cancel the domain ID configured,
         and then, there is no need to specify its type.

         When statically build a fabric, the configured domain ID
         is the actual domain ID of the switch.  If this object is
         not manually configured, the switch will isolate all of
         its E_ports in this VSAN no matter what domain ID type is
         configured.

         When dynamically build a fabric, the configured domain ID
         is desired by the switch, but the domain ID assigned to
         the switch may not be the desired one.
         If a non-principal switch fails to obtain any domain ID
         from the principal switch, the non-principal switch will
         isolate the upstream link.
         If a non-principal switch obtains a domain ID from the
         principal switch other than the desired one, different
         actions will be taken according to different domain ID
         type configured:
          - If configured static type, The non-principal switch
            will isolate the upstream link and refuse other domain
            IDs assigned by the principal switch.
          - If configured preferred type, the non-principal switch
            will use the domain ID assigned by the principal switch."
    DEFVAL         { 0 }
    ::= { hpnicfVsanDmEntry 5 }

hpnicfVsanDmDomainIdTypeConfigured    OBJECT-TYPE
    SYNTAX          INTEGER {
                             static(1),
                             preferred(2)
                            }
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
         "Specifies the type of configured domain ID, which can be
          static type or preferred type."
    DEFVAL         { preferred }
    ::= { hpnicfVsanDmEntry 6 }

hpnicfVsanDmAutoReconfigureEnable    OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Used to specify whether a disruptive reconfiguration will
         be automatically performed when the domain ID lists overlaps
         in fabric merging.

         The fabric reconfiguration function takes effect only when
         the value of hpnicfVsanDmDomainConfigureEnable is 'true'."
    DEFVAL         { false }
    ::= { hpnicfVsanDmEntry 7 }

hpnicfVsanDmDomainRestart    OBJECT-TYPE
    SYNTAX          INTEGER  {
                              noOperation(1),
                              nonDisruptive(2),
                              disruptive(3)
                             }
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Used to manually trigger a disruptive or non-disruptive
         reconfiguration of the fabric."
    DEFVAL         { noOperation }
    ::= { hpnicfVsanDmEntry 8 }

hpnicfVsanDmState         OBJECT-TYPE
    SYNTAX          HpnicfFcDmState
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the managing state of the domain in this VSAN."
    ::= { hpnicfVsanDmEntry 9 }

hpnicfVsanDmDomainIdAssigned    OBJECT-TYPE
    SYNTAX          HpnicfFcDomainIdOrZero
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the Domain ID of the local switch in this
         VSAN or zero if no Domain ID has been assigned."
    ::= { hpnicfVsanDmEntry 10 }

hpnicfVsanDmPrincipalSwitchWWN    OBJECT-TYPE
    SYNTAX          HpnicfFcNameId
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the WWN of the principal switch in this VSAN,
         or zero-length string if the identity of the principal
         switch is unknown."
    ::= { hpnicfVsanDmEntry 11 }

hpnicfVsanDmLocalSwitchWWN       OBJECT-TYPE
    SYNTAX          HpnicfFcNameId
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the WWN of the local switch in this VSAN."
    ::= { hpnicfVsanDmEntry 12 }

hpnicfVsanDmPrincipalSwRunPriority    OBJECT-TYPE
    SYNTAX          HpnicfFcDomainPriority
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the running priority of the principal switch in
         this VSAN."
    ::= { hpnicfVsanDmEntry 13 }

hpnicfVsanDmLocalSwRunPriority    OBJECT-TYPE
    SYNTAX          HpnicfFcDomainPriority
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "Indicates the running priority of the local switch in
         this VSAN."
    ::= { hpnicfVsanDmEntry 14 }

hpnicfVsanDmPrincipalSwSlctCnt    OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The times that local switch has participated in principal
         switch selection in this VSAN."
    ::= { hpnicfVsanDmEntry 15 }

hpnicfVsanDmLocalPrincipalSwSlctCnt    OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The times that local switch was elected as principal switch
         in this VSAN."
    ::= { hpnicfVsanDmEntry 16 }

hpnicfVsanDmBFCnt   OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The times that local switch has participated in a BF(Build
         Fabric) process in this VSAN."
    ::= { hpnicfVsanDmEntry 17 }

hpnicfVsanDmRCFCnt    OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The times that local switch has participated in a RCF
         (Reconfigure Fabric) process in this VSAN."
    ::= { hpnicfVsanDmEntry 18 }

-- DM If Configuration
hpnicfVsanDmIfConfigTable  OBJECT-TYPE
    SYNTAX      SEQUENCE OF HpnicfVsanDmIfConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table contains the FC(Fibre Channel) related interface
         configurations about domain management of a VSAN."
    ::= { hpnicfVsanDmConfiguration 3 }

hpnicfVsanDmIfConfigEntry  OBJECT-TYPE
    SYNTAX      HpnicfVsanDmIfConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry used for managing the FC related interface
         configurations about domain management of a VSAN.
         An entry can be created when any object in this table is
         set to non-default value, and be deleted when the objects
         in this table are set to default value."
    INDEX { ifIndex,
            hpnicfVsanIndex }
    ::= { hpnicfVsanDmIfConfigTable 1}

HpnicfVsanDmIfConfigEntry ::=
    SEQUENCE {
              hpnicfVsanDmIfConfigRcfReject
                TruthValue
             }

hpnicfVsanDmIfConfigRcfReject  OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Used to specify whether the RCF(Reconfigure Fabric) requests
         received in this VSAN should be rejected.
          - true:  the received RCF will be rejected.
          - false: the received RCF will be accepted."
    DEFVAL          { false }
    ::= { hpnicfVsanDmIfConfigEntry 1 }

-- DM Information
hpnicfVsanDmInformation  OBJECT IDENTIFIER ::= { hpnicfVsanMibObjects 2 }

hpnicfVsanDmDatabaseTable OBJECT-TYPE
    SYNTAX SEQUENCE OF HpnicfVsanDmDatabaseEntry
    MAX-ACCESS         not-accessible
    STATUS             current
    DESCRIPTION
        "A table specifies the information of the switch
         about all the Domain IDs which have been assigned
         in each of the VSANs."
    ::= { hpnicfVsanDmInformation 1 }

hpnicfVsanDmDatabaseEntry OBJECT-TYPE
    SYNTAX      HpnicfVsanDmDatabaseEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An object in the hpnicfVsanDmDatabaseTable contains one
         Domain ID and the corresponding WWN of the switch in
         one VSAN."
    INDEX { hpnicfVsanIndex,
            hpnicfVsanDmDatabaseDomainId }
    ::= { hpnicfVsanDmDatabaseTable 1 }

HpnicfVsanDmDatabaseEntry ::=
    SEQUENCE {
        hpnicfVsanDmDatabaseDomainId
          HpnicfFcDomainId,
        hpnicfVsanDmDatabaseSwitchWWN
          HpnicfFcNameId
       }

hpnicfVsanDmDatabaseDomainId OBJECT-TYPE
    SYNTAX          HpnicfFcDomainId
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "The Domain ID which has been assigned."
    ::= { hpnicfVsanDmDatabaseEntry 1 }

hpnicfVsanDmDatabaseSwitchWWN OBJECT-TYPE
    SYNTAX          HpnicfFcNameId
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The WWN of the switch to which the corresponding
         Domain ID has been assigned in the particular VSAN."
    ::= { hpnicfVsanDmDatabaseEntry 2 }

hpnicfVsanDmIfInfoTable OBJECT-TYPE
    SYNTAX SEQUENCE OF HpnicfVsanDmIfInfoEntry
    MAX-ACCESS         not-accessible
    STATUS             current
    DESCRIPTION
        "A table specifies the information of an interface
         in each of the VSANs."
    ::= { hpnicfVsanDmInformation 2 }

hpnicfVsanDmIfInfoEntry OBJECT-TYPE
    SYNTAX      HpnicfVsanDmIfInfoEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A conceptual row in the hpnicfVsanDmIfInfoTable indicates the
         role information of the interface in the particular VSAN."
    INDEX { ifIndex,
            hpnicfVsanIndex }
    ::= { hpnicfVsanDmIfInfoTable 1 }

HpnicfVsanDmIfInfoEntry ::=
    SEQUENCE {
          hpnicfVsanDmIfInfoRole
            INTEGER
          }

hpnicfVsanDmIfInfoRole OBJECT-TYPE
    SYNTAX INTEGER {
                      nonPrincipal(1),
                      principalUpstream(2),
                      principalDownstream(3),
                      isolated(4),
                      unknown(5)
                   }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The role of the interface in the VSAN.  The value specifications
         are listed as follows:

         nonPrincipal         - The state of the interface is not principal
                                interface in the VSAN.
         principalUpstream    - The state of the interface is upstream
                                principal interface in the VSAN.
         principalDownstream  - The state of the interface is downstream
                                principal interface in the VSAN.
         isolated             - The state of the interface is isolated in
                                the VSAN.
         unknown              - The state of the interface is unknown in
                                the VSAN."
    ::= { hpnicfVsanDmIfInfoEntry 1 }

-- DM Notifications
hpnicfVsanDmNotifications OBJECT IDENTIFIER ::= { hpnicfVsanMibObjects 3 }
hpnicfVsanDmNotificationPrefix  OBJECT IDENTIFIER
    ::= { hpnicfVsanDmNotifications 0 }

hpnicfVsanDmDomainIdNotAssignedNotify NOTIFICATION-TYPE
    OBJECTS {hpnicfVsanIndex,
             hpnicfVsanDmLocalSwitchWWN}
    STATUS current
    DESCRIPTION
        "This event will be triggered if a Domain ID is not
         assigned or configured, then the E_ports may be isolated
         in the VSAN.  The conditions are listed as follows:

         1. If the switch has enabled the fabric configuration and
            a request for a configured static Domain ID is rejected
            or no other Domain ID is assigned, the E_ports will be
            isolated in the particular VSAN.
         2. If the switch does not enable the fabric configuration
            and a Domain ID is not configured, all of its E_ports
            will be isolated in the particular VSAN.

         The notification contains the WWN of the Switch and
         the index of the VSAN in which the event occurred."
   ::= { hpnicfVsanDmNotificationPrefix 1 }

hpnicfVsanDmNewPrincipalSwitchNotify NOTIFICATION-TYPE
    OBJECTS {hpnicfVsanIndex,
             hpnicfVsanDmLocalSwitchWWN}
    STATUS current
    DESCRIPTION
        "If a switch becomes the new Principal Switch in a VSAN, this
         notification is sent immediately after the election.

         The notification contains the WWN of the new Principal Switch
         and the index of the VSAN in which the transition occurred."
   ::= { hpnicfVsanDmNotificationPrefix 2 }

hpnicfVsanDmFabricChangeNotify NOTIFICATION-TYPE
    OBJECTS         { hpnicfVsanIndex }
    STATUS          current
    DESCRIPTION
        "This event will be triggered if a switch sends or receives a
         Build Fabric (BF) or a Reconfigure Fabric (RCF) message in a
         VSAN.

         The conditions a switch can receive or send a BF or a RCF are
         listed as follows:
         1. Two isolated fabrics in a VSAN merge into one fabric.  If
            the Domain ID lists do not overlap, the sent or received
            message is BF, other cases, it is RCF.
         2. If an upstream principal link which connects to principal
            switch and other switches become disconnected, the sent or
            received message is BF.
         3. A BF or RCF process is triggered manually by configuration.

         The notification contains the index of the VSAN in which a BF
         or a RCF was sent or received."
   ::= { hpnicfVsanDmNotificationPrefix 3 }

hpnicfVsanDmDomainIdChangeNotify NOTIFICATION-TYPE
    OBJECTS         { hpnicfVsanIndex,
                      hpnicfVsanDmDomainIdAssigned,
                      hpnicfVsanDmLocalSwitchWWN
                    }
    STATUS          current
    DESCRIPTION
        "This event will be triggered if the Domain ID of the local switch
         changed in a VSAN."
    ::= { hpnicfVsanDmNotificationPrefix 4 }

hpnicfVsanDmNotificationSwitch  OBJECT IDENTIFIER
   ::= { hpnicfVsanDmNotifications 1 }

hpnicfVsanDmFabricChangeNotifyEnable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Specifies whether the hpnicfVsanDmFabricChangeNotify can be sent
         when a BF or RCF message was sent or received by a switch."
    DEFVAL          { false }
    ::= { hpnicfVsanDmNotificationSwitch 1 }

hpnicfVsanDmDomainIdChangeNotifyEnable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Specifies whether the hpnicfVsanDmDomainIdChangeNotify can be sent
         when the Domain ID of the local switch changed in a VSAN."
    DEFVAL          { false }
    ::= { hpnicfVsanDmNotificationSwitch 2 }
END
