-- =====================================================================
-- Copyright (c) 2004-2015 Hangzhou H3C Tech. Co., Ltd. All rights reserved.
--
-- Description:
--      This MIB module is for the management of N_Port Virtualization or
--      NPV within the framework of N_Port virtualization(NPV) architecture.
-- Reference:
-- Version: V1.1
-- History:
--      V1.0 Initial version created by wangxu 2013-04-02
--      V1.1 Added h3cNPVLoadBalanceTable by liukui 2014-07-21
-- =====================================================================
H3C-NPV-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    Unsigned32                  FROM SNMPv2-SMI         -- [RFC2578]
    RowStatus, TimeStamp,
    TruthValue,
    TEXTUAL-CONVENTION          FROM SNMPv2-TC          -- [RFC2578]
    ifIndex, InterfaceIndex
        FROM IF-MIB
    H3cFcVsanIndex
        FROM H3C-FC-TC-MIB
    h3cSan, h3cVsanIndex
        FROM H3C-VSAN-MIB;

h3cNpv  MODULE-IDENTITY
    LAST-UPDATED "201407210000Z"
    ORGANIZATION "Hangzhou H3C Tech. Co., Ltd."
    CONTACT-INFO
        "Platform Team Hangzhou H3C Tech. Co., Ltd.
         Hai-Dian District Beijing P.R. China
         http://www.h3c.com
         Zip:100085"
    DESCRIPTION
        "This MIB module is for the management of N_Port Virtualization
         or NPV within the framework of N_Port virtualization(NPV)
         architecture.

         N_Port virtualization reduces the number of Fibre Channel
         domain IDs in SANs(Storage Area Network).  Switches operating
         in the NPV mode do not join a fabric; rather, they pass traffic
         between NPV core switch links and end-devices, which eliminates
         the domain IDs for these edge switches.  NPV core switch is a
         fibre channel edge switch connected to one or more NPV devices."
    REVISION       "201407210000Z"
    DESCRIPTION
        "Added h3cNPVLoadBalanceTable."
    REVISION "201304020000Z"
    DESCRIPTION
        "Initial version of this MIB module."
    ::= { h3cSan 6 }

H3cNpvIfIndexList ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "This textual convention defines a list of 'ifIndex'.

        Each 4 octets within this value are combined together
        to represent the 'ifIndex' of a particular port in the
        module.

        For example, the first 4 octets (byte 1, byte 2, byte 3
        and byte 4) represent the 'ifIndex' of one interface, while
        the second 4 octets (byte 5, byte 6, byte 7 and byte 8)
        represent the 'ifIndex' for another interface in the module,
        and so on."
    SYNTAX          OCTET STRING (SIZE (4..65535))

h3cNpvMibObjects             OBJECT IDENTIFIER
    ::= { h3cNpv 1 }
h3cNpvConfiguration          OBJECT IDENTIFIER
    ::= { h3cNpvMibObjects 1 }
h3cNpvGlobalObjects          OBJECT IDENTIFIER
    ::= { h3cNpvConfiguration 1 }

-- NPV Traffic Load balance

h3cNpvLoadbalanceVsan OBJECT-TYPE
    SYNTAX          H3cFcVsanIndex
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "Used to trigger a load-balancing in the specified VSAN (Virtual
         Storage Area Network).

         When the h3cNpvLoadbalanceVsan is set to a specific VSAN, a
         disruptive load-balancing process will be initiated in the VSAN
         so that all nodes in the VSAN will re-login to the core switch.

         This load-balancing process redistributes downlink traffic across
         all uplink interfaces for better load balancing, but it causes
         traffic interruption."
    ::= { h3cNpvGlobalObjects 1 }

-- NPV Traffic Map configuration

h3cNpvTrafficMapConfigTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF H3cNpvTrafficMapConfigEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table containing information on the assignment of
        traffic map interfaces to an interface."
    ::= { h3cNpvConfiguration 2 }

h3cNpvTrafficMapConfigEntry OBJECT-TYPE
    SYNTAX          H3cNpvTrafficMapConfigEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "An entry in the h3cNpvTrafficMapConfigTable.

        This table contains entries for each of the interfaces
        which has been assigned a set of interfaces for traffic
        mapping in the VSAN.

        Traffic mapping is a technique used in NPV device to
        restrict the usage of external interface(s) for forwarding
        the traffic from server interface to the fibre channel fabric.

        If an interface comes up as a server interface and finds
        a corresponding entry in this table, then the switch
        software will assign a valid external interface from
        this list, if any.  Once assigned, that assigned external
        interface will be used for forwarding the traffic from
        the server interface to the fibre channel fabric.

        If an interface comes up as a server interface and
        finds an entry in this table, but with no valid list of
        external interfaces, then the switch software keeps the
        server interface in operationally down state until
        at least one of the interface in the list becomes a
        valid external interface.

        If an interface comes up as a server interface and it
        cannot find an entry in this table, then any of the
        available external interfaces can be assigned to that
        server interface.

        Entries in this table can be created or destroyed via
        h3cNpvTrafficMapRowStatus object.  Columnar objects can be
        modified when the corresponding h3cNpvTrafficMapRowStatus
        is 'active'."
    INDEX           { ifIndex,
                      h3cVsanIndex }
    ::= { h3cNpvTrafficMapConfigTable 1 }

