ELTEX-MPLS-MIB DEFINITIONS ::= BEGIN

  IMPORTS
    OBJECT-TYPE,
    Unsigned32,
    Integer32,
    Counter32
      FROM SNMPv2-SMI

    RowStatus,
    TruthValue,
    TimeStamp,
    TimeInterval
      FROM SNMPv2-TC

    InterfaceIndex,
    InterfaceIndexOrZero
      FROM IF-MIB

    InetAddressType,
    InetAddress,
    InetAddressPrefixLength
      FROM INET-ADDRESS-MIB

    eltexLtd
      FROM ELTEX-SMI-ACTUAL;

  eltexMplsMIB MODULE-IDENTITY
    LAST-UPDATED "202211290000Z" -- Tu Nov 29 00:00:00 GMT 2021
    ORGANIZATION "Eltex Enterprise Co, Ltd."
    CONTACT-INFO 
        "eltex-co.ru"
    DESCRIPTION  
        "The MIB module for management of the MPLS protocol."

  ::= { eltexLtd 57 }

-------------------------------------------------------------------------------
-- Textual Conventions.

  EltexMplsRouterId ::= TEXTUAL-CONVENTION
    STATUS     current
    DESCRIPTION "The representation of a MPLS router id. Could be any 32-bit
                 number in a form of 4-octet IPv4 address."
    SYNTAX       OCTET STRING (SIZE (4))

  EltexMplsOperStatus ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "The current operational state of an entity."
    SYNTAX      INTEGER {
                  operStatusUp(1),        -- active
                  operStatusDown(2),      -- inactive
                  operStatusGoingUp(3),   -- activating
                  operStatusGoingDown(4), -- deactivating
                  operStatusActFailed(5)  -- activation failed
                }

  EltexMplsLdpIdentifier ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "1d.1d.1d.1d:2d"
    STATUS      current
    DESCRIPTION "The LDP identifier is a six octet
                 quantity which is used to identify a
                 Label Switching Router (LSR) label space.

                 The first four octets identify the LSR and
                 must be a globally unique value, such as a
                 32-bit router ID assigned to the LSR, and the
                 last two octets identify a specific label
                 space within the LSR."
    SYNTAX  OCTET STRING (SIZE (6))


  EltexMplsLabelDistributionMethod ::= TEXTUAL-CONVENTION
    STATUS  current
    DESCRIPTION "The label distribution method which is also called
                 the label advertisement mode [RFC3036].
                 Each interface on an LSR is configured to operate
                 in either Downstream Unsolicited or Downstream
                 on Demand."
    REFERENCE   "Multiprotocol Label Switching Architecture,
                 RFC3031.
                 LDP Specification, RFC3036, Section 2.6.3."
    SYNTAX      INTEGER {
                  downstreamOnDemand(1),
                  downstreamUnsolicited(2)
                }

  EltexMplsLdpFecLabelInstalled ::= TEXTUAL-CONVENTION
   STATUS      current
   DESCRIPTION
        "Whether the label is installed in the mpls forwarding table,
         or why it was not installed."
   SYNTAX     INTEGER {
                yes (0),            -- The label is installed in the mpls
                                    -- forwarding table
                noPolicy (1),       -- The label was not installed in
                                    -- the mpls forwarding table because
                                    -- it was denied by policy
                noLiberal (2)       -- The label was not installed in
                                    -- the mpls forwarding table because
                                    -- it was liberally retained.
              }

  EltexMplsLabel ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
          "This value represents an MPLS label as defined in
           [RFC3031],  [RFC3032], [RFC3034], [RFC3035] and
           [RFC3471].

           The label contents are specific to the label being
           represented, such as:

           * The label carried in an MPLS shim header
             (for LDP this is the Generic Label) is a 20-bit
             number represented by 4 octets.  Bits 0-19 contain
             a label or a reserved label value.  Bits 20-31
             MUST be zero.

             The following is quoted directly from [RFC3032].
             There are several reserved label values:

                i. A value of 0 represents the
                   'IPv4 Explicit NULL Label'.  This label
                   value is only legal at the bottom of the
                   label stack.  It indicates that the label
                   stack must be popped, and the forwarding
                   of the packet must then be based on the
                   IPv4 header.

               ii. A value of 1 represents the
                   'Router Alert Label'.  This label value is
                   legal anywhere in the label stack except at
                   the bottom.  When a received packet
                   contains this label value at the top of
                   the label stack, it is delivered to a
                   local software module for processing.
                   The actual forwarding of the packet
                   is determined by the label beneath it
                   in the stack.  However, if the packet is
                   forwarded further, the Router Alert Label
                   should be pushed back onto the label stack
                   before forwarding.  The use of this label
                   is analogous to the use of the
                   'Router Alert Option' in IP packets
                   [RFC2113].  Since this label
                   cannot occur at the bottom of the stack,
                   it is not associated with a
                   particular network layer protocol.

              iii. A value of 2 represents the
                   'IPv6 Explicit NULL Label'.  This label
                   value is only legal at the bottom of the
                   label stack.  It indicates that the label
                   stack must be popped, and the forwarding
                   of the packet must then be based on the
                   IPv6 header.

               iv. A value of 3 represents the
                   'Implicit NULL Label'.
                   This is a label that an LSR may assign and
                   distribute, but which never actually
                   appears in the encapsulation.  When an
                   LSR would otherwise replace the label
                   at the top of the stack with a new label,
                   but the new label is 'Implicit NULL',
                   the LSR will pop the stack instead of
                   doing the replacement.  Although
                   this value may never appear in the
                   encapsulation, it needs to be specified in
                   the Label Distribution Protocol, so a value
                   is reserved.

                v. Values 4-15 are reserved.

           * The frame relay label can be either 10-bits or
             23-bits depending on the DLCI field size and the
             upper 22-bits or upper 9-bits must be zero,
             respectively.

           * For an ATM label the lower 16-bits represents the
             VCI, the next 12-bits represents the VPI and the
             remaining bits MUST be zero.

           * The Generalized-MPLS (GMPLS) label contains a
             value greater than 2^24-1 and used in GMPLS
             as defined in [RFC3471]."
    REFERENCE
          "Multiprotocol Label Switching Architecture,
           RFC3031.

           MPLS Label Stack Encoding, [RFC3032].

           Use of Label Switching on Frame Relay Networks,
           RFC3034.

           MPLS using LDP and ATM VC Switching, RFC3035.
           Generalized Multiprotocol Label Switching
           (GMPLS) Architecture, [RFC3471]."
    SYNTAX  Unsigned32 (0..4294967295)

