-- =================================================================
-- Copyright (c) 2010-2014 Hewlett-Packard Development Company, L.P.
--
-- Description: stack mib
-- Reference: STACK-MIB
-- Version: V1.2
-- History:
--   V1.0 created by ranbin
--        Initial version 2008-04-30
--   V1.1 Modified by zhengwei
--        Change the range of link-delay to 0-30000ms
--   V1.2 2013-08-16 updated by wangpengju
--        Added a new node hpnicfStackPortForwardingPath to hpnicfStackPortInfoTable
--        2013-10-23 updated by zhengwei
--        Added notification nodes because MAD group work status changed:
--        hpnicfStackMadBfdChangeNormal
--        hpnicfStackMadBfdChangeFailure
--        hpnicfStackMadLacpChangeNormal
--        hpnicfStackMadLacpChangeFailure
-- =================================================================
HPN-ICF-STACK-MIB DEFINITIONS ::= BEGIN

IMPORTS
        hpnicfCommon
    FROM HPN-ICF-OID-MIB
        entPhysicalIndex
    FROM ENTITY-MIB
        ifIndex, ifDescr
    FROM IF-MIB
        Integer32, OBJECT-TYPE, MODULE-IDENTITY, NOTIFICATION-TYPE
    FROM SNMPv2-SMI;

hpnicfStack MODULE-IDENTITY
    LAST-UPDATED "200804301650Z"        -- 30th April, 2007 at 16:50 GMT
    ORGANIZATION
        ""
    CONTACT-INFO
        ""
    DESCRIPTION
        "This MIB is used to manage STM (Stack Topology Management)
         information for IRF (Intelligent Resilient Framework) device.
         This MIB is applicable to IRF-capable products.  Some objects in
         this MIB may be used only for some specific products, so users should
         refer to the related documents to acquire more detailed information."
    REVISION "200804301650Z"             -- 30th April, 2007 at 16:50 GMT
    DESCRIPTION
        "The initial revision of this MIB module."
    ::= { hpnicfCommon 91 }


-- Scalar MIB objects, which are considered as global variables
-- Global Level Configuration

hpnicfStackGlobalConfig OBJECT IDENTIFIER ::= { hpnicfStack 1 }

hpnicfStackMaxMember OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The maximum number of members in a stack."
    ::= { hpnicfStackGlobalConfig 1 }

hpnicfStackMemberNum OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of members currently in a stack."
    ::= { hpnicfStackGlobalConfig 2 }

hpnicfStackMaxConfigPriority OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The highest priority that can be configured for a member in a stack."
    ::= { hpnicfStackGlobalConfig 3 }

hpnicfStackAutoUpdate OBJECT-TYPE
    SYNTAX      INTEGER
        {
            disabled(1),
            enabled(2)
        }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "The function for automatically updating the image from the master to
         a device that is attempting to join the stack.
         When a new device tries to join a stack, STM verifies the image
         consistency between the joining device and the master.
         If the joining device uses a different image version than the master,
         the function updates the joining device with the image of the master.
         When this function is disabled, the new device can not join the stack
         if it uses a different software version than the master.

        disabled: disable auto update function
        enabled: enable auto update function"
    ::= { hpnicfStackGlobalConfig 4 }

hpnicfStackMacPersistence OBJECT-TYPE
    SYNTAX      INTEGER
        {
            notPersist(1),
            persistForSixMin(2),
            persistForever(3)
        }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "The mode of bridge MAC address persistence.  When a stack starts,
         the bridge MAC address of the master is used as that of the stack.
         When the master leaves the stack, the bridge MAC address of the
         stack changes depending on the mode of bridge MAC address persistence.

        notPersist: The bridge MAC address of the new master is used
         as that of the stack immediately.
        persistForSixMin: The original bridge MAC address will be reserved for six
         minutes.  In this period, if the master that has left rejoins the stack,
         the bridge MAC address of the stack will not change.
         If the old master does not rejoin the stack within this period, the
         bridge MAC address of the new master will be used as that of the stack.
        persistForever: Whether the master leaves or not, the bridge MAC address
         of the stack will never change."
    ::= { hpnicfStackGlobalConfig 5 }

hpnicfStackLinkDelayInterval OBJECT-TYPE
    SYNTAX      Integer32 (0..30000)
    UNITS       "millisecond"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "Delay for stack ports to report a link down event.  If the link comes up
         before the delay timer expires, the stack port will not report the link
         down event.  If the link is not recovered before the delay timer expires,
         the stack port will report the change.  If the delay is set to 0,
         the stack ports will report a link down event without delay.

        0: no delay
        1-30000(ms): delay time"
    ::= { hpnicfStackGlobalConfig 6 }