H3cNpvTrafficMapConfigEntry ::= SEQUENCE {
    h3cNpvTrafficMapExternalIfIndexList H3cNpvIfIndexList,
    h3cNpvTrafficMapLastChange          TimeStamp,
    h3cNpvTrafficMapRowStatus           RowStatus
}

h3cNpvTrafficMapExternalIfIndexList OBJECT-TYPE
    SYNTAX          H3cNpvIfIndexList
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "The list of external interfaces which the traffic needs
         to be mapped to.

         This object is a list of interfaces presented as
         an octet string of interface indices or ifindex-es.

         The list should contain at least one interface and at most
         all the interfaces in the switch up to 16384 interfaces.
         The 16384 interfaces max-limit is due to the size of this
         object.

         Specifying this object is mandatory for the creation of a
         row in h3cNpvTrafficMapConfigTable."
    ::= { h3cNpvTrafficMapConfigEntry 1 }

h3cNpvTrafficMapLastChange OBJECT-TYPE
    SYNTAX          TimeStamp
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The value of sysUpTime at the time of the latest
        change to this traffic map entry.

        When there has not been any change to the traffic
        map entry, the value of this field will be that
        of the entry creation time."
    ::= { h3cNpvTrafficMapConfigEntry 2 }

h3cNpvTrafficMapRowStatus OBJECT-TYPE
    SYNTAX          RowStatus
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "The status of this conceptual row.

         The row can be made 'active' only if value of corresponding
         instance of h3cNpvTrafficMapExternalIfIndexList is provided."
    ::= { h3cNpvTrafficMapConfigEntry 3 }

-- Per Server Interface NPV Information

h3cNpvServerIfTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF H3cNpvServerIfEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table contains, one entry for each server
        interface(FC-port configured in F-port mode) in
        this VSAN in the Fabric element.

        Each entry contains NPV related information like
        external interface assigned for the server interface
        in the VSAN."

    ::= { h3cNpvConfiguration 3 }

h3cNpvServerIfEntry OBJECT-TYPE
    SYNTAX          H3cNpvServerIfEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "An entry in the h3cNpvServerIfTable, containing NPV
        related parameters established by a server interface
        indicated by ifIndex."
    INDEX           { ifIndex,
                      h3cVsanIndex }
    ::= { h3cNpvServerIfTable 1 }

H3cNpvServerIfEntry ::= SEQUENCE {
    h3cNpvExternalIfIndex  InterfaceIndex
}

h3cNpvExternalIfIndex OBJECT-TYPE
    SYNTAX          InterfaceIndex
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This value of this object is the external interface assigned
        for the server interface associated with the server interface."
    ::= { h3cNpvServerIfEntry 1 }

-- NPV Auto Load Balance Configuration

h3cNpvLoadBalanceTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF H3cNpvLoadBalanceEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
           "This table contains NPV load balancing parameters of each VSAN."
    ::= { h3cNpvConfiguration 4 }

h3cNpvLoadBalanceEntry  OBJECT-TYPE
    SYNTAX          H3cNpvLoadBalanceEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
           "An entry provides NPV load balancing parameters for a VSAN."
    INDEX           {
                        h3cVsanIndex
                    }
    ::= { h3cNpvLoadBalanceTable 1 }

H3cNpvLoadBalanceEntry ::= SEQUENCE {
       h3cNpvAutoLoadBalanceEnable                 TruthValue,
       h3cNpvAutoLoadBalanceInterval               Unsigned32
}

h3cNpvAutoLoadBalanceEnable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object is used to enable or disable NPV auto load balance
         on this VSAN to equalize server login distribution when server
         logins are not evenly distributed across uplinks."
    DEFVAL { false }
    ::= { h3cNpvLoadBalanceEntry 1 }

h3cNpvAutoLoadBalanceInterval OBJECT-TYPE
    SYNTAX          Unsigned32 (1..300)
    UNITS           "seconds"
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
           "This object is used to start an auto load balance timer
            on this VSAN when the failed uplink is up.  A NPV auto
            load balance will be triggered when the timer expires.

           If this object is not configured, the default value is 30."
    DEFVAL { 30 }
    ::= { h3cNpvLoadBalanceEntry 2 }

END