-------------------------------------------------------------------------------


  eltexMplsObjects    OBJECT IDENTIFIER ::= { eltexMplsMIB 1 }

  eltexMpls           OBJECT IDENTIFIER ::= { eltexMplsObjects 1 }

  eltexMplsGeneral    OBJECT IDENTIFIER ::= { eltexMpls 1 }

--
-- The MPLS configuration table.
--
-- This is the top-level MIB for the MPLS feature. It controls
-- creation and global configuration of the protocol.
--

  eltexMplsProcessTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexMplsProcessEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each entry in this table represents a single instance of
                 MPLS process."
    ::= { eltexMpls 2 }

  eltexMplsProcessEntry OBJECT-TYPE
    SYNTAX      EltexMplsProcessEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each entry represents a MPLS process entity."
    INDEX       { eltexMplsProcessId }
    ::= { eltexMplsProcessTable 1 }

  EltexMplsProcessEntry ::= SEQUENCE {
      eltexMplsProcessId                Unsigned32,
      eltexMplsProcessRowStatus         RowStatus,
      eltexMplsProcessOperStatus        EltexMplsOperStatus,
      eltexMplsProcessRouterId          EltexMplsRouterId,
      eltexMplsProcessOperRouterId      EltexMplsRouterId
    }

  eltexMplsProcessId OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Identifies a MPLS entity."
    ::= { eltexMplsProcessEntry 1 }

  eltexMplsProcessRowStatus OBJECT-TYPE
    SYNTAX      RowStatus
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION "The row status for this MPLS process entry, used to
                 create and destroy table entries."
    ::= { eltexMplsProcessEntry 2 }

  eltexMplsProcessOperStatus OBJECT-TYPE
    SYNTAX      EltexMplsOperStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The operational status of this MPLS process entry."
    ::= { eltexMplsProcessEntry 3 }

  eltexMplsProcessRouterId OBJECT-TYPE
    SYNTAX      EltexMplsRouterId
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "The administrative router id of this MPLS process entry."
    ::= { eltexMplsProcessEntry 4 }

  eltexMplsProcessOperRouterId OBJECT-TYPE
    SYNTAX      EltexMplsRouterId
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The operational router id of this MPLS process entry."
    ::= { eltexMplsProcessEntry 5 }

--
-- The MPLS interface table.
--
-- This table contains information about the interfaces on
-- which the MPLS should be run.
--

  eltexMplsInterfaceTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexMplsInterfaceEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "This table contains information about the interfaces on which
                 the MPLS protocol should be run."
    ::= { eltexMpls 3 }

  eltexMplsInterfaceEntry OBJECT-TYPE
    SYNTAX      EltexMplsInterfaceEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "An entry in this table represents an MPLS interface."
    INDEX       { eltexMplsProcessId,
                  eltexMplsInterfaceIndex }
    ::= { eltexMplsInterfaceTable 1 }

  EltexMplsInterfaceEntry ::= SEQUENCE {
      eltexMplsInterfaceIndex             InterfaceIndex,
      eltexMplsInterfaceRowStatus         RowStatus
    }

  eltexMplsInterfaceIndex OBJECT-TYPE
    SYNTAX      InterfaceIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The interface index for the interface."
    ::= { eltexMplsInterfaceEntry 2 }

  eltexMplsInterfaceRowStatus OBJECT-TYPE
    SYNTAX      RowStatus
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION "The row status for this MPLS Interface Table entry, used to
                 create and destroy table entries."
    ::= { eltexMplsInterfaceEntry 3 }