hpnicfStackTopology OBJECT-TYPE
    SYNTAX      INTEGER
        {
            chainConn(1),
            ringConn(2)
        }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Stack topology.

        chainConn: daisy-chain connection
        ringConn: ring connection"
    ::= { hpnicfStackGlobalConfig 7 }


-- Device Level Configuration
hpnicfStackDeviceConfigTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF HpnicfStackDeviceConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage device information in a stack."
    ::= { hpnicfStack 2 }

hpnicfStackDeviceConfigEntry OBJECT-TYPE
    SYNTAX      HpnicfStackDeviceConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage device information in a stack."
    INDEX
        {
            entPhysicalIndex
        }
    ::= { hpnicfStackDeviceConfigTable 1 }

HpnicfStackDeviceConfigEntry ::= SEQUENCE
    {
        hpnicfStackMemberID          Integer32,
        hpnicfStackConfigMemberID    Integer32,
        hpnicfStackPriority          Integer32,
        hpnicfStackPortNum           Integer32,
        hpnicfStackPortMaxNum        Integer32
    }

hpnicfStackMemberID OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The member ID of the device in a stack."
    ::= { hpnicfStackDeviceConfigEntry 1 }

hpnicfStackConfigMemberID OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "The configured member ID of the device.  The valid value ranges from
         1 to the value in hpnicfStackMaxMember.  The configured member ID will
         take effect at a reboot if it is unique within the stack."
    ::= { hpnicfStackDeviceConfigEntry 2 }

hpnicfStackPriority OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "The priority of a device in the stack.  The valid value ranges from
         1 to the value in hpnicfStackMaxConfigPriority."
    ::= { hpnicfStackDeviceConfigEntry 3 }

hpnicfStackPortNum OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of stack ports enabled in a device."
    ::= { hpnicfStackDeviceConfigEntry 4 }

hpnicfStackPortMaxNum OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The maximum number of stack ports in a device."
    ::= { hpnicfStackDeviceConfigEntry 5 }


-- Board Level Configuration
hpnicfStackBoardConfigTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF HpnicfStackBoardConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage MPU information for a stack."
    ::= { hpnicfStack 3 }

hpnicfStackBoardConfigEntry OBJECT-TYPE
    SYNTAX      HpnicfStackBoardConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage MPU information for a stack."
    INDEX
        {
            entPhysicalIndex
        }
    ::= { hpnicfStackBoardConfigTable 1 }

HpnicfStackBoardConfigEntry ::= SEQUENCE
    {
        hpnicfStackBoardRole              INTEGER,
        hpnicfStackBoardBelongtoMember    Integer32
    }

hpnicfStackBoardRole OBJECT-TYPE
    SYNTAX      INTEGER
        {
            slave(1),
            master(2),
            loading(3),
            other(4)
        }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The role of the MPU in a stack.

        slave: Standby MPU
        master: Master MPU
        loading: Standby MPU is loading the software image from the master.
        other: other"
    ::= { hpnicfStackBoardConfigEntry 1 }

hpnicfStackBoardBelongtoMember OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Member ID of the device that holds the current board."
    ::= { hpnicfStackBoardConfigEntry 2 }


-- stack port Information
hpnicfStackPortInfoTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF HpnicfStackPortInfoEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage stack port information
         for IRF stacked devices."
    ::= { hpnicfStack 4 }

hpnicfStackPortInfoEntry OBJECT-TYPE
    SYNTAX      HpnicfStackPortInfoEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage stack port information
         for IRF stacked devices."
    INDEX
        {
            hpnicfStackMemberID,
            hpnicfStackPortIndex
        }
    ::= { hpnicfStackPortInfoTable 1 }

HpnicfStackPortInfoEntry ::= SEQUENCE
    {
        hpnicfStackPortIndex     Integer32,
        hpnicfStackPortEnable    INTEGER,
        hpnicfStackPortStatus    INTEGER,
        hpnicfStackNeighbor      Integer32,
        hpnicfStackPortForwardingPath    OCTET STRING
    }

hpnicfStackPortIndex OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
        "The index of a stack port of the device."
    ::= { hpnicfStackPortInfoEntry 1 }

hpnicfStackPortEnable OBJECT-TYPE
    SYNTAX      INTEGER
        {
            disabled(1),
            enabled(2)
        }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The status of a stack port of the device.  If no physical
         ports are added to the stack port, its status is 'disabled'.
         If the stack port has physical ports, its status is 'enabled'.

        disabled: The stack port is disabled.
        enabled: The stack port is enabled."
    ::= { hpnicfStackPortInfoEntry 2 }