--
-- The MPLS Forwarding Table.
--
-- This table contains information on how MPLS traffic will be processed.
--

  eltexMplsForwardingTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexMplsForwardingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "This table contains information on how
                 MPLS traffic will be processed."
    ::= { eltexMpls 4 }

  eltexMplsForwardingEntry OBJECT-TYPE
    SYNTAX      EltexMplsForwardingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each entry shows how traffic will be
                 handled for a specific prefix."
    INDEX       { eltexMplsForwardingPrefixType,
                  eltexMplsForwardingPrefix,
                  eltexMplsForwardingPathId }
    ::= { eltexMplsForwardingTable 1 }

  EltexMplsForwardingEntry ::= SEQUENCE {
    eltexMplsForwardingPrefixType          InetAddressType,
    eltexMplsForwardingPrefix              InetAddress,
    eltexMplsForwardingPathId              Unsigned32,
    eltexMplsForwardingLocalLabel          EltexMplsLabel,
    eltexMplsForwardingRemoteLabel         EltexMplsLabel,
    eltexMplsForwardingOutIfIndex          InterfaceIndex,
    eltexMplsForwardingNextHopAddressType  InetAddressType,
    eltexMplsForwardingNextHopAddress      InetAddress
  }

  eltexMplsForwardingPrefixType OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The type of the Internet address for the
                 eltexMplsForwardingPrefix object."
    ::= { eltexMplsForwardingEntry 1 }

  eltexMplsForwardingPrefix OBJECT-TYPE
    SYNTAX      InetAddress
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Destination prefix."
    ::= { eltexMplsForwardingEntry 2 }

  eltexMplsForwardingPathId OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "It is used to distinguish between different
                 ECMP paths (a unique index for this prefix)."
    ::= { eltexMplsForwardingEntry 3 }

  eltexMplsForwardingLocalLabel OBJECT-TYPE
    SYNTAX      EltexMplsLabel
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The label we expect in the packet for this prefix."
    ::= { eltexMplsForwardingEntry 4 }

  eltexMplsForwardingRemoteLabel OBJECT-TYPE
    SYNTAX      EltexMplsLabel
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The label with which the packet will be sent."
    ::= { eltexMplsForwardingEntry 5 }

  eltexMplsForwardingOutIfIndex OBJECT-TYPE
    SYNTAX      InterfaceIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "IfIndex through which the packet will be sent."
    ::= { eltexMplsForwardingEntry 6 }

  eltexMplsForwardingNextHopAddressType OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The type of the Internet address for the
                 eltexMplsForwardingNextHopAddress object."
    ::= { eltexMplsForwardingEntry 7 }

  eltexMplsForwardingNextHopAddress OBJECT-TYPE
    SYNTAX      InetAddress
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Next hop address for this prefix."
    ::= { eltexMplsForwardingEntry 8 }

-------------------------------------------------------------------------------

  eltexLdp OBJECT IDENTIFIER ::= { eltexMplsObjects 2 }

--
-- The MPLS LDP Peer Status Table
--

  eltexLdpPeerStatusTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexLdpPeerStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each entry in this table represents
                 configuration LDP peer."
    ::= { eltexLdp 1 }

  eltexLdpPeerStatusEntry OBJECT-TYPE
    SYNTAX      EltexLdpPeerStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each entry in this table represents
                 configuration LDP peer."
    INDEX       { eltexMplsProcessId,
                  eltexLdpPeerStatusLocalLdpId,
                  eltexLdpPeerStatusIndex,
                  eltexLdpPeerStatusRemoteLdpId }
    ::= { eltexLdpPeerStatusTable 1 }

  EltexLdpPeerStatusEntry ::= SEQUENCE {
      eltexLdpPeerStatusLocalLdpId             EltexMplsLdpIdentifier,
      eltexLdpPeerStatusIndex                  Unsigned32,
      eltexLdpPeerStatusRemoteLdpId            EltexMplsLdpIdentifier,
      eltexLdpPeerStatusLabelDistMethod        EltexMplsLabelDistributionMethod,
      eltexLdpPeerStatusPathVectorLimit        Integer32,
      eltexLdpPeerStatusTransportAddrType      InetAddressType,
      eltexLdpPeerStatusTransportAddr          InetAddress
  }

  eltexLdpPeerStatusLocalLdpId OBJECT-TYPE
    SYNTAX      EltexMplsLdpIdentifier
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The LDP identifier.  The first four octets encode an IP
                 address assigned to the LSR, and the last two octets
                 identify a specific label space within the LSR."
    ::= { eltexLdpPeerStatusEntry 1 }

  eltexLdpPeerStatusIndex OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The index identifying a particular peer, is
                 always equal to 1 for autodiscovery sessions."
    ::= { eltexLdpPeerStatusEntry 2 }

  eltexLdpPeerStatusRemoteLdpId OBJECT-TYPE
    SYNTAX      EltexMplsLdpIdentifier
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The LDP identifier of this LDP Peer."
    ::= { eltexLdpPeerStatusEntry 3 }

  eltexLdpPeerStatusLabelDistMethod OBJECT-TYPE
    SYNTAX      EltexMplsLabelDistributionMethod
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "For any given LDP session, the method of
                 label distribution must be specified."
    ::= { eltexLdpPeerStatusEntry 4 }

  eltexLdpPeerStatusPathVectorLimit OBJECT-TYPE
    SYNTAX      Integer32 (0..255)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "If the value of this object is 0 (zero) then
                 Loop Dection for Path Vectors for this Peer
                 is disabled.

                 Otherwise, if this object has a value greater than
                 zero, then Loop Dection for Path  Vectors for this
                 Peer is enabled and the Path Vector Limit is this value."
    ::= { eltexLdpPeerStatusEntry 5 }

  eltexLdpPeerStatusTransportAddrType OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The type of the Internet address for the
                 eltLdpPeerSessionTransportAddr object.  The LDP
                 specification describes this as being either
                 an IPv4 Transport Address or IPv6 Transport
                 Address which is used in opening the LDP session's
                 TCP connection, or if the optional TLV is not
                 present, then this is the IPv4/IPv6 source
                 address for the UPD packet carrying the Hellos.

                 This object specifies how the value of the
                 eltLdpPeerStatusTransportAddr object should be
                 interpreted."
    ::= { eltexLdpPeerStatusEntry 6 }

  eltexLdpPeerStatusTransportAddr OBJECT-TYPE
    SYNTAX      InetAddress
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The Internet address advertised by the peer
                 in the Hello Message or the Hello source address.

                 The type of this address is specified by the
                 value of the eltLdpPeerStatusTransportAddrType
                 object."
    ::= { eltexLdpPeerStatusEntry 7 }

-------------------------------------------------------------------------------