hpnicfStackPortStatus OBJECT-TYPE
    SYNTAX      INTEGER
        {
            up(1),
            down(2),
            silent(3),
            disabled(4)
        }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The link status of a stack port on the device.

        up: A physical link is present on the stack port.
        down: No physical link is present on the stack port.
        silent: The link state of the stack port is up,
                but the port cannot transmit or receive traffic.
        disabled: The stack port does not contain physical links."
    ::= { hpnicfStackPortInfoEntry 3 }

hpnicfStackNeighbor OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The member ID of the stack port's neighbor.  0 means no
         neighbor exists."
    ::= { hpnicfStackPortInfoEntry 4 }

hpnicfStackPortForwardingPath OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..511))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "List of egress member IDs on a stack port.
         Each member device uses the egress member ID lists to choose the outgoing
         stack port for known unicast frames to be sent out of other member devices.
         The egress member ID lists are comma separated.
         A zero-length string means no egress members exist.

         For example:
           In a ring stack of 1-2-3-4-5-7-1,
           if hpnicfStackPortForwardingPath.1.1 returns '7,5,4',
           IRF-port 1/1 will be the outgoing port for frames to reach members 7, 5,
           and 4 from member 1."
    ::= { hpnicfStackPortInfoEntry 5 }

-- Physical port Information
hpnicfStackPhyPortInfoTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF HpnicfStackPhyPortInfoEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage information about physical
         ports that can be used for IRF stacking."
    ::= { hpnicfStack 5 }

hpnicfStackPhyPortInfoEntry OBJECT-TYPE
    SYNTAX      HpnicfStackPhyPortInfoEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains objects to manage information about physical
         ports that can be used for IRF stacking."
    INDEX
        {
            entPhysicalIndex
        }
    ::= { hpnicfStackPhyPortInfoTable 1 }

HpnicfStackPhyPortInfoEntry ::= SEQUENCE
    {
        hpnicfStackBelongtoPort    Integer32
    }

hpnicfStackBelongtoPort OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "The index of the stack port to which the physical port is added.
         0 means the physical port is not added to any stack port.
         The value will take effect when IRF is enabled on the device."
    ::= { hpnicfStackPhyPortInfoEntry 1 }

--
-- Notification definitions
--
-- =================================================================
-- Traps are defined below.
hpnicfStackTrap OBJECT IDENTIFIER ::= { hpnicfStack 6 }

-- All objects used for TRAP only are defined here.
hpnicfStackTrapOjbects OBJECT IDENTIFIER ::= { hpnicfStackTrap 0 }

hpnicfStackPortLinkStatusChange  NOTIFICATION-TYPE
    OBJECTS
        {
            hpnicfStackMemberID,
            hpnicfStackPortIndex,
            hpnicfStackPortStatus
        }

    STATUS      current
    DESCRIPTION
        "The hpnicfStackPortLinkStatusChange trap indicates that the link status
         of the stack port has changed."
    ::= { hpnicfStackTrapOjbects 1 }

hpnicfStackTopologyChange  NOTIFICATION-TYPE
    OBJECTS
        {
            hpnicfStackTopology
        }
    STATUS      current
    DESCRIPTION
        "The hpnicfStackTopologyChange trap indicates that the topology type of
         the IRF stack has changed."
    ::= { hpnicfStackTrapOjbects 2 }

hpnicfStackMadBfdChangeNormal NOTIFICATION-TYPE
    OBJECTS
        {
            ifIndex,
            ifDescr
        }
    STATUS      current
    DESCRIPTION
        "The hpnicfStackMadBfdChangeNormal trap indicates that the BFD MAD function
        changed to the normal state."
    ::= { hpnicfStackTrapOjbects 3 }

hpnicfStackMadBfdChangeFailure NOTIFICATION-TYPE
    OBJECTS
        {
            ifIndex,
            ifDescr
        }
    STATUS      current
    DESCRIPTION
        "The hpnicfStackMadBfdChangeFailure trap indicates that the BFD MAD function
        changed to the failure state."
    ::= { hpnicfStackTrapOjbects 4 }

hpnicfStackMadLacpChangeNormal NOTIFICATION-TYPE
    OBJECTS
        {
            ifIndex,
            ifDescr
        }
    STATUS      current
    DESCRIPTION
        "The hpnicfStackMadLacpChangeNormal trap indicates that the LACP MAD function
        changed to the normal state."
    ::= { hpnicfStackTrapOjbects 5 }

hpnicfStackMadLacpChangeFailure NOTIFICATION-TYPE
    OBJECTS
        {
            ifIndex,
            ifDescr
        }
    STATUS      current
    DESCRIPTION
        "The hpnicfStackMadLacpChangeFailure trap indicates that the LACP MAD function
        changed to the failure state."
    ::= { hpnicfStackTrapOjbects 6 }
END