--
-- The MPLS LDP Session Status Table
--

  eltexLdpSessionStatusTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexLdpSessionStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "A read-only table of Sessions.  Each row in this table
                 represents a single session."
    ::= { eltexLdp 2 }

  eltexLdpSessionStatusEntry OBJECT-TYPE
    SYNTAX      EltexLdpSessionStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "An entry in this table represents information on a
                 single session.
                 The information contained in a row is read-only."
    INDEX       { eltexMplsProcessId,
                  eltexLdpPeerStatusLocalLdpId,
                  eltexLdpPeerStatusIndex,
                  eltexLdpPeerStatusRemoteLdpId }
    ::= { eltexLdpSessionStatusTable 1 }

  EltexLdpSessionStatusEntry ::= SEQUENCE {
      eltexLdpSessionStatusStateLastChange           TimeStamp,
      eltexLdpSessionStatusState                     INTEGER,
      eltexLdpSessionStatusRole                      INTEGER,
      eltexLdpSessionStatusProtocolVersion           Unsigned32,
      eltexLdpSessionStatusKeepAliveHoldTimeRem      TimeInterval,
      eltexLdpSessionStatusKeepAliveTime             Unsigned32,
      eltexLdpSessionStatusMaxPduLength              Unsigned32,
      eltexLdpSessionStatusDiscontinuityTime         TimeStamp,
      eltexLdpSessionStatusConfiguredHoldTime        Unsigned32,
      eltexLdpSessionStatusHoldTime                  Unsigned32,
      eltexLdpSessionStatusHoldTimeInUse             Unsigned32,
      eltexLdpSessionStatusRestartSupp               TruthValue,
      eltexLdpSessionStatusReconnectTime             Unsigned32,
      eltexLdpSessionStatusRecoveryTime              Unsigned32,
      eltexLdpSessionStatusLocalRestartSupp          TruthValue,
      eltexLdpSessionStatusUnknownMesTypeErrors      Counter32,
      eltexLdpSessionStatusUnknownTlvErrors          Counter32
  }

  eltexLdpSessionStatusStateLastChange OBJECT-TYPE
    SYNTAX TimeStamp
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The value of sysUpTime at the time this
                 Session entered its current state as
                 denoted by the eltLdpPeerSessionStatusState
                 object."
    ::= { eltexLdpSessionStatusEntry 1 }

  eltexLdpSessionStatusState OBJECT-TYPE
    SYNTAX      INTEGER {
                   nonexistent(1),
                   initialized(2),
                   openrec(3),
                   opensent(4),
                   operational(5)
                }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The current state of the session, all of the
                 states 1 - 5 are based on the state machine
                 for session negotiation behavior."
    ::= { eltexLdpSessionStatusEntry 2 }

  eltexLdpSessionStatusRole OBJECT-TYPE
    SYNTAX      INTEGER {
                   unknown(1),
                   active(2),
                   passive(3)
                }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "During session establishment the LSR/LER takes either
                 the active role or the passive role based on address
                 comparisons.  This object indicates whether this LSR/LER
                 was behaving in an active role or passive role during
                 this session's establishment.

                 The value of unknown(1), indicates that the role is not
                 able to be determined at the present time."
    ::= { eltexLdpSessionStatusEntry 3 }

  eltexLdpSessionStatusProtocolVersion OBJECT-TYPE
    SYNTAX      Unsigned32(1..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The version of the LDP Protocol which
                 this session is using.  This is the version of
                 the LDP protocol which has been negotiated
                 during session initialization."
    ::= { eltexLdpSessionStatusEntry 4 }

  eltexLdpSessionStatusKeepAliveHoldTimeRem OBJECT-TYPE
    SYNTAX      TimeInterval
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The keep alive hold time remaining for
                 this session in units of hundredths of a second."
    ::= { eltexLdpSessionStatusEntry 5 }

  eltexLdpSessionStatusKeepAliveTime OBJECT-TYPE
    SYNTAX      Unsigned32 (1..65535)
    UNITS       "seconds"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The negotiated KeepAlive Time which
                 represents the amount of seconds between
                 keep alive messages.

                 This value is negotiated during
                 session initialization between
                 the local proposed value
                 and the peer's proposed
                 KeepAlive Hold Timer value.
                 This value is the smaller
                 of the two proposed values."
    ::= { eltexLdpSessionStatusEntry 6 }

  eltexLdpSessionStatusMaxPduLength OBJECT-TYPE
    SYNTAX      Unsigned32 (1..65535)
    UNITS       "octets"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The value of maximum allowable length for LDP PDUs for
                 this session.  This value may have been negotiated
                 during the Session Initialization."
    ::= { eltexLdpSessionStatusEntry 7 }

  eltexLdpSessionStatusDiscontinuityTime OBJECT-TYPE
    SYNTAX      TimeStamp
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The value of sysUpTime on the most recent occasion
                 at which any one or more of this session's counters
                 suffered a discontinuity.

                 The initial value of this object is the value of
                 sysUpTime when the entry was created in this table.

                 Also, a command generator can distinguish when a session
                 between a given Entity and Peer goes away and a new
                 session is established.  This value would change and
                 thus indicate to the command generator that this is a
                 different session."
    ::= { eltexLdpSessionStatusEntry 8 }

  eltexLdpSessionStatusConfiguredHoldTime OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The locally configured keepalive hold time for this
                 session, in seconds.  Note that the value of this field
                 reflects configuration at the time of session
                 initialization; this may differ from the configuration
                 that would apply to a new session, if configuration has
                 changed since this session was initialized."
    ::= { eltexLdpSessionStatusEntry 9 }

  eltexLdpSessionStatusHoldTime OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The peer's advertised keepalive hold time for this session
                 in seconds.  Note that the value of this field reflects
                 the peer's configuration at the time of session
                 initialization; this may differ from the configuration
                 that would apply to a new session, if the peer's
                 configuration has changed since this session was
                 initialized."
    ::= { eltexLdpSessionStatusEntry 10 }

  eltexLdpSessionStatusHoldTimeInUse OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The keepalive hold time that is currently in use for this
                 session, in seconds."
    ::= { eltexLdpSessionStatusEntry 11 }

  eltexLdpSessionStatusRestartSupp OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Whether the LDP peer has advertized support for Graceful
                 Restart on this session.  Derived from the peer's LDP
                 initialization message."
    ::= { eltexLdpSessionStatusEntry 12 }

  eltexLdpSessionStatusReconnectTime OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The Reconnect Timeout advertized by the LDP peer, or zero
                 if the peer has not advertised support for Graceful Restart."
    ::= { eltexLdpSessionStatusEntry 13 }

  eltexLdpSessionStatusRecoveryTime OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The Recovery Time advertized by the LDP peer, or zero
                 if the peer has not advertised support for Graceful Restart."
    ::= { eltexLdpSessionStatusEntry 14 }

  eltexLdpSessionStatusLocalRestartSupp OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Whether the local LDP router is using Graceful Restart
                 procedures on this session."
    ::= { eltexLdpSessionStatusEntry 15 }

  eltexLdpSessionStatusUnknownMesTypeErrors OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "This object counts the number of Unknown Message Type
                 Errors detected by this LSR/LER during this session.

                 Discontinuities in the value of this counter can occur
                 at re-initialization of the management system, and at
                 other times as indicated by the value of
                 eltexLdpSessionStatusDiscontinuityTime."
    ::= { eltexLdpSessionStatusEntry 16 }

  eltexLdpSessionStatusUnknownTlvErrors OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "This object counts the number of Unknown TLV Errors
                 detected by this LSR/LER during this session.

                 Discontinuities in the value of this counter can occur
                 at re-initialization of the management system, and at
                 other times as indicated by the value of
                 eltexLdpSessionStatusDiscontinuityTime."
    ::= { eltexLdpSessionStatusEntry 17 } 

-------------------------------------------------------------------------------

--
-- The MPLS LDP Hello Adjacency Table
--

  eltexLdpHelloAdjacencyTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexLdpHelloAdjacencyEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "A read-only table of Hello Adjacencies for Sessions."
    ::= { eltexLdp 3 }

  eltexLdpHelloAdjacencyEntry OBJECT-TYPE
    SYNTAX      EltexLdpHelloAdjacencyEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each row represents a single LDP Hello Adjacency.
                 An LDP Session can have one or more Hello
                 Adjacencies."
    INDEX       { eltexMplsProcessId,
                  eltexLdpPeerStatusLocalLdpId,
                  eltexLdpPeerStatusIndex,
                  eltexLdpPeerStatusRemoteLdpId,
                  eltexLdpHelloAdjacencyIndex }
    ::= { eltexLdpHelloAdjacencyTable 1 }

  EltexLdpHelloAdjacencyEntry ::= SEQUENCE {
    eltexLdpHelloAdjacencyIndex                  Unsigned32,
    eltexLdpHelloAdjacencyHoldTimeRem            TimeInterval,
    eltexLdpHelloAdjacencyHoldTime               Unsigned32,
    eltexLdpHelloAdjacencyType                   INTEGER,
    eltexLdpHelloAdjacencyConfiguredHoldTime     Unsigned32,
    eltexLdpHelloAdjacencyPeerHoldTime           Unsigned32
  }

  eltexLdpHelloAdjacencyIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "An identifier for this specific adjacency."
    ::= { eltexLdpHelloAdjacencyEntry 1 }

  eltexLdpHelloAdjacencyHoldTimeRem OBJECT-TYPE
    SYNTAX      TimeInterval
    UNITS       "seconds"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "If the value of this object is 65535,
                 this means that the hold time is infinite
                 (i.e., wait forever).

                 Otherwise, the time remaining for
                 this Hello Adjacency to receive its
                 next Hello Message.

                 This interval will change when the 'next'
                 Hello Message which corresponds to this
                 Hello Adjacency is received unless it
                 is infinite."
    ::= { eltexLdpHelloAdjacencyEntry 2 }

  eltexLdpHelloAdjacencyHoldTime OBJECT-TYPE
    SYNTAX Unsigned32 (0..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The Hello hold time which is negotiated between
                 the local and the Peer. The peer
                 also proposes a value and this object represents
                 the negotiated value.

                 A value of 0 means the default,
                 which is 15 seconds for Link Hellos
                 and 45 seconds for Targeted Hellos.
                 A value of 65535 indicates an
                 infinite hold time."
    ::= { eltexLdpHelloAdjacencyEntry 3 }

  eltexLdpHelloAdjacencyType OBJECT-TYPE
    SYNTAX      INTEGER {
                   link(1),
                   targeted(2)
                }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "This adjacency is the result of a 'link'
                 hello if the value of this object is link(1).
                 Otherwise, it is a result of a 'targeted'
                 hello, targeted(2)."
    ::= { eltexLdpHelloAdjacencyEntry 4 }

  eltexLdpHelloAdjacencyConfiguredHoldTime OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The locally configured hello hold time for this adjacency,
                 in seconds."
    ::= { eltexLdpHelloAdjacencyEntry 5 }

  eltexLdpHelloAdjacencyPeerHoldTime OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The peer's advertised hello hold time for this adjacency,
                 in seconds."
    ::= { eltexLdpHelloAdjacencyEntry 6 }

-------------------------------------------------------------------------------

--
-- Address Message/Address Withdraw Message Information
--
-- This information is associated with a specific Session
-- because Label Address Messages are sent after session
-- initialization has taken place.
--

  eltexLdpSessionPeerAddrTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexLdpSessionPeerAddrEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "This table 'extends' the eltexLdpSessionStatusTable.
                 This table is used to store Label Address Information 
                 from Label Address Messages received by this LSR from
                 Peers.  This table is read-only and should be updated when
                 Label Withdraw Address Messages are received, i.e.,
                 Rows should be deleted as appropriate.

                 NOTE - since more than one address may be contained in a
                 Label Address Message, this table 'sparse augments', the
                 eltexLdpSessionStatusTable information."
    ::= { eltexLdp 4 }

  eltexLdpSessionPeerAddrEntry OBJECT-TYPE
    SYNTAX      EltexLdpSessionPeerAddrEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "An entry in this table represents information on
                 a session's single next hop address which was
                 advertised in an Address Message from the LDP peer.
                 The information contained in a row is read-only."
    INDEX       { eltexMplsProcessId,
                  eltexLdpPeerStatusLocalLdpId,
                  eltexLdpPeerStatusIndex,
                  eltexLdpPeerStatusRemoteLdpId,
                  eltexLdpSessionPeerAddrIndex
                }
    ::= { eltexLdpSessionPeerAddrTable 1 }

  EltexLdpSessionPeerAddrEntry ::= SEQUENCE {
      eltexLdpSessionPeerAddrIndex       Unsigned32,
      eltexLdpSessionPeerNextHopAddrType InetAddressType,
      eltexLdpSessionPeerNextHopAddr     InetAddress
  }

  eltexLdpSessionPeerAddrIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "An index which uniquely identifies this entry within
                 given session."
    ::= { eltexLdpSessionPeerAddrEntry 1 }

  eltexLdpSessionPeerNextHopAddrType OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The internetwork layer address type of this Next Hop
                 Address as specified in the Label Address Message
                 associated with this Session. The value of this
                 object indicates how to interpret the value of
                 eltexLdpSessionPeerNextHopAddr."
    ::= { eltexLdpSessionPeerAddrEntry 2 }

  eltexLdpSessionPeerNextHopAddr OBJECT-TYPE
    SYNTAX      InetAddress
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The next hop address.  The type of this address
                 is specified by the value of the
                 eltexLdpSessionPeerNextHopAddrType."
    ::= { eltexLdpSessionPeerAddrEntry 3 }

-------------------------------------------------------------------------------

--
-- MPLS LDP Upstream (Local) Labels
--
-- A read-only table showing all upstream labels that have been
-- distributed for host and prefix FECs.
--

  eltexLdpUpLabelTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexLdpUpLabelEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "A read-only table showing all upstream labels that have been
                 distributed for host and prefix FECs."
    ::= { eltexLdp 5 }

  eltexLdpUpLabelEntry OBJECT-TYPE
    SYNTAX      EltexLdpUpLabelEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each row represents a single FEC upstream label Element."
    INDEX       { eltexMplsProcessId,
                  eltexLdpUpLabelType,
                  eltexLdpUpLabelAddressType,
                  eltexLdpUpLabelPrefix,
                  eltexLdpUpLabelPrefixLength,
                  eltexLdpUpLabelPeerId
                }
    ::= { eltexLdpUpLabelTable 1 }

  EltexLdpUpLabelEntry ::= SEQUENCE {
    eltexLdpUpLabelType          INTEGER,
    eltexLdpUpLabelAddressType   InetAddressType,
    eltexLdpUpLabelPrefix        InetAddress,
    eltexLdpUpLabelPrefixLength  InetAddressPrefixLength,
    eltexLdpUpLabelPeerId        EltexMplsLdpIdentifier,
    eltexLdpUpLabelLabel         Unsigned32
  }

  eltexLdpUpLabelType  OBJECT-TYPE
    SYNTAX      INTEGER {
                   prefix(1),
                   hostAddress(2)
                }
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The type of the FEC.  Only prefix and hostAddress
                 FECs are shown in this table."
    ::= { eltexLdpUpLabelEntry 1 }

  eltexLdpUpLabelAddressType  OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The type of the Internet address (IPv4 or IPv6)."
    ::= { eltexLdpUpLabelEntry 2 }

  eltexLdpUpLabelPrefix     OBJECT-TYPE
    SYNTAX      InetAddress (SIZE(0|4|16))
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The FEC address prefix.  Always an IPv4 address (length 4)
                 or IPv6 address (length 16)."
    ::= { eltexLdpUpLabelEntry 3 }

  eltexLdpUpLabelPrefixLength  OBJECT-TYPE
    SYNTAX      InetAddressPrefixLength
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The length in bits of the address prefix."
    ::= { eltexLdpUpLabelEntry 4 }

  eltexLdpUpLabelPeerId  OBJECT-TYPE
    SYNTAX      EltexMplsLdpIdentifier
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The LDP ID of the peer the label was sent to."
    ::= { eltexLdpUpLabelEntry 5 }

  eltexLdpUpLabelLabel  OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The label value.  Includes 0 (explicit NULL) and 3
                 (implicit NULL) as well as real label values."
    ::= { eltexLdpUpLabelEntry 6 }

-------------------------------------------------------------------------------

--
-- MPLS LDP Downstream (Remote) Labels
--
-- A read-only table showing all downstream labels that have been
-- received and retained/installed for host and prefix FECs.
--

  eltexLdpDownLabelTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EltexLdpDownLabelEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "A read-only table showing all downstream labels that have been
                 received and retained/installed for host and prefix FECs."
    ::= { eltexLdp 6 }

  eltexLdpDownLabelEntry OBJECT-TYPE
    SYNTAX      EltexLdpDownLabelEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Each row represents a single FEC downstream label Element."
    INDEX       { eltexMplsProcessId,
                  eltexLdpDownLabelType,
                  eltexLdpDownLabelAddressType,
                  eltexLdpDownLabelPrefix,
                  eltexLdpDownLabelPrefixLength,
                  eltexLdpDownLabelPeerId
                }
    ::= { eltexLdpDownLabelTable 1 }

  EltexLdpDownLabelEntry ::= SEQUENCE {
    eltexLdpDownLabelType                INTEGER,
    eltexLdpDownLabelAddressType         InetAddressType,
    eltexLdpDownLabelPrefix              InetAddress,
    eltexLdpDownLabelPrefixLength        InetAddressPrefixLength,
    eltexLdpDownLabelPeerId              EltexMplsLdpIdentifier,
    eltexLdpDownLabelLabel               Unsigned32,
    eltexLdpDownLabelInstalled           EltexMplsLdpFecLabelInstalled,
    eltexLdpDownLabelInterface           InterfaceIndexOrZero,
    eltexLdpDownLabelNextHopAddressType  InetAddressType,
    eltexLdpDownLabelNextHopAddress      InetAddress,
    eltexLdpDownLabelState               INTEGER
  }

  eltexLdpDownLabelType  OBJECT-TYPE
    SYNTAX      INTEGER {
                   prefix(1),
                   hostAddress(2)
                }
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The type of the FEC.  Only prefix and hostAddress
                 FECs are shown in this table."
    ::= { eltexLdpDownLabelEntry 1 }

  eltexLdpDownLabelAddressType  OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The type of the Internet address (IPv4 or IPv6)."
    ::= { eltexLdpDownLabelEntry 2 }

  eltexLdpDownLabelPrefix     OBJECT-TYPE
    SYNTAX      InetAddress (SIZE(0|4|16))
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The FEC address prefix.  Always an IPv4 address (length 4)
                 or IPv6 address (length 16)."
    ::= { eltexLdpDownLabelEntry 3 }

  eltexLdpDownLabelPrefixLength  OBJECT-TYPE
    SYNTAX      InetAddressPrefixLength
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The length in bits of the address prefix."
    ::= { eltexLdpDownLabelEntry 4 }

  eltexLdpDownLabelPeerId  OBJECT-TYPE
    SYNTAX      EltexMplsLdpIdentifier
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "The LDP ID of the peer the label was received from."
    ::= { eltexLdpDownLabelEntry 5 }

  eltexLdpDownLabelLabel  OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "The label value.  Includes 0 (explicit NULL) and 3
                 (implicit NULL) as well as real label values."
    ::= { eltexLdpDownLabelEntry 6 }

  eltexLdpDownLabelInstalled  OBJECT-TYPE
    SYNTAX      EltexMplsLdpFecLabelInstalled
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Whether the label is installed in the mpls forwarding
        table, or why it was not installed."
    ::= { eltexLdpDownLabelEntry 7 }

  eltexLdpDownLabelInterface  OBJECT-TYPE
    SYNTAX      InterfaceIndexOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "For installed downstream labels, the interface index the
        label was programmed on (zero indicates the global label
        space).

        For ECMP, if multiple out-segments have been programmed
        corresponding to a single downstream mapping (which is
        possible if there are multiple parallel interfaces between
        two peers), this interface corresponds to the first such
        out-segment."
    ::= { eltexLdpDownLabelEntry 8 }

  eltexLdpDownLabelNextHopAddressType OBJECT-TYPE
    SYNTAX      InetAddressType
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "A type of the address prefix in the
                 eltexLdpDownLabelNextHopAddress."
    ::= { eltexLdpDownLabelEntry 9 }

  eltexLdpDownLabelNextHopAddress  OBJECT-TYPE
    SYNTAX      InetAddress (SIZE(0|4|16))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "For installed downstream labels, this indicates the
         next-hop IP address.

         For ECMP, if multiple out-segments have been programmed
         corresponding to a single downstream mapping (which is
         possible if there are multiple parallel interfaces between
         two peers), this address corresponds to the first such
         out-segment."
    ::= { eltexLdpDownLabelEntry 10 }

  eltexLdpDownLabelState  OBJECT-TYPE
    SYNTAX      INTEGER {
                   initial(0),
                   gettingLabelReqBuf(1),
                   awaitingLabelMap(2),
                   outSegProcessing(3),
                   mappingEstablished(4),
                   mappingLiberallyRetained(5),
                   labelReqRetry(6),
                   gettingLabelRelBuf(7),
                   staleMapping(8),
                   sendingQueryFec(9)
                }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The internal LDP FSM state of this downstream label."
    ::= { eltexLdpDownLabelEntry 11 }

END
