Network Working Group                               Cheenu Srinivasan
Internet Draft                           Tachion Network Technologies
Expires: December 1999
                                                     Arun Viswanathan
                                                  Lucent Technologies

  MPLS Traffic Engineering Management Information Base Using SMIv2

                    draft-ietf-mpls-te-mib-00.txt

                          February 16, 1999

                          Cheenu Srinivasan
                         Lucent Technologies
                          cheenu@lucent.com

                          Arun Viswanathan
                         Lucent Technologies
                          arunv@lucent.com

                    draft-ietf-mpls-te-mib-01.txt

Status of this Memo

   This document is an Internet-Draft and is in full conformance with
   all provisions of Section 10 of RFC2026.

   Internet-Drafts are working documents of the Internet  Engineering
   Task  Force (IETF), its areas, and its working groups.  Note  that
   other  groups  may also distribute working documents as  Internet-
   Drafts.

   Internet-Drafts  are draft documents valid for a  maximum  of  six
   months  and  may  be  updated, replaced,  or  obsoleted  by  other
   documents  at  any  time.  It is inappropriate  to  use  Internet-
   Drafts  as reference material or to cite them other than as  "work
   in progress."

   The   list   of   current  Internet-Drafts  can  be  accessed   at
   http://www.ietf.org/ietf/1id-abstracts.txt.

   The  list of Internet-Draft Shadow Directories can be accessed  at
   http://www.ietf.org/shadow.html.

Abstract

   This  memo  defines  an  experimental portion  of  the  Management
   Information Base  (MIB) for use with network management  protocols
   in  the  Internet community.  In particular, it describes  managed
   objects  for  modeling  an  Multi-Protocol  Label  Switching  (MPLS)  [MPLSArch,
   MPLSFW]  Labeled Switched Router (LSR)  and  for  MPLS based traffic engineering.

Open Issues

   -  Partitioning   this  document  into  an  MPLS-TE-MIB   document
      containing  end-to-end  Do  we need to introduce a separate table of tunnel performance
      objects such as tunnels and MPLS-LSR-MIB
      document containing  or  is  the  current method of using  the  objects modeling an  in
      mplsInSegmentTable   and   mplsOutSegmentTable   [LSRMIB]    to
      determine  tunnel  performance adequate? We  think  the  latter
      since  we need to be able to measure the individual LSR. performance
      of  each tunnel segment anyway which will imply replicating all
      the  segment related objects in this MIB; but this  needs  some
      more thought.

   -  Support for "make-before-break" tunnel re-routing using  shared-explicit shared-
      explicit RSVP filters.

   -  Does mplsTSpecTable belong in this document?

   -  The  MIB  needs  to  be assigned an OID under the  experimental
      branch.

   -  Support for signalled COS value.

   -  Do  we  need  objects to keep track of ownership of entries  in
      various tables?

   -  More descriptive text and detailed example.

   -  Reconcile  mplsInterfaceConfTable with  the  interface  related
      objects   in  the  LDP  MIB  [LDPMIB]  including  objects  Session attribute flag for
      negotiated label ranges.

   -  Address multipath related issues.

   -  Introduce  a  scalar  to indicate the maximum  supported  label
      stack depth. fast-reroute.

1. Introduction

   This  memo  defines  an  experimental portion  of  the  Management
   Information  Base (MIB) for use with network management  protocols
   in  the  Internet  community. In particular, it describes  managed
   objects  for  modeling  an Multi-Protocol Label  Switching  (MPLS)
   [MPLSArch, MPLSFW]  Labeled Switched Router (LSR)  and based traffic engineering. This MIB  should  be
   used  in conjunction with the companion document [LSRMIB] for MPLS
   based traffic engineering. engineering configuration and management.

   Comments  should  be  made directly to the MPLS  mailing  list  at
   mpls@uu.net.

   This memo does not, in its draft form, specify a standard for  the
   Internet community.

2. Terminology

   This document uses terminology from the MPLS architecture document
   [MPLSArch].
   [MPLSArch]  and  MPLS  Label  Switch  Router  MIB  [LSRMIB].  Some
   frequently used terms are described next.

   An explicitly routed LSP (ERLSP) is referred to as an MPLS tunnel.
   It  consists  of  one  in-segment and/or one  out-segment  at  the
   ingress/egress  LSRs.   These  are  also  referred  to  as  tunnel
   segments.   Additionally,  at  an intermediate  LSR,  we  model  a
   connection as consisting of one or more in-segments and/or one  or
   more  out-segments.   The binding or interconnection  between  in-
   segments  and  out-segments in performed  using  a  cross-connect.
   These  objects  are  defined in the MPLS Label Switch  Router  MIB
   [LSRMIB].

3. The SNMP Management Framework

   The  SNMP  Management Framework presently consists of  five  major
   components:

   -  An overall architecture, described in RFC 2271 [SNMPArch].

   -  Mechanisms for describing and naming objects and events for the
      purpose of management.  The first version of this Structure  of
      Management  Information (SMI) is called SMIv1 and described  in
      RFC   1155  [SMIv1],  RFC  1212  [SNMPv1MIBDef]  and  RFC  1215
      [SNMPv1Traps].  The second version, called SMIv2, is  described
      in   RFC  1902  [SMIv2],  RFC  1903  [SNMPv2TC]  and  RFC  1904
      [SNMPv2Conf].

   -  Message protocols for transferring management information.  The
      first  version  of the SNMP message protocol is  called  SNMPv1
      and  described in RFC 1157 [SNMPv1].  A second version  of  the
      SNMP  message  protocol,  which is not  an  Internet  standards
      track  protocol, is called SNMPv2c and described  in  RFC  1901
      [SNMPv2c]  and RFC 1906 [SNMPv2TM].  The third version  of  the
      message  protocol is called SNMPv3 and described  in  RFC  1906
      [SNMPv2TM], RFC 2272 [SNMPv3MP] and RFC 2274 [SNMPv3USM].

   -  Protocol operations for accessing management information.   The
      first set of protocol operations and associated PDU formats  is
      described  in  RFC  1157 [SNMPv1].  A second  set  of  protocol
      operations and associated PDU formats is described in RFC  1905
      [SNMPv2PO].

   -  A  set  of  fundamental  applications  described  in  RFC  2273
      [SNMPv3App]   and  the  view-based  access  control   mechanism
      described  in  RFC  2275  [SNMPv3VACM].   Managed  objects  are
      accessed   via   a  virtual  information  store,   termed   the
      Management  Information Base or MIB.  Objects in  the  MIB  are
      defined  using  the mechanisms defined in the SMI.   This  memo
      specifies a MIB module that is compliant to the SMIv2.   A  MIB
      conforming   to   the  SMIv1  can  be  produced   through   the
      appropriate  translations.  The resulting translated  MIB  must
      be  semantically equivalent, except where objects or events are
      omitted  because no translation is possible (use of Counter64).
      Some  machine  readable information in SMIv2 will be  converted
      into  textual  descriptions  in SMIv1  during  the  translation
      process.   However,  this loss of machine readable  information
      is not considered to change the semantics of the MIB.

3.1.  Object Definitions

   Managed  objects  are  accessed via a virtual  information  store,
   termed the Management Information Base or MIB.  Objects in the MIB
   are  defined  using  the subset of Abstract  Syntax  Notation  One
   (ASN.1)  defined in the SMI.  In particular, each object  type  is
   named  by an OBJECT IDENTIFIER, an administratively assigned name.
   The  object  type  together  with an  object  instance  serves  to
   uniquely  identify a specific instantiation of  the  object.   For
   human  convenience,  we  often use a textual  string,  termed  the
   descriptor, to also refer to the object type.

4. Feature Checklist

   The  MPLS  traffic  engineering MIB is  designed  to  satisfy  the
   following requirements and constraints.

   -  The  MIB must support enabling and disabling of MPLS capability
      on MPLS capable interfaces of an LSR.

   -  The  MIB must support the configuration of point-to-point  uni-
      directional tunnels.

   -  The MIB should be able to support the configuration of point-to-
      point bi-directional tunnels.

   -  The  MIB  should  be  able  to  support  the  configuration  of
      multipoint-to-point unidirectional tunnels.

   -  MPLS  tunnels need not be interfaces, but it should be possible
      to configure a tunnel as an interface.

   -  The MIB should be able to support both manually configured MPLS
      tunnels  and  cross-connects as well as via LDP and/or RSVP signaling.

   -  The MIB  It  should allow resource sharing between two or more LSPs.

   -  Both  per-platform  and  per-interface  label  spaces  must  be
      supported. possible to support persistent as well  as  non-
      persistent tunnels.

5. Outline

   Traffic   engineering  support  for  MPLS  tunnels  requires   the
   following configuration.

   -  Setting  up  MPLS packets must be forwarded solely based on an incoming  top
      label [MPLSArch, LblStk]. tunnels along with appropriate  configuration
      parameters.

   -  Support  must  Configuring tunnel loose and strict source routed hops.

   These  actions  may  need  to  be  provided for next-hop  resolution  when  the
      outgoing interface is a shared media interface.  In the  point-
      to-multipoint  case,  each  outgoing  segment  can  be   on   a
      different shared media interface.

   -  The  MIB  must support point-to-point, point-to-multipoint  and
      multipoint-to-point connections at a cross-connect LSR.

   -  For  multipoint-to-point connections all the  outgoing  packets
      must have the same top label.

   -  For  multipoint-to-point connections the outgoing resources  of
      the merged connections must be shared.

   -  For  multipoint-to-point connections,  packets  from  different
      incoming  connections may have distinct outgoing label  stacks,
      beneath the (identical) top label.

   -  In  the  point-to-multipoint case each outgoing connection  can
      have a distinct label stack including the top label.

   -  In  a point-to-multipoint connection the ingress resources  are
      shared by all the members of the connection.

   -  The  MIB  must  provide cross-connect capability accompanied  with  corresponding
   actions using [LSRMIB] to  "pop"  an
      incoming  label establish and forward the packet with the  rest  of configure tunnel segments,
   if  this  is  done manually. Also, the
      label stack unchanged in-segment and without pushing any labels ("pop-and-
      go") [LblStk].

   -  It must be possible to assign or remap COS bits [LblStk] on the
      outgoing  label.   In the multipoint-to-point  case,  each  in-
      segment can have a different outgoing COS value.  In the point-
      to-multipoint  case,  each  out-segment  can  have  a  different
      outgoing COS value.

   -  It
   performance        tables,       mplsInSegmentPerfTable        and
   mplsOutSegmentPerfTable  [LSRMIB], should  be possible  used  to support persistent as well  as  non-
      persistent tunnels and cross-connects.

   -  Performance counters must be provided for in-segments and  out-
      segments  as well as for measuring MPLS  determine
   performance on  a  per-
      interface basis.

5. Outline

   Traffic  engineering support for MPLS tunnels  and  cross-connects
   requires of the following configuration.

   -  Enabling MPLS on MPLS capable interfaces.

   -  Setting  up  MPLS tunnels  with the appropriate  configuration
      parameters.

   -  Setting up and tunnel segments with appropriate traffic parameters.

   -  Setting up the cross-connect table to switch between segments.

   -  Specifying label stack actions.

5.1.  Summary of MPLS Trafic Engineering MIB

   The  MIB  objects  for  performing these actions  consist  of  the
   following tables.

   -  Interface  configuration  Tunnel table  (mplsInterfaceConfTable) (mplsTunnelTable) for
      enabling MPLS on setting up MPLS capable interfaces. tunnels.

   -  Tunnel   table   (mplsTunnelTable)   and   tunnel  hop  table (mplsTunnelHopTable) to configure MPLS tunnels.

   -  In-segment       (mplsInSegmentTable)      and      out-segment
      (mplsOutSegmentTable)  tables  for  configuring  in   and   out
      segments  of  a tunnel at the ingress and egress  LSRs  of  the
      tunnel.   These tables are also used for defining the  segments
      comprising  a  cross-connect entry at intermediate  LSRs  of  a
      tunnel.

   -  Cross-connect table (mplsXCTable) for configuring  MPLS  cross-
      connects  and creating relationships between in  strict
      and out  tunnel
      segments constituting a cross-connect.

   -  Label  stack  table (mplsLabelStackTable) for specifying  label
      stack operations.

   - TSpec  table (mplsTSpecTable) for specifying LSP related traffic
      parameters.

   Further,  the loose source routed MPLS in-segment and out-segment performance  tables,
   mplsInSegmentPerfTable  and mplsOutSegmentPerfTable,  contain  the
   objects  necessary to measure the performance of both tunnels  and
   cross-connects, and mplsInterfacePerfTable has objects to  measure
   MPLS performance on a per-interface basis. hops.

   These tables are described in the subsequent sections.

6. Tunnel Specific Brief Description of MIB Objects

   The  objects  described in this section support the  functionality
   described in documents [RSVPTun, CRLDP].  The tables support  both
   manually configured and signalled tunnels.  Moreover, they provide
   the capability to associate two uni-directional tunnels to form  a
   single bi-directional tunnel.

6.1.  mplsTunnelTable

   The  mplsTunnelTable allows new MPLS tunnels to be created between
   an  MPLS  LSR  and a remote endpoint, and existing tunnels  to  be
   reconfigured or removed.  Note that we only support point-to-point
   tunnel   segments,  although  multipoint-to-point  and   point-to-
   multipoint connections are supported by an LSR acting as a  cross-
   connect.    Each  MPLS  tunnel  can  thus  have  one   out-segment
   originating  at an LSR and/or one in-segment terminating  at  that
   LSR.

   mplsTunnelTable  does not define the in and out  segments  forming
   the tunnel.  Instead, these are defined by creating rows in the in-
   segment  and  out-segment tables, defining  relationships  in  the
   cross-connect   table  and  referring  to  these   rows   in   the
   mplsTunnelTable using a cross-connect index, mplsTunnelXCID.
   Section 8. provides an example. These
   segment and cross-connect related objects are defined in [LSRMIB].

6.2.  mplsTunnelHopTable
   mplsTunnelHopTable is used to indicate the hops, strict or  loose,
   for  an  MPLS  tunnel  defined  in  mplsTunnelTable,  when  it  is
   established  via  signaling.  Each row in this  table  is  indexed
   primarily  by  the same index mplsTunnelIndex as the  row  of  the
   corresponding  tunnel in mplsTunnelTable.  Each  row  also  has  a
   secondary index, mplsTunnelHopIndex, corresponding to the next hop
   of  this  tunnel.   The  scalar mplsTunnelMaxHops,  indicates  the
   maximum  number of hops that can be specified per tunnel  on  this
   LSR.

7. LSR Specific Objects

   Sections  7.1-7.2  describe  objects pertaining  to  MPLS  capable
   interfaces  of an LSR. The objects described in Sections  7.3-7.8,
   when  considered together, are equivalent to the tables  described
   in  the MPLS  architecture  document  [MPLSArch],  that  is,  the
   Incoming  Label Map (ILM) and the Next Hop Traffic Engineering MIB Definitions

MPLS-TE-MIB DEFINITIONS ::= BEGIN

IMPORTS
   MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
   experimental, Integer32, Counter32, Counter64, Gauge32, IpAddress
      FROM SNMPv2-SMI
   MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
      FROM SNMPv2-CONF
   TEXTUAL-CONVENTION, TruthValue, RowStatus
      FROM SNMPv2-TC
   ifIndex, InterfaceIndex, InterfaceIndexOrZero
      FROM IF-MIB
   BitRate, BurstSize
      FROM INTEGRATED-SERVICES-MIB;

mplsTeMIB MODULE-IDENTITY
   LAST-UPDATED "9906161200Z"  -- 16 June 1999 12:00:00 EST
   ORGANIZATION "Multiprotocol Label Forwarding  Entry
   (NHLFE)  tables.  Section  7.9 describes  objects  for  specifying
   traffic parameters for in and out segments.

7.1.  mplsInterfaceConfTable

   This  table  represents the interfaces that are MPLS capable.   An
   LSR  creates  an  entry  in  this table Switching (MPLS) Working Group"
   CONTACT-INFO
   "        Cheenu Srinivasan
     Postal: Tachion Network Technologies
             2 Meridian Road
             Eatontown, NJ 07724
     Tel:    +1 732 542 7750 x234
     Email:  cheenu@tachion.com

             Arun Viswanathan
     Postal: Lucent Technologies
             4D537, 101 Crawfords Corner Road
             Holmdel, NJ 07733
     Tel:    +1 732 332 5163
     Email:  arunv@lucent.com"
   DESCRIPTION
       "Proposed  MIB  module  for  every MPLS  capable
   interface on that LSR.  Each entry contains information about per-
   interface label ranges.  The administrator can specify the desired
   MPLS status (enable/up, disable/down, testing) of an interface  by
   writing the object mplsInterfaceAdminStatus.  The actual status is
   indicated by the object mplsInterfaceOperStatus.

7.2.  mplsInterfacePerfTable

   This  table  contains objects to measure the MPLS  performance  of
   MPLS    capable    interfaces    and    is    an    AUGMENT     to
   mplsInterfaceConfTable.  High capacity counters are  provided  for
   objects  that  are  likely to wrap around  quickly  on  high-speed
   interfaces.

7.3.  mplsInSegmentTable

   This table contains a description of the incoming MPLS segments to
   an LSR and their associated parameters.

7.4.  mplsInSegmentPerfTable

   The  MPLS In-Segment Performance Table has objects to measure  the
   performance of an incoming segment configured on an LSR.  It is an
   AUGMENT   to  mplsInSegmentTable.   High  capacity  counters   are
   provided  for  objects that are likely to wrap around  quickly  on
   high-speed interfaces.

7.5.  mplsOutSegmentTable

   The  Out-Segment Table contains a description of the outgoing MPLS
   segments at an LSR and their associated parameters.

7.6.  mplsOutSegmentPerfTable

   The  MPLS  Out-Segment  Table  contains  objects  to  measure  the
   performance of an outgoing segment configured on an LSR.  It is an
   AUGMENT  to  mplsOutSegmentTable.   High  capacity  counters   are
   provided  for  objects that are likely to wrap around  quickly  on
   high-speed interfaces.

7.7.  mplsXCTable

   mplsXCTable specifies information for switching between  segments.
   It supports point-to-point, point-to-multipoint and multipoint-to-
   point connections.

7.8.  mplsLabelStackTable

   mplsLabelStackTable specifies the label stack to be pushed onto  a
   packet, beneath the top label.  Entries to this table are referred
   to from mplsXCTable.

7.9.  mplsTSpecTable

   mplsTSpecTable  contains  objects  for  specifying   the   traffic
   parameters  of  in  and out segments. Entries in  this  table  are
   referred to from mplsInSegmentTable and mplsOutSegmentTable.

8. Specifying the Segments of a Tunnel

   Suppose  that  we  want  to  manually  create  a  best-effort  bi-
   directional tunnel, consisting of an in-segment and an out-segment
   on  an  LSR  (with  no label stack beneath the top  label  on  the
   outgoing  labeled packets).  The following rows and  corresponding
   objects need to be created to do this.

   First,  the  in-segment and the out-segment are created  with  the
   appropriate traffic parameters.

   In mplsInSegmentTable:
   {
      mplsInSegmentIfIndex = i1,
      mplsInSegmentLabel = l1,
      mplsInSegmentNPop = 1,
      mplsInSegmentTSpecIndex = 0,
      mplsInSegmentRowStatus = createAndGo(3)
   }

   In mplsOutSegmentTable:
   {
      mplsOutSegmentIndex = o,
      mplsOutSegmentIfIndex = i2,
      mplsOutSegmentPushTopLabel = true(1),
      mplsOutSegmentTopLabel = l2,
      mplsOutSegmentTSpecIndex = 0,
      mplsOutSegmentRowStatus = createAndGo(3)
   }

   Next, two cross-connect entries associating these two segments by
   sharing the same mplsXCIndex are created.

   In mplsXCTable, for the in-segment:
   {
      mplsXCIndex = x,
      mplsInSegmentIfIndex = i1,
      mplsInSegmentLabel = l1,
      mplsOutSegmentIndex = 0,
      mplsLabelStackIndex = 0,
      mplsXCRowStatus = createAndGo(3)
   }

   In mplsXCTable, for the out-segment:
   {
      mplsXCIndex = x,
      mplsInSegmentIfIndex = 0,
      mplsInSegmentLabel = 0,
      mplsOutSegmentIndex = o,
      mplsXCLabelStackIndex = 0,
      mplsXCRowStatus = createAndGo(3)
   }

   Note     that     the     objects     mplsInSegmentXCIndex     and
   mplsOutSegmentXCIndex will automatically get  populated  with  the
   value   "x"  when  these  segments  are  referred  to   from   the
   corresponding cross-connect entries.

   Finally,  the  tunnel  entry  is  created,  which  points  to  the
   appropriate cross-connect entries.

   In mplsTunnelTable:
   {
      mplsTunnelIndex,
      mplsTunnelXCIndex = mplsXCIndex = x,
      ...
      mplsTunnelDirection = in-out(3),
      mplsXCRowStatus = createAndGo(3)
   }

9. MPLS Traffic Engineering MIB Definitions

MPLS-TE-MIB DEFINITIONS ::= BEGIN

IMPORTS
   MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
   experimental, Integer32, Counter32, Counter64, Gauge32, IpAddress
      FROM SNMPv2-SMI
   MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
      FROM SNMPv2-CONF
   TEXTUAL-CONVENTION, TruthValue, RowStatus
      FROM SNMPv2-TC
   ifIndex, InterfaceIndex, InterfaceIndexOrZero
      FROM IF-MIB
   BitRate, BurstSize
      FROM INTEGRATED-SERVICES-MIB;

mplsTeMIB MODULE-IDENTITY
   LAST-UPDATED "9902161030Z"  -- 16 February 1999 10:30:00 EST
   ORGANIZATION "Multiprotocol Label Switching (MPLS) Working Group"
   CONTACT-INFO
   "        Cheenu Srinivasan
     Postal: Lucent Technologies
             4F535, 101 Crawfords Corner Road
             Holmdel, NJ 07733
     Tel:    +1 732 949 0709
     Email:  cheenu@lucent.com

             Arun Viswanathan
     Postal: Lucent Technologies
             4D537, 101 Crawfords Corner Road
             Holmdel, NJ 07733
     Tel:    +1 732 332 5163
     Email:  arunv@lucent.com"
   DESCRIPTION
       "Proposed  MIB  module  for MPLS Traffic  Engineering
        (TE)  as  defined  in: Extensions to  RSVP  for  LSP
        Tunnels,  Awduche et al, Internet Draft <draft-mpls-
        rsvp-lsp-tunnel-00.txt>, Nov. 1998; Explicit Routing
        over  LDP  Specification, Jamoussi et  al,  Internet
        Draft   <draft-jamoussi-mpls-cr-ldp-01.txt>,    Feb.
        1999."
   ::= { experimental oid } -- to be assigned

-- Textual Conventions.

MplsTeIANAAddrFamily ::= TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "An address family.  Values are defined in RFC 1700 -
        Assigned Numbers.  All values may not be relevant in
        all contexts when used in this MIB, but are included
        for completeness."
   REFERENCE
       "RFC  1700  - Assigned Numbers, Reynolds and  Postel,
        Oct. 1994"
   SYNTAX        INTEGER {
                   other(0),
                    ipv4(1),
                    ipv6(2),
                    nsap(3),
                    hdlc(4),
                    bbn1822(5),
                    ieee802(6),
                    e163(7),
                    e164(8),
                    f69(9),
                    x121(10),
                    ipx(11),
                    appleTalk(12),
                    decnetIV(13),
                    banyanVines(14),
                    e164WithNsap(15)
                }

-- An MPLS label.
MplsLabel ::= TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "Represents an MPLS label.  Note that the contents of
        a  label  field are interpreted in an interface-type
        specific fashion.  For example, the label carried in
        the MPLS shim header is 20 bits wide and the top  12
        bits  must  be zero.  The frame relay label  can  be
        either 10, 17 or 23 bits wide depending on the  size
        of the DLCI field size and the top 22, 15, or 9 bits
        must  be  zero, respectively.  For an ATM interface,
        the  lowermost 16 bits are interpreted as  the  VCI,
        the  next  8 bits as the VPI and the remaining  bits
        must  be  zero.   Also  note the  permissible  label
        values  are  also a function of the interface  type.
        For  example,  the value 3 has special semantics  in
        the  control plane for an MPLS shim header label and
        is not a valid label value in the datapath."
   REFERENCE
       "1.  MPLS  Label Stack Encoding, Rosen et al,  draft-
        ietf-mpls-label-encaps-03.txt, Sept. 1998
       2.  Use  of  Label Switching on Frame Relay Networks,
        Conta et al, draft-ietf-mpls-fr-03.txt, Nov. 1998."
   SYNTAX Integer32

MplsTunnelIndex ::= TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "Index into mplsTunnelTable."
   SYNTAX        INTEGER (0..65535)

MplsTunnelCookie ::= TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "A  globally  unique identifier that is  assigned  to
        each ERLSP.  This is assigned at the head end of the
        ERLSP  and can be used by all LSRs to identify  this
        ERLSP.  At the head end this cookie is maintained in
        the  tunnel  table  as  mplsTunnelLocalCookie.   For
        signalled tunnels this cookie is piggybacked by  the
        signaling  protocol  to the  remote  end  where  the
        cookie is stored in the remote LSR's tunnel table as
        mplsTunnelRemoteCookie for the tunnel.  For creating
        bi-directional  tunnels  the  cookie  is   used   to
        associate   the   two  uni-directional   ERLSPs   as
        belonging to the same tunnel.

        It  is recommended that the cookie value be assigned
        by  concatenating the head-end LSR's IP address with
        the  tunnel index.  For IPv4 addresses this  results
        in a 6-octet long cookie."
   SYNTAX        OCTET STRING (SIZE(6))

Ipv6Address ::= TEXTUAL-CONVENTION
   STATUS      current
   DESCRIPTION
       "IPv6 address."
   SYNTAX      OCTET STRING (SIZE(16))

-- Top level components of this MIB.

-- tables, scalars
mplsTeObjects       OBJECT IDENTIFIER ::= { mplsTeMIB 1 }
-- traps
mplsTeNotifications OBJECT IDENTIFIER ::= { mplsTeMIB 2 }
-- conformance
mplsTeConformance   OBJECT IDENTIFIER ::= { mplsTeMIB 3 }

-- MPLS tunnel table.

mplsTunnelTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsTunnelEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "The  mplsTunnelTable allows new MPLS tunnels  to  be
        created  between an LSR and a remote  endpoint,  and
        existing  tunnels  to  be reconfigured  or  removed.
        Note  that  only point-to-point tunnel segments  are
        supported, although multipoint-to-point and point-to-
        multipoint  connections  are  supported  by  an  LSR
        acting  as  a cross-connect.  Each MPLS  tunnel  can
        thus  have one out-segment originating at  this  LSR
        and/or one in-segment terminating at this LSR."
   ::= { mplsTeObjects 1 }

mplsTunnelEntry OBJECT-TYPE
   SYNTAX        MplsTunnelEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "An  entry  in this table represents an MPLS  tunnel.
        An  entry  can be created by a network administrator
        or by an SNMP agent as instructed by LDP or RSVP."
   INDEX         {  mplsTunnelIndex  }
      ::= { mplsTunnelTable 1 }

MplsTunnelEntry ::= SEQUENCE {
      mplsTunnelIndex                 MplsTunnelIndex,
      mplsTunnelName                  DisplayString,
      mplsTunnelDescr                 DisplayString,
      mplsTunnelIsIf                  TruthValue,
      mplsTunnelIfIndex               InterfaceIndexOrZero,
      mplsTunnelDirection             INTEGER,
      mplsTunnelXCIndex               Integer32,
      mplsTunnelSignallingProto       INTEGER,
      mplsTunnelLocalCookie           MplsTunnelCookie,
      mplsTunnelRemoteCookie          MplsTunnelCookie,
      mplsTunnelIsMergeable           TruthValue,
      mplsTunnelSetupPrio             INTEGER,
      mplsTunnelHoldingPrio           INTEGER,
      mplsTunnelInMaxRate             BitRate,
      mplsTunnelInMeanRate            BitRate,
      mplsTunnelInMaxBurstSize        BurstSize,
      mplsTunnelOutMaxRate            BitRate,
      mplsTunnelOutMeanRate           BitRate,
      mplsTunnelOutMaxBurstSize       BurstSize,
      mplsTunnelIsPinned              TruthValue,
      mplsTunnelIsPersistent          TruthValue,
      mplsTunnelAdminStatus           INTEGER,
      mplsTunnelOperStatus            INTEGER,
      mplsTunnelRowStatus             RowStatus
   }

mplsTunnelIndex OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Uniquely identifies this row."
   ::= { mplsTunnelEntry 1 }

mplsTunnelName OBJECT-TYPE
   SYNTAX        DisplayString
   MAX-ACCESS    read-create
   STATUS        current
DESCRIPTION
       "The 'canonical' name assigned to the tunnel that can
        be  used  to refer to it on the 'console' port.   If
        mplsTunnelIsIf  is  set  to  true  ifName   of   the
        interface corresponding to this tunnel should have a
        value   equal  to  mplsTunnelName.   Also  see   the
        description of ifName in RFC 2233."
   REFERENCE
       "RFC  2233  -  The Interfaces Group MIB using  SMIv2,
        McCloghrie and Kastenholtz, Nov. 1997"
   ::= { mplsTunnelEntry 2 }

mplsTunnelDescr OBJECT-TYPE
   SYNTAX        DisplayString
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "A  textual  string containing information about  the
        tunnel.   If  there  is no description  this  object
        contains a zero length string."
   ::= { mplsTunnelEntry 3 }

mplsTunnelIsIf OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Is this tunnel also an interface?"
   DEFVAL        { false }
   ::= { mplsTunnelEntry 4 }

mplsTunnelIfIndex OBJECT-TYPE
   SYNTAX        InterfaceIndexOrZero
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "If this tunnel is an interface then the LSR assigned
        ifIndex.  Otherwise this is set to zero."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 5 }

mplsTunnelDirection OBJECT-TYPE
   SYNTAX        INTEGER { in(1), out(2), in-out(3) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Whether   this  tunnel  is  unidirectional-incoming,
        unidirectional-outgoing, or bidirectional."
   ::= { mplsTunnelEntry 6 }

mplsTunnelXCIndex OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Index into mplsXCTable identifying the segments that
        compose    this   tunnel,   their   characteristics,
        relationship etc."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 7 }

mplsTunnelSignallingProto OBJECT-TYPE
   SYNTAX        INTEGER { none(1), ldp(2), rsvp(3) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The  signaling protocol, if any, that  set  up  this
        tunnel."
   DEFVAL        { none }
   ::= { mplsTunnelEntry 8 }

mplsTunnelLocalCookie OBJECT-TYPE
   SYNTAX        MplsTunnelCookie
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  local cookie assigned to the outgoing direction
        of this tunnel at this LSR."
   ::= { mplsTunnelEntry 9 }

mplsTunnelRemoteCookie OBJECT-TYPE
   SYNTAX        MplsTunnelCookie
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The remote cookie assigned to the incoming direction
        of tunnel by the remote (head-end) LSR."
   ::= { mplsTunnelEntry 10 }

mplsTunnelIsMergeable OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Whether  this  tunnel  can  be  merged  at  an   LSR
        downstream with another tunnel."
   DEFVAL        { true }
   ::= { mplsTunnelEntry 11 }

mplsTunnelSetupPrio OBJECT-TYPE
   SYNTAX        INTEGER (0..7)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The setup priority of this tunnel."
   REFERENCE
       "Extensions to RSVP for LSP Tunnels, Awduche  et  al,
        Internet  Draft <draft-mpls-rsvp-lsp-tunnel-00.txt>,
        Nov. 1998.  Explicit Routing over LDP Specification,
        Jamoussi et al, Internet Draft <draft-jamoussi-mpls-
        cr-ldp-01.txt>, Feb. 1999."
   ::= { mplsTunnelEntry 12 }

mplsTunnelHoldingPrio OBJECT-TYPE
   SYNTAX        INTEGER (0..7)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The holding priority for this tunnel."
   REFERENCE
       "Extensions to RSVP for LSP Tunnels, Awduche  et  al,
        Internet  Draft <draft-mpls-rsvp-lsp-tunnel-00.txt>,
        Nov.  1998; Explicit Routing over LDP Specification,
        Jamoussi et al, Internet Draft <draft-jamoussi-mpls-
        cr-ldp-01.txt>, Feb. 1999."
   ::= { mplsTunnelEntry 13 }

-- When resource allocation is performed as requested by
-- the following incoming TSpec objects, they are copied
-- into an entry in mplsTSpecTable: mplsTunnelInMaxRate
-- to mplsTSpecMaxRate, mplsTunnelInMeanRate to
-- mplsTSpecMeanRate, and mplsTunnelInMaxBurstSize
-- to mplsTSpecMaxBurstSize; mplsTSpecDirection of this
-- entry is set to in(1).  The mplsTSpecIndex value of this

-- entry is copied to  mplsInSegmentTSpecIndex of the
-- corresponding in-segment entry.

mplsTunnelInMaxRate OBJECT-TYPE
   SYNTAX        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The maximum incoming rate in bits/second.  Note that
        setting  mplsTunnelInMaxRate,  mplsTunnelInMeanRate,
        and  mplsTunnelInMaxBurstSize to 0  indicates  best-
        effort  treatment.   This object  is  copied  to  an
        instance  of mplsTSpecMaxRate in mplsTSpecTable  the
        index  of  which  is  copied into the  corresponding
        mplsInSegmentTSpecIndex."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 14 }

mplsTunnelInMeanRate OBJECT-TYPE
   SYNTAX        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This   object   is   copied  to   an   instance   of
        mplsTSpecMeanRate  in mplsTSpecTable  the  index  of
        which    is    copied    into   the    corresponding
        mplsInSegmentTSpecIndex."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 15 }

mplsTunnelInMaxBurstSize OBJECT-TYPE
   SYNTAX        BurstSize
   UNITS         "bytes"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The  maximum  burst size in bytes.  This  object  is
        copied    to   mplsInSegmentMaxBurstSize   of    the
        corresponding in-segment."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 16 }

-- When resource allocation is performed as requested by
-- the following outgoing TSpec objects, they are copied
-- into an entry in mplsTSpecTable: mplsTunnelOutMaxRate
-- to mplsTSpecMaxRate, mplsTunnelOutMeanRate to
-- mplsTSpecMeanRate, and mplsTunnelOutMaxBurstSize
-- to mplsTSpecMaxBurstSize; mplsTSpecDirection of this

-- entry is set to out(2).  The mplsTSpecIndex value of this
-- entry is copied to mplsOutSegmentTSpecIndex of the
-- corresponding out-segment entry.

mplsTunnelOutMaxRate OBJECT-TYPE
   SYNTAX        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The maximum outgoing rate in bits/second.  Note that
        setting mplsTunnelOutMaxRate, mplsTunnelOutMeanRate,
        and  mplsTunnelOutMaxBurstSize to 0 indicates  best-
        effort   treatment.   This  object  is   copied   to
        mplsOutSegmentMaxRate  of  the  corresponding   out-
        segment."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 17 }

mplsTunnelOutMeanRate OBJECT-TYPE
   SYNTAX        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The  mean outgoing rate in bits/second.  This object
        is   copied   to   mplsOutSegmentMeanRate   of   the
        corresponding out-segment."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 18 }

mplsTunnelOutMaxBurstSize OBJECT-TYPE
   SYNTAX        BurstSize
   UNITS         "bytes"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The  maximum  burst size in bytes.  This  object  is
        copied   to   mplsOutSegmentMaxBurstSize   of    the
        corresponding out-segment."
   DEFVAL        { 0 }
   ::= { mplsTunnelEntry 19 }

mplsTunnelIsPinned OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Indicates  whether  the loose-routed  hops  of  this
        tunnel are to be pinned."
   DEFVAL        { false }
   ::= { mplsTunnelEntry 20 }

mplsTunnelIsPersistent OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Indicates  whether  this tunnel should  be  restored
        automatically after failures."
   DEFVAL        { true }
   ::= { mplsTunnelEntry 21 }

mplsTunnelAdminStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),     -- ready to pass packets
         down(2),
         testing(3) -- in some test mode
      }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Desired status of this tunnel."
   ::= { mplsTunnelEntry 22 }

mplsTunnelOperStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),          -- ready to pass packets
         down(2),
         testing(3),     -- in some test mode
         unknown(4),     -- status cannot be determined for some
                         -- reason
         dormant(5),
         notPresent(6),  -- some component is missing
         lowerLayerNotPresent(7)
                       -- down due to the state of
                       -- lower layer interfaces
      }
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  operational status of this tunnel, typically  a
        function of the state of individual segments of this
        tunnel, among other things."
   ::= { mplsTunnelEntry 23 }

mplsTunnelRowStatus OBJECT-TYPE
   SYNTAX        RowStatus
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "For controlling the state of this row."
   ::= { mplsTunnelEntry 24 }

-- End of mplsTunnelTable

-- Maximum number of tunnel hops supported.

mplsTunnelMaxHops OBJECT-TYPE
   SYNTAX        RowStatus
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The maximum number of hops that can be specified for
        a tunnel on this device."
   ::= { mplsTeObjects 2 }

-- Tunnel hop table.

mplsTunnelHopTable  OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsTunnelEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "The mplsTunnelHopTable is used to indicate the hops,
        strict  or  loose,  for an MPLS  tunnel  defined  in
        mplsTunnelTable,   when  it   is   established   via
        signaling, for the outgoing direction of the tunnel.
        Each  row in this table is indexed primarily by  the
        same  index,  mplsTunnelIndex, as  the  row  of  the
        corresponding tunnel in mplsTunnelTable.   Each  row
        also   has   a  secondary  index  mplsTunnelHopIndex
        corresponding  to  the  next  hop  that   this   row
        corresponds to.  The first row in the table  is  the
        first hop after the origination point of the tunnel.
        In case we want to specify a particular interface on
        the  originating LSR of an outgoing tunnel by  which
        we  want packets to exit the LSR, we specify this as
        the     first    hop    for    this    tunnel     in
        mplsTunnelHopTable."
   ::= { mplsTeObjects 3 }

mplsTunnelHopEntry  OBJECT-TYPE
   SYNTAX        MplsTunnelHopEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "An  entry in this table represents a tunnel hop.  An
        entry  is  created  by a network  administrator  for
        signalled ERLSP set up by LDP or RSVP."
   INDEX         {  mplsTunnelIndex, mplsTunnelHopIndex  }
      ::= { mplsTunnelHopTable 1 }

MplsTunnelHopEntry ::= SEQUENCE {
      mplsTunnelHopIndex              Integer32,
      mplsTunnelHopAddrType           INTEGER,
      mplsTunnelHopIpv4Addr           IpAddress,
      mplsTunnelHopIpv4PrefixLen      INTEGER,
      mplsTunnelHopIpv6Addr           Ipv6Address,
      mplsTunnelHopIpv6PrefixLen      INTEGER,
      mplsTunnelHopAsNumber           INTEGER,
      mplsTunnelHopStrictOrLoose      INTEGER,
      mplsTunnelHopRowStatus          RowStatus
   }

mplsTunnelHopIndex OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "Secondary  index  into  this table  identifying  the
        particular hop."
   ::= { mplsTunnelHopEntry 1 }

mplsTunnelHopAddrType OBJECT-TYPE
   SYNTAX        INTEGER { ipV4(1), ipV6(2), asNumber(3) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Address type of this hop."
   DEFVAL        { ipV4 }
   ::= { mplsTunnelHopEntry 2 }

mplsTunnelHopIpv4Addr OBJECT-TYPE
   SYNTAX        IpAddress
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "If mplsTunnelHopAddrType is ipV4(1), IPv4 address of
        this  hop.  This object is not significant otherwise
        and should return a value of 0."
   ::= { mplsTunnelHopEntry 3 }

mplsTunnelHopIpv4PrefixLen OBJECT-TYPE
   SYNTAX        INTEGER (0..31)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "If  mplsTunnelHopAddrType is ipV4(1), prefix  length
        for  this  hop's IPv4 address.  This object  is  not
        significant otherwise and should return a  value  of
        0."
   ::= { mplsTunnelHopEntry 4 }

mplsTunnelHopIpv6Addr OBJECT-TYPE
   SYNTAX        Ipv6Address
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "If   mplsTunnelHopAddrType  is  ipV6(2),  the   IPv6
        address of this hop.  This object is not significant
        otherwise and should return a value of 0."
   ::= { mplsTunnelHopEntry 5 }

mplsTunnelHopIpv6PrefixLen OBJECT-TYPE
   SYNTAX        INTEGER (0..127)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "If  mplsTunnelHopAddrType is ipV6(2), prefix  length
        for  this  hop's IPv6 address.  This object  is  not
        significant otherwise and should return a  value  of
        0."
   ::= { mplsTunnelHopEntry 6 }

mplsTunnelHopAsNumber OBJECT-TYPE
   SYNTAX        INTEGER (0..65535)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "If  mplsTunnelHopAddrType  is  asNumber(3),  the  AS
        number  this  hop.  This object is  not  significant
        otherwise and should return a value of 0."
   ::= { mplsTunnelHopEntry 7 }

mplsTunnelHopStrictOrLoose OBJECT-TYPE
   SYNTAX        INTEGER { strict(1), loose(2) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Whether this is a strict or loose hop."
   ::= { mplsTunnelHopEntry 8 }

mplsTunnelHopRowStatus OBJECT-TYPE
   SYNTAX        RowStatus
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "For creating, modifying and deleting this row."
   ::= { mplsTunnelHopEntry 9 }

-- End of mplsTunnelHopTable

-- MPLS Interface Configuration Table.

mplsInterfaceConfTable  OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsInterfaceConfEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "This  table  specifies per-interface MPLS capability
        and associated information."
   ::= { mplsTeObjects 4 }

mplsInterfaceConfEntry OBJECT-TYPE
   SYNTAX        MplsInterfaceConfEntry
   MAX-ACCESS    not-accessible
   STATUS        current
       DESCRIPTION
       "An  entry  in this table is created by  an  LSR  for
        every  interface  capable  of  supporting  MPLS  and
        represents the label space of that interface.  A row
        with index 0 represents the global label space."
   INDEX       {  mplsInterfaceConfIndex  }
      ::= { mplsInterfaceConfTable 1 }

MplsInterfaceConfEntry ::= SEQUENCE {
      mplsInterfaceConfIndex      InterfaceIndexOrZero,
      mplsInterfaceLabelMinIn     MplsLabel,
      mplsInterfaceLabelMaxIn     MplsLabel,
      mplsInterfaceLabelMinOut    MplsLabel,
      mplsInterfaceLabelMaxOut    MplsLabel,
      mplsInterfaceAdminStatus    INTEGER,
      mplsInterfaceOperStatus     INTEGER
   }

mplsInterfaceConfIndex OBJECT-TYPE
   SYNTAX        InterfaceIndexOrZero
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Index  for  this row of the table.   A  value  of  0
        indicates the global label space and this  entry  is
        created  by  the LSR if it supports a  global  label
        space.   A  non-zero  index is  also  the  interface
        index,  ifIndex,  for  the  corresponding  interface
        entry in ifTable."
   REFERENCE
       "RFC  2233  -  The Interfaces Group MIB using  SMIv2,
        McCloghrie and Kastenholtz, Nov. 1997"
   ::= { mplsInterfaceConfEntry 1 }

mplsInterfaceLabelMinIn OBJECT-TYPE
   SYNTAX        MplsLabel
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Minimum value of MPLS label that this LSR is willing
        to receive on this interface."
   ::= { mplsInterfaceConfEntry 2 }

mplsInterfaceLabelMaxIn OBJECT-TYPE
   SYNTAX        MplsLabel
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Maximum value of MPLS label that this LSR is willing
        to receive on this interface."
   ::= { mplsInterfaceConfEntry 3 }

mplsInterfaceLabelMinOut OBJECT-TYPE
   SYNTAX        MplsLabel
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Minimum value of MPLS label that this LSR is willing
        to send on this interface."
   ::= { mplsInterfaceConfEntry 4 }

mplsInterfaceLabelMaxOut OBJECT-TYPE
   SYNTAX        MplsLabel
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Maximum value of MPLS label that this LSR is willing
        to send on this interface."
   ::= { mplsInterfaceConfEntry 5 }

mplsInterfaceAdminStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),     -- enable MPLS on this interface
         down(2),   -- disable MPLS on this interface
         testing(3) -- in some test mode
      }
   MAX-ACCESS    read-write
   STATUS        current
   DESCRIPTION
       "Indicates the administrator's intent as to   whether
        MPLS   should  be  enabled  or  disabled   on   this
        interface."
   DEFVAL        { down }
   ::= { mplsInterfaceConfEntry 6 }

mplsInterfaceOperStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),          -- ready to pass packets
         down(2),
         testing(3),     -- in some test mode
         unknown(4),     -- status cannot be determined for some
                         -- reason
         dormant(5),
         notPresent(6),  -- some component is missing
         lowerLayerNotPresent(7)
                       -- down due to the state of
                       -- lower layer interfaces
      }
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Indicates  the  actual  status  of  MPLS   on   this
        interface."
   ::= { mplsInterfaceConfEntry 7 }

-- End of mplsInterfaceConfTable

-- MPLS Interface Performance Table.

mplsInterfacePerfTable  OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsInterfacePerfEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "This  table  provides per-interface MPLS performance
        information."
   ::= { mplsTeObjects 5 }

mplsInterfacePerfEntry OBJECT-TYPE
   SYNTAX        MplsInterfacePerfEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "An  entry  in this table is created by the  LSR  for
        every interface capable of supporting MPLS.  Its  is
        an extension to mplsInterfaceConfEntry."
   AUGMENTS      { mplsInterfaceConfEntry }
      ::= { mplsInterfacePerfTable 1 }

MplsInterfacePerfEntry ::= SEQUENCE {
      -- incoming direction
      mplsInterfaceInLabelsUsed           Gauge32,
      mplsInterfaceInOctets               Counter32,
      mplsInterfaceInPackets              Counter32,
      mplsInterfaceInErrors               Counter32,
      mplsInterfaceInDiscards             Counter32,
      mplsInterfaceFailedLabelLookup      Counter32,

      -- outgoing direction
      mplsInterfaceOutLabelsUsed          Gauge32,
      mplsInterfaceOutOctets              Counter32,
      mplsInterfaceOutPackets             Counter32,
      mplsInterfaceOutErrors              Counter32,
      mplsInterfaceOutDiscards            Counter32,

      -- high capacity counters
      mplsInterfaceInHCOctets             Counter64,
      mplsInterfaceOutHCOctets            Counter64
   }

mplsInterfaceInLabelsUsed OBJECT-TYPE
   SYNTAX        Gauge32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  number of labels that are in use at this  point
        on this interface in the incoming direction."
   ::= { mplsInterfacePerfEntry 1 }

mplsInterfaceInOctets OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  number  of  octets that have been  received  in
        labeled packets on this interface."
   ::= { mplsInterfacePerfEntry 2 }

mplsInterfaceInPackets OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The   number  of  labeled  packets  that  have  been
        received on this interface."
   ::= { mplsInterfacePerfEntry 3 }

mplsInterfaceInErrors OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The   number  of  labeled  packets  that  have  been
        received on this interface that were errored."
   ::= { mplsInterfacePerfEntry 4 }

mplsInterfaceInDiscards OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The   number  of  labeled  packets  that  have  been
        received on this interface that were discarded."
   ::= { mplsInterfacePerfEntry 5 }

mplsInterfaceFailedLabelLookup OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The   number  of  labeled  packets  that  have  been
        received  on  this  interface  that  were  discarded
        because   no   matching  entries   were   found   in
        mplsInSegmentTable."
   ::= { mplsInterfacePerfEntry 6 }

mplsInterfaceOutLabelsUsed OBJECT-TYPE
   SYNTAX        Gauge32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  number of labels that are in use at this  point
        on this interface in the outgoing direction."
   ::= { mplsInterfacePerfEntry 7 }

mplsInterfaceOutOctets OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  number of octets that have been sent as labeled
        packets on this interface."
   ::= { mplsInterfacePerfEntry 8 }

mplsInterfaceOutPackets OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The number of labeled packets that have been sent on
        this interface."
   ::= { mplsInterfacePerfEntry 9 }

mplsInterfaceOutErrors OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The number of labeled packets that could not be sent
        on this interface due to errors."
   ::= { mplsInterfacePerfEntry 10 }

mplsInterfaceOutDiscards OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  number  of  outgoing labeled  packets  on  this
        interface that had to be discarded due to errors  or
        other conditions such as buffer overflows."
   ::= { mplsInterfacePerfEntry 11 }

mplsInterfaceInHCOctets OBJECT-TYPE
   SYNTAX        Counter64
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  number  of  octets that have been  received  in
        labeled packets on this interface.  This is  the  64
        bit version of mplsInterfaceInOctets."
   ::= { mplsInterfacePerfEntry 15 }

mplsInterfaceOutHCOctets OBJECT-TYPE
   SYNTAX        Counter64
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The  number of octets that have been sent in labeled
        packets  on  this interface.  This  is  the  64  bit
        version of mplsInterfaceOutOctets."
   ::= { mplsInterfacePerfEntry 16 }

-- End of mplsInterfacePerfTable

-- In-segment table.

mplsInSegmentTable  OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsInSegmentEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "This  table  contains a description of the  incoming
        segments to a LSR."
   ::= { mplsTeObjects 6 }

mplsInSegmentEntry  OBJECT-TYPE
   SYNTAX        MplsInSegmentEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "An  entry  in  this  table represents  one  incoming
        segment.   An  entry  can be created  by  a  network
        administrator  or by an SNMP agent as instructed  by
        LDP   or  RSVP.   It  is  indexed  by  the  incoming
        interface index and (top) label.  Note that some  of
        the  segments  are  associated with  a  tunnel,  the
        traffic  parameters of these rows are  supported  as
        read-only objects and their modification can be done
        only via the tunnel table."
   INDEX         { mplsInSegmentIfIndex, mplsInSegmentLabel }
      ::= { mplsInSegmentTable 1 }

MplsInSegmentEntry ::= SEQUENCE {
      mplsInSegmentIfIndex         InterfaceIndex,
      mplsInSegmentLabel           MplsLabel,
      mplsInSegmentNPop            Integer32,
      mplsInSegmentAddrFamily      MplsTeIANAAddrFamily,
      mplsInSegmentXCIndex         Integer32,
      mplsInSegmentTSpecIndex      Unsigned32,
      mplsInSegmentAdminStatus     INTEGER,
      mplsInSegmentOperStatus      INTEGER,
      mplsInSegmentRowStatus       RowStatus
   }

mplsInSegmentIfIndex OBJECT-TYPE
   SYNTAX        InterfaceIndexOrZero
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Incoming   interface  index.   A   value   of   zero
        represents  an incoming label from the  per-platform
        label  space.   In this case, the mplsInSegmentLabel
        is interpreted to be an MPLS-type label."
   ::= { mplsInSegmentEntry 1 }

mplsInSegmentLabel OBJECT-TYPE
   SYNTAX        MplsLabel
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "The incoming label."
   ::= { mplsInSegmentEntry 2 }

mplsInSegmentNPop OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The  number  of  labels  to pop  from  the  incoming
        packet.   Normally  only the  top  label  is  popped
        (based on which all switching decisions are taken)."
   DEFVAL        { 1 }
   ::= { mplsInSegmentEntry 3 }

mplsInSegmentAddrFamily OBJECT-TYPE
   SYNTAX        MplsTeIANAAddrFamily
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The  IANA address family of the incoming packet.   A
        value  of  zero  indicates that the family  type  is
        either unknown or undefined (which could happen  for
        example  when streams of different types are  merged
        in a multipoint-to-point connection)."
   REFERENCE
       "RFC  1700  - Assigned Numbers, Reynolds and  Postel,
        October 1994."
   DEFVAL        { 0 }
   ::= { mplsInSegmentEntry 4 }

mplsInSegmentXCIndex OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Index  into  mplsXCTable to  identify  which  cross-
        connect  entry this segment is part of.  A value  of
        zero  indicates that it is not being referred to  by
        any cross-connect entry."
   DEFVAL        { 0 }
   ::= { mplsInSegmentEntry 5 }

mplsInSegmentTSpecIndex OBJECT-TYPE
   SYNTAX        Unsigned32
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Pointer into mplsTSpecTable indicating the TSpec  to
        be  assigned  for  this segment.  A  value  of  zero
        indicates  best-effort  treatment.   Two   or   more
        segments  can indicate resource sharing by  pointing
        to the same entry in mplsTSpecTable."
   DEFVAL        { 0 }
   ::= { mplsInSegmentEntry 6 }

mplsInSegmentAdminStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),      -- ready to pass packets
         down(2),
         testing(3)  -- in some test mode
      }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Desired status of this segment."
   ::= { mplsInSegmentEntry 7 }

mplsInSegmentOperStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),          -- ready to pass packets
         down(2),
         testing(3),     -- in some test mode
         unknown(4),     -- status cannot be determined for
                       -- some reason
         dormant(5),
         notPresent(6),  -- some component is missing
         lowerLayerNotPresent(7)
                       -- down due to the state of
                       -- lower layer interfaces
      }
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The operational status of this segment."
   ::= { mplsInSegmentEntry 8 }

mplsInSegmentRowStatus OBJECT-TYPE
   SYNTAX        RowStatus
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "For creating, modifying, and deleting this row."
   ::= { mplsInSegmentEntry 9 }

-- End of mplsInSegmentTable

-- In-segment performance table.

mplsInSegmentPerfTable  OBJECT-TYPE
   SYNTAX    SEQUENCE OF MplsInSegmentPerfEntry
   MAX-ACCESS       not-accessible
   STATUS    current
   DESCRIPTION
       "This  table  contains statistical information  about
        incoming MPLS segments to an LSR."
   ::= { mplsTeObjects 7 }

mplsInSegmentPerfEntry  OBJECT-TYPE
   SYNTAX        MplsInSegmentPerfEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "An   entry   in   this  table  contains  statistical
        information about one incoming segment configured in
        mplsInSegmentTable."
   AUGMENTS      { mplsInSegmentEntry }
      ::= { mplsInSegmentPerfTable 1 }

MplsInSegmentPerfEntry ::= SEQUENCE {
      mplsInSegmentOctets             Counter32,
      mplsInSegmentPackets            Counter32,
      mplsInSegmentErrors             Counter32,
      mplsInSegmentDiscards           Counter32,

      -- high capacity counter
      mplsInSegmentHCOctets           Counter64
   }

mplsInSegmentOctets OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Total number of octets received."
   ::= { mplsInSegmentPerfEntry 1 }

mplsInSegmentPackets OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Total number of packets received."
   ::= { mplsInSegmentPerfEntry 2 }

mplsInSegmentErrors OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Number of errored packets received."
   ::= { mplsInSegmentPerfEntry 3 }

mplsInSegmentDiscards OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Number  of  packets received that had to be  dropped
        either  because of errors or for other reasons  such
        as buffer overflows."
   ::= { mplsInSegmentPerfEntry 4 }

mplsInSegmentHCOctets OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Total number of octets received.  This is the 64 bit
        version of mplsInSegmentOctets."
   ::= { mplsInSegmentPerfEntry 5 }

-- End of mplsInSegmentPerfTable.

-- Out-segment table.

mplsOutSegmentTable  OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsOutSegmentEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "This  table  contains a description of the  outgoing
        segments from an LSR."
   ::= { mplsTeObjects 8 }

mplsOutSegmentEntry  OBJECT-TYPE
   SYNTAX        MplsOutSegmentEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "An  entry  in  this  table represents  one  outgoing
        segment.   An  entry  can be created  by  a  network
        administrator  or by an SNMP agent as instructed  by
        LDP  or  RSVP.   Note that some of the segments  are
        associated with a tunnel, the traffic parameters  of
        these  rows  are supported as read-only objects  and
        their  modification can be done only via the  tunnel
        table."
   INDEX         { mplsOutSegmentIndex }
      ::= { mplsOutSegmentTable 1 }

MplsOutSegmentEntry ::= SEQUENCE {
      mplsOutSegmentIndex                     Integer32,
      mplsOutSegmentIfIndex                   InterfaceIndex,
      mplsOutSegmentPushTopLabel              TruthValue,
      mplsOutSegmentTopLabel                  MplsLabel,
      mplsOutSegmentNextHopIpAddrType         INTEGER,
      mplsOutSegmentNextHopIpv4Addr           IpAddress,
      mplsOutSegmentNextHopIpv6Addr           Ipv6Address,
      mplsOutSegmentXCIndex                   Integer32,
      mplsOutSegmentTSpecIndex                Unsigned32,
      mplsOutSegmentAdminStatus               INTEGER,
      mplsOutSegmentOperStatus                INTEGER,
      mplsOutSegmentRowStatus                 RowStatus
   }

mplsOutSegmentIndex OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "Unique  index for this row.  While a value of  0  is
        not  valid  as  an  index for this  row  it  can  be
        supplied Traffic  Engineering
        (TE)  as  a valid value to index mplsXCTable  defined  in: Extensions to
        access  entries  RSVP  for which no out-segment  has  been
        configured."  LSP
        Tunnels,  Awduche et al, Internet Draft <draft-mpls-
        rsvp-lsp-tunnel-02.txt>,  March  1999;   Constraint-
        Based  LSP Setup using LDP, Jamoussi, Internet Draft
        < draft-ietf-mpls-cr-ldp-01.txt>, Feb. 1999."
   ::= { mplsOutSegmentEntry 1 experimental 95 }

mplsOutSegmentIfIndex OBJECT-TYPE
   SYNTAX        InterfaceIndex
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Interface index of the outgoing interface."

-- Textual Conventions.

-- An MPLS label.
MplsLabel ::= { mplsOutSegmentEntry 2 }

mplsOutSegmentPushTopLabel OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-create TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "Whether  a  top  label should  be  pushed  onto  the
        outgoing packet's label stack.  Its value has to  be
        true  if  the outgoing interface is ATM (which  does
        not  support  `pop-and-go') or if  it  is  a  tunnel
        origination.    Note  also  that  the   case   where
        mplsOutSegmentPushTopLabel is set to false  but  the
        cross-connect entry that refers to this  out-segment
        has a non-zero mplsLabelStackIndex is
       "Represents an error which
        the LSR should ensure doesn't happen."
   ::= { mplsOutSegmentEntry 3 }

mplsOutSegmentTopLabel OBJECT-TYPE
   SYNTAX        MplsLabel
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "If  mplsOutSegmentPushTopLabel is true then this  is
        the  label  that should be pushed onto the  outgoing
        packet's label stack. MPLS label.  Note that the contents of the
        a  label  field  can  be are interpreted in an  outgoing
        interface interface-type
        specific fashion.  For example, the label carried in
        the MPLS shim header is 20 bits wide and the top  12
        bits  must  be zero.  The Frame Relay frame relay label
        is  24  can  be
        either 10, 17 or 23 bits wide depending on the  size
        of the DLCI field size and the top 8 22, 15, or 9 bits
        must  be  zero.  zero, respectively.  For an ATM  interfaces interface,
        the  lowermost 16 bits are interpreted as  the  VCI,
        the  next  8 bits as the  VPI
        and the remaining bits must be zero."
   ::= { mplsOutSegmentEntry 4 }

mplsOutSegmentNextHopIpAddrType OBJECT-TYPE
   SYNTAX        INTEGER { none (1), ipV4 (2), ipV6 (3) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Whether  the next hop address is IPv4  or  IPv6.   A
        value  of none (1) is valid (only) when the outgoing
        interface is of type point-to-point."
   DEFVAL        { none }
   ::= { mplsOutSegmentEntry 5 }

mplsOutSegmentNextHopIpv4Addr OBJECT-TYPE
   SYNTAX        IpAddress
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "IPv4  Address  of  the  next  hop.   Its  value   is
        significant                only                 when
        mplsOutSegmentNextHopIpAddrType   is    ipV4    (2),
        otherwise it should return VPI and the remaining  bits
        must  be  zero.   Also  note the  permissible  label
        values  are  also a value of 0."
   ::= { mplsOutSegmentEntry 6 }

mplsOutSegmentNextHopIpv6Addr OBJECT-TYPE
   SYNTAX        Ipv6Address
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "IPv6  address function of the  next  hop.   Its interface  type.
        For  example,  the value 3 has special semantics  in
        the  control plane for an MPLS shim header label and
        is
        significant                only                 when
        mplsOutSegmentNextHopIpAddrType   is    ipV6    (3),
        otherwise it should return not a valid label value in the datapath."
   REFERENCE
       "1.  MPLS  Label Stack Encoding, Rosen et al,  draft-
        ietf-mpls-label-encaps-04.txt, April 1999.
       2.  Use  of 0."
   ::= { mplsOutSegmentEntry 7 }

mplsOutSegmentXCIndex OBJECT-TYPE  Label Switching on Frame Relay Networks,
        Conta et al, draft-ietf-mpls-fr-03.txt, Nov. 1998."
   SYNTAX Integer32
   MAX-ACCESS    read-create

MplsTunnelIndex ::= TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "Index into  mplsXCTable mplsTunnelTable."
   SYNTAX        INTEGER (0..65535)

MplsTunnelCookie ::= TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "A  globally  unique identifier that is  assigned  to
        each ERLSP.  This is assigned at the head end of the
        ERLSP  and can be used by all LSRs to identify  which  cross-
        connect  entry  this segment
        ERLSP.  At the head end this cookie is part of.  A value  of
        zero  indicates that it maintained in
        the  tunnel  table  as  mplsTunnelLocalCookie.   For
        signalled tunnels this cookie is not being referred to piggybacked by
        any cross-connect entry."
   DEFVAL        { 0 }
   ::= { mplsOutSegmentEntry 8 }

mplsOutSegmentTSpecIndex OBJECT-TYPE
   SYNTAX        Unsigned32
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Pointer into mplsTSpecTable indicating  the TSpec  to
        signaling  protocol  to the  remote  end  where  the
        cookie is stored in the remote LSR's tunnel table as
        mplsTunnelRemoteCookie for the tunnel.  For creating
        bi-directional  tunnels  the  cookie  is   used   to
        associate   the   two  uni-directional   ERLSPs   as
        belonging to the same tunnel.

        It  is recommended that the cookie value be assigned  for  this segment.  A  value  of  zero
        indicates  best-effort  treatment.   Two   or   more
        segments  can indicate resource sharing
        by  pointing
        to  concatenating the same entry head-end LSR's IP address with
        the  tunnel index.  For IPv4 addresses this  results
        in mplsTSpecTable."
   DEFVAL        { 0 }
   ::= { mplsOutSegmentEntry 9 }

mplsOutSegmentAdminStatus OBJECT-TYPE a 6-octet long cookie."
   SYNTAX        INTEGER {
         up(1),     -- ready to pass packets
         down(2),
         testing(3) -- in some test mode
      }
   MAX-ACCESS    read-create        OCTET STRING (SIZE(6))

Ipv6Address ::= TEXTUAL-CONVENTION
   STATUS      current
   DESCRIPTION
       "Desired status
       "IPv6 address."
   SYNTAX      OCTET STRING (SIZE(16))

-- Top level components of this segment." MIB.

-- tables, scalars
mplsTeObjects       OBJECT IDENTIFIER ::= { mplsOutSegmentEntry 10 mplsTeMIB 1 }

mplsOutSegmentOperStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),          -- ready to pass packets
         down(2),
         testing(3),     -- in some test mode
         unknown(4),     -- status cannot be determined for
                       -- some reason
         dormant(5),
         notPresent(6),  -- some component is missing
         lowerLayerNotPresent(7)
                       -- down due to the state of
-- lower layer interfaces
      }
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The operational status of this segment." traps
mplsTeNotifications OBJECT IDENTIFIER ::= { mplsOutSegmentEntry 11 mplsTeMIB 2 }

mplsOutSegmentRowStatus OBJECT-TYPE
   SYNTAX        RowStatus
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "For creating, modifying, and deleting this row."
-- conformance
mplsTeConformance   OBJECT IDENTIFIER ::= { mplsOutSegmentEntry 12 mplsTeMIB 3 }

-- End of mplsOutSegmentTable

-- Out-segment performance MPLS tunnel table.

mplsOutSegmentPerfTable

mplsTunnelTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsOutSegmentPerfEntry MplsTunnelEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "This  table  contains statistical information  about
        incoming segments
       "The  mplsTunnelTable allows new MPLS tunnels  to  be
        created  between an LSR and a remote  endpoint,  and
        existing  tunnels  to  be reconfigured  or  removed.
        Note  that  only point-to-point tunnel segments  are
        supported, although multipoint-to-point and point-to-
        multipoint  connections  are  supported  by  an  LSR
        acting  as  a cross-connect.  Each MPLS  tunnel  can
        thus  have one out-segment originating at  this  LSR
        and/or one in-segment terminating at this LSR."
   ::= { mplsTeObjects 9 1 }

mplsOutSegmentPerfEntry

mplsTunnelEntry OBJECT-TYPE
   SYNTAX        MplsOutSegmentPerfEntry        MplsTunnelEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "An  entry  in this table  contains  statistical
        information about one incoming segment configured represents an MPLS  tunnel.
        An  entry  can be created by a network administrator
        or  by  an SNMP agent as instructed by LDP or  RSVP.
        Whenever an new entry is created with mplsTunnelIsIf
        set  to  true(1),  then  a  corresponding  entry  is
        created  in
        mplsOutSegmentTable."
   AUGMENTS  ifTable  as well (see  RFC  2233).  The
        ifType   of  this  entry  is  mplsTunnel(150)   (see
        http://www.isi.edu/in-notes/iana/assignments/smi-
        numbers)."
   INDEX         { mplsOutSegmentEntry  mplsTunnelIndex  }
      ::= { mplsOutSegmentPerfTable mplsTunnelTable 1 }

MplsOutSegmentPerfEntry

MplsTunnelEntry ::= SEQUENCE {
      mplsOutSegmentOctets                Counter32,
      mplsOutSegmentPackets               Counter32,
      mplsOutSegmentErrors                Counter32,
      mplsOutSegmentDiscards              Counter32,

      -- HC counter
      mplsOutSegmentHCOctets              Counter64
      mplsTunnelIndex                 MplsTunnelIndex,
      mplsTunnelName                  DisplayString,
      mplsTunnelDescr                 DisplayString,
      mplsTunnelIsIf                  TruthValue,
      mplsTunnelIfIndex               InterfaceIndexOrZero,
      mplsTunnelDirection             INTEGER,
      mplsTunnelXCIndex               Integer32,
      mplsTunnelSignallingProto       INTEGER,
      mplsTunnelLocalCookie           MplsTunnelCookie,
      mplsTunnelRemoteCookie          MplsTunnelCookie,
      mplsTunnelIsMergeable           TruthValue,
      mplsTunnelSetupPrio             INTEGER,
      mplsTunnelHoldingPrio           INTEGER,
      mplsTunnelInMaxRate             BitRate,
      mplsTunnelInMeanRate            BitRate,
      mplsTunnelInMaxBurstSize        BurstSize,
      mplsTunnelOutMaxRate            BitRate,
      mplsTunnelOutMeanRate           BitRate,
      mplsTunnelOutMaxBurstSize       BurstSize,
      mplsTunnelIsPinned              TruthValue,
      mplsTunnelIsPersistent          TruthValue,
      mplsTunnelAdminStatus           INTEGER,
      mplsTunnelOperStatus            INTEGER,
      mplsTunnelRowStatus             RowStatus
   }

mplsOutSegmentOctets

mplsTunnelIndex OBJECT-TYPE
   SYNTAX        Counter32        Integer32
   MAX-ACCESS    read-only    read-create
   STATUS        current
   DESCRIPTION
       "Total number of octets sent."
       "Uniquely identifies this row."
   ::= { mplsOutSegmentPerfEntry mplsTunnelEntry 1 }

mplsOutSegmentPackets

mplsTunnelName OBJECT-TYPE
   SYNTAX        Counter32        DisplayString
   MAX-ACCESS    read-only    read-create
   STATUS        current
DESCRIPTION
       "Total number
       "The 'canonical' name assigned to the tunnel that can
        be  used  to refer to it on the 'console' port.   If
        mplsTunnelIsIf  is  set  to  true  ifName   of packets sent."   the
        interface corresponding to this tunnel should have a
        value   equal  to  mplsTunnelName.   Also  see   the
        description of ifName in RFC 2233."
   REFERENCE
       "RFC  2233  -  The Interfaces Group MIB using  SMIv2,
        McCloghrie and Kastenholtz, Nov. 1997"
   ::= { mplsOutSegmentPerfEntry mplsTunnelEntry 2 }

mplsOutSegmentErrors

mplsTunnelDescr OBJECT-TYPE
   SYNTAX        Counter32        DisplayString
   MAX-ACCESS    read-only    read-create
   STATUS        current
   DESCRIPTION
       "Number  of  packets that could not be  sent  due  to
        errors."
       "A  textual  string containing information about  the
        tunnel.   If  there  is no description  this  object
        contains a zero length string."
   ::= { mplsOutSegmentPerfEntry mplsTunnelEntry 3 }

mplsOutSegmentDiscards OBJECT-TYPE
   SYNTAX        Counter32
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Number  of  outgoing packets that had to be  dropped
        either  because of errors or for other reasons  such
        as buffer overflows."

mplsTunnelIsIf OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Is this tunnel also an interface?"
   DEFVAL        { false }
   ::= { mplsOutSegmentPerfEntry mplsTunnelEntry 4 }

mplsOutSegmentHCOctets

mplsTunnelIfIndex OBJECT-TYPE
   SYNTAX        Counter64        InterfaceIndexOrZero
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "Total  number of octets sent.  This
       "If this tunnel is an interface then the  64  bit
        version of mplsOutSegmentOctets." LSR assigned
        ifIndex.  Otherwise this is set to zero."
   DEFVAL        { 0 }
   ::= { mplsOutSegmentPerfEntry mplsTunnelEntry 5 }

-- End of mplsOutSegmentPerfTable.

-- Cross-connect table.

mplsXCTable

mplsTunnelDirection OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsXCEntry        INTEGER { in(1), out(2), in-out(3) }
   MAX-ACCESS    not-accessible    read-create
   STATUS        current
   DESCRIPTION
       "This   table  specifies  information  for  switching
        between MPLS tunnels segments.  It supports point-to-
        point,  point-to-multipoint and  multipoint-to-point
        connections.    mplsLabelStackTable  specifies   the
        label stack information for a cross-connect LSR  and
       "Whether   this  tunnel  is referred to from mplsXCTable."  unidirectional-incoming,
        unidirectional-outgoing, or bidirectional."
   ::= { mplsTeObjects 10 mplsTunnelEntry 6 }

mplsXCEntry

mplsTunnelXCIndex OBJECT-TYPE
   SYNTAX        MplsXCEntry        Integer32
   MAX-ACCESS    not-accessible    read-create
   STATUS        current
   DESCRIPTION
       "A  row  in  this  table represents one cross-connect
        entry.  It is indexed by
       "Index into mplsXCTable identifying the following objects:

          - cross-connect  index mplsXCIndex segments that  uniquely
            identifies a group of cross-connect entries
          - interface     index    of    the     in-segment,
            mplsInSegmentIfIndex
          - incoming label(s), mplsInSegmentLabel
          - out-segment index, mplsOutSegmentIndex

       Originating LSPs:
        These   are   represented  by  using   the   special
        combination  of  values  mplsInSegmentIfIndex=0  and
        mplsInSegmentLabel=0 as indexes.  In
        compose    this  case  the
        mplsOutSegmentIndex MUST be non-zero.

       Terminating LSPs:
        These  are  represented by using the  special  value
        mplsOutSegmentIndex=0 as index.

       Special labels:
        Entries  indexed  by reserved MPLS  label  values  0
        through  15  imply terminating LSPs   tunnel,   their   characteristics,
        relationship etc."
   REFERENCE
       "  Srinivasan,  C.,  and  MUST  have
        mplsOutSegmentIndex=0.

        An  entry  can be created by a network administrator
        or by an SNMP agent as instructed by LDP or RSVP."
   INDEX A. Viswanathan,  MPLS  Label
        Switch  Router  Management  Information  Base  Using
        SMIv2,   Internet   Draft  <draft-ietf-mpls-lsr-mib-
        00.txt>, June 1999."
   DEFVAL        { mplsXCIndex, mplsInSegmentIfIndex,
                mplsInSegmentLabel, mplsOutSegmentIndex 0 }
   ::= { mplsXCTable 1 mplsTunnelEntry 7 }

MplsXCEntry ::= SEQUENCE

mplsTunnelSignallingProto OBJECT-TYPE
   SYNTAX        INTEGER {
      mplsXCIndex                 INTEGER,
      mplsXCLabelStackIndex       Integer32,
      mplsXCCOS                   Integer32,
      mplsXCIsPersistent          TruthValue,
      mplsXCAdminStatus           INTEGER,
      mplsXCOperStatus            INTEGER,
      mplsXCRowStatus             RowStatus none(1), ldp(2), rsvp(3) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "The  signaling protocol, if any, that  set  up  this
        tunnel."
   DEFVAL        { none }

mplsXCIndex OBJECT-TYPE
   SYNTAX        INTEGER (0..4294967295)
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "Primary  index for the row identifying  a  group  of
        cross-connect segments."
   ::= { mplsXCEntry 1 mplsTunnelEntry 8 }

   mplsXCLabelStackIndex

mplsTunnelLocalCookie OBJECT-TYPE
   SYNTAX        Integer32        MplsTunnelCookie
   MAX-ACCESS    read-create    read-only
   STATUS        current
   DESCRIPTION
       "Primary index into mplsLabelStackTable identifying a
        stack  of labels
       "The  local cookie assigned to be pushed beneath the top label.
        Note  that the top label is identified in  the  out-
        segment which ensures that all the components  of  a
        multipoint-to-point   connection   have   the   same outgoing  label.   A  value direction
        of 0 indicates  that  no
        labels are to be stacked beneath the top label." this tunnel at this LSR."
   ::= { mplsXCEntry 2 mplsTunnelEntry 9 }

mplsXCCOS

mplsTunnelRemoteCookie OBJECT-TYPE
   SYNTAX        Integer32        MplsTunnelCookie
   MAX-ACCESS    read-create    read-only
   STATUS        current
   DESCRIPTION
       "Value
       "The remote cookie assigned to override the incoming COS field with for  a
        cross-connect  or  the value to assign  to  outgoing
        packets for an outgoing segment direction
        of a tunnel." tunnel by the remote (head-end) LSR."
   ::= { mplsXCEntry 3 mplsTunnelEntry 10 }

mplsXCIsPersistent

mplsTunnelIsMergeable OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Whether  this cross-connect entry and associated  in-
        and  out-segments  should  tunnel  can  be restored  automatically
        after failures."  merged  at  an   LSR
        downstream with another tunnel."
   DEFVAL        { false true }
   ::= { mplsXCEntry 4 mplsTunnelEntry 11 }

mplsXCAdminStatus

mplsTunnelSetupPrio OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),     -- ready to pass packets
         down(2),
         testing(3) -- in some test mode
      } (0..7)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Desired status
       "The setup priority of this segment."
   ::= { mplsXCEntry 5 }

mplsXCOperStatus OBJECT-TYPE
   SYNTAX        INTEGER {
         up(1),          -- ready tunnel."
   REFERENCE
       "Extensions to pass packets
         down(2),
         testing(3),     -- in some test mode
         unknown(4),     -- status cannot be determined RSVP for
                       -- some reason
         dormant(5),
         notPresent(6),  -- some component is missing
         lowerLayerNotPresent(7)
                       -- down due to the state of
                       -- lower layer interfaces
      }
   MAX-ACCESS    read-only
   STATUS        current
   DESCRIPTION
       "The operational status of this segment." LSP Tunnels, Awduche  et  al,
        Internet  Draft <draft-mpls-rsvp-lsp-tunnel-02.txt>,
        March  1999., Constraint-Based LSP Setup using  LDP,
        Jamoussi,  Internet  Draft  <draft-ietf-mpls-cr-ldp-
        01.txt>, Feb. 1999."
   ::= { mplsXCEntry 6 mplsTunnelEntry 12 }

mplsXCRowStatus

mplsTunnelHoldingPrio OBJECT-TYPE
   SYNTAX        RowStatus        INTEGER (0..7)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "For creating, modifying, and deleting
       "The holding priority for this row." tunnel."
   REFERENCE
       "  Extensions to RSVP for LSP Tunnels, Awduche et al,
        Internet  Draft <draft-mpls-rsvp-lsp-tunnel-02.txt>,
        March  1999., Constraint-Based LSP Setup using  LDP,
        Jamoussi,  Internet  Draft  <draft-ietf-mpls-cr-ldp-
        01.txt>, Feb. 1999."
   ::= { mplsXCEntry 7 mplsTunnelEntry 13 }

-- End When resource allocation is performed as requested by
-- the following incoming TSpec objects, they are copied
-- into an entry in mplsTSpecTable [LSRMIB]: mplsTunnelInMaxRate
-- to mplsTSpecMaxRate, mplsTunnelInMeanRate to
-- mplsTSpecMeanRate, and mplsTunnelInMaxBurstSize
-- to mplsTSpecMaxBurstSize; mplsTSpecDirection of mplsXCTable this
-- Label stack table.

mplsLabelStackTable entry is set to in(1).  The mplsTSpecIndex value of this
-- entry is copied to  mplsInSegmentTSpecIndex of the
-- corresponding in-segment entry.

mplsTunnelInMaxRate OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsLabelStackEntry        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    not-accessible    read-create
   STATUS        current
   DESCRIPTION
       "This  table specifies the label stack
       "The maximum incoming rate in bits/second.  Note that
        setting  mplsTunnelInMaxRate,  mplsTunnelInMeanRate,
        and  mplsTunnelInMaxBurstSize to  be  pushed
        onto  a packet, beneath 0  indicates  best-
        effort  treatment.   This object  is  copied  to  an
        instance  of mplsTSpecMaxRate in mplsTSpecTable  the top label.  Entries
        index  of  which  is  copied into
        this table are referred to from mplsXCTable." the  corresponding
        mplsInSegmentTSpecIndex."
   REFERENCE
       "MPLS Label Switch Router Management Information Base
        Using SMIv2, Srinivasan and Viswanathan, draft-ietf-
        mpls-lsr-mib-00.txt, June 1999."
   DEFVAL        { 0 }
   ::= { mplsTeObjects 11 mplsTunnelEntry 14 }

mplsLabelStackEntry

mplsTunnelInMeanRate OBJECT-TYPE
   SYNTAX        MplsLabelStackEntry        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    not-accessible    read-create
   STATUS        current
   DESCRIPTION
       "An  entry in this table represents one label
       "This   object   is   copied  to  be
        pushed  onto   an  outgoing packets beneath   instance   of
        mplsTSpecMeanRate  in mplsTSpecTable  the  top
        label.   An  entry  can  be  created  by  a  network
        administrator  or by an SNMP agent as instructed  by
        LDP or RSVP."
   INDEX         { mplsLabelStackIndex }
      ::=  index  of
        which    is    copied    into   the    corresponding
        mplsInSegmentTSpecIndex."
   REFERENCE
       "MPLS Label Switch Router Management Information Base
        Using SMIv2, Srinivasan and Viswanathan, draft-ietf-
        mpls-lsr-mib-00.txt, June 1999."
   DEFVAL        { mplsLabelStackTable 1 0 }

MplsLabelStackEntry
   ::= SEQUENCE {
      mplsLabelStackIndex             Integer32,
      mplsLabelStackLabelIndex        Integer32,
      mplsLabelStackLabel             MplsLabel,
      mplsLabelStackRowStatus         RowStatus mplsTunnelEntry 15 }

mplsLabelStackIndex

mplsTunnelInMaxBurstSize OBJECT-TYPE
   SYNTAX        Integer32        BurstSize
   UNITS         "bytes"
   MAX-ACCESS    not-accessible    read-create
   STATUS        current
   DESCRIPTION
       "Primary  index for this row identifying a  stack  of
        labels
       "The  maximum  burst size in bytes.  This  object  is
        copied    to  be pushed on an outgoing packet  beneath   mplsInSegmentMaxBurstSize   of    the top label."
        corresponding in-segment."
   REFERENCE
       "MPLS Label Switch Router Management Information Base
        Using SMIv2, Srinivasan and Viswanathan, draft-ietf-
        mpls-lsr-mib-00.txt, June 1999."
   DEFVAL        { 0 }
   ::= { mplsLabelStackEntry 1 mplsTunnelEntry 16 }

mplsLabelStackLabelIndex OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "Secondary  index for

-- When resource allocation is performed as requested by
-- the following outgoing TSpec objects, they are copied

-- into an entry in mplsTSpecTable [LSRMIB]: mplsTunnelOutMaxRate
-- to mplsTSpecMaxRate, mplsTunnelOutMeanRate to
-- mplsTSpecMeanRate, and mplsTunnelOutMaxBurstSize
-- to mplsTSpecMaxBurstSize; mplsTSpecDirection of this row identifying one  label
-- entry is set to out(2).  The mplsTSpecIndex value of this
-- entry is copied to mplsOutSegmentTSpecIndex of the stack."
   ::= { mplsLabelStackEntry 2 }

mplsLabelStackLabel
-- corresponding out-segment entry.

mplsTunnelOutMaxRate OBJECT-TYPE
   SYNTAX        MplsLabel        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Label
       "The maximum outgoing rate in bits/second.  Note that
        setting mplsTunnelOutMaxRate, mplsTunnelOutMeanRate,
        and  mplsTunnelOutMaxBurstSize to 0 indicates  best-
        effort   treatment.   This  object  is   copied   to pushed."
        mplsOutSegmentMaxRate  of  the  corresponding   out-
        segment."
   REFERENCE
       "MPLS Label Switch Router Management Information Base
        Using SMIv2, Srinivasan and Viswanathan, draft-ietf-
        mpls-lsr-mib-00.txt, June 1999."
   DEFVAL        { 0 }
   ::= { mplsLabelStackEntry 3 mplsTunnelEntry 17 }

mplsLabelStackRowStatus

mplsTunnelOutMeanRate OBJECT-TYPE
   SYNTAX        RowStatus        BitRate
   UNITS         "bits per second"
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "For creating, modifying,
       "The  mean outgoing rate in bits/second.  This object
        is   copied   to   mplsOutSegmentMeanRate   of   the
        corresponding out-segment."
   REFERENCE
       "MPLS Label Switch Router Management Information Base
        Using SMIv2, Srinivasan and deleting this row." Viswanathan, draft-ietf-
        mpls-lsr-mib-00.txt, June 1999."
   DEFVAL        { 0 }
   ::= { mplsLabelStackEntry 4 mplsTunnelEntry 18 }

-- End of mplsLabelStackTable

-- TSpec table.

mplsTSpecTable

mplsTunnelOutMaxBurstSize OBJECT-TYPE
   SYNTAX        SEQUENCE OF MplsTSpecEntry        BurstSize
   UNITS         "bytes"
   MAX-ACCESS    not-accessible    read-create
   STATUS        current
   DESCRIPTION
       "This  table specifies TSpec objects for
       "The  maximum  burst size in bytes.  This  object  is
        copied   to   mplsOutSegmentMaxBurstSize   of    the
        corresponding out-segment."
   REFERENCE
       "MPLS Label Switch Router Management Information Base
        Using SMIv2, Srinivasan and  out-
        segments." Viswanathan, draft-ietf-
        mpls-lsr-mib-00.txt, June 1999."
   DEFVAL        { 0 }
   ::= { mplsTeObjects 12 mplsTunnelEntry 19 }

mplsTSpecEntry

mplsTunnelIsPinned OBJECT-TYPE
   SYNTAX        MplsTSpecEntry        TruthValue
   MAX-ACCESS    not-accessible    read-create
   STATUS        current
   DESCRIPTION
       "An  entry in this table represents
       "Indicates  whether  the TSpec objects
        for  one or more in or out segments.  A single entry
        can  be  pointed loose-routed  hops  of  this
        tunnel are to by multiple segments  indicating
        resource sharing."
   INDEX         { mplsTSpecIndex }
      ::= be pinned."
   DEFVAL        { mplsTSpecTable 1 false }

MplsTSpecEntry
   ::= SEQUENCE {
      mplsTSpecIndex                  Unsigned32,
      mplsTSpecIfIndex                InterfaceIndex,
      mplsTSpecDirection              INTEGER,
      mplsTSpecMaxRate                BitRate,
      mplsTSpecMeanRate               BitRate,
      mplsTSpecMaxBurstSize           BurstSize,
      mplsTSpecRowStatus              RowStatus mplsTunnelEntry 20 }

mplsTSpecIndex

mplsTunnelIsPersistent OBJECT-TYPE
   SYNTAX        Unsigned32        TruthValue
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Uniquely identifies
       "Indicates  whether  this row of the table.  Zero  is
        not a valid index." tunnel should  be  restored
        automatically after failures."
   DEFVAL        { true }
   ::= { mplsTSpecEntry 1 mplsTunnelEntry 21 }

mplsTSpecIfIndex

mplsTunnelAdminStatus OBJECT-TYPE
   SYNTAX        InterfaceIndex        INTEGER {
         up(1),     -- ready to pass packets
         down(2),
         testing(3) -- in some test mode
      }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Identifies the interface that
       "Desired status of this entry refers to." tunnel."
   ::= { mplsTSpecEntry 2 mplsTunnelEntry 22 }

mplsTSpecDirection

mplsTunnelOperStatus OBJECT-TYPE
   SYNTAX        INTEGER { in(1), out(2)
         up(1),          -- ready to pass packets
         down(2),
         testing(3),     -- in some test mode
         unknown(4),     -- status cannot be determined for some
                         -- reason
         dormant(5),
         notPresent(6),  -- some component is missing
         lowerLayerNotPresent(7)
                       -- down due to the state of
                       -- lower layer interfaces
      }
   MAX-ACCESS    read-create    read-only
   STATUS        current
   DESCRIPTION
       "Direction that these objects pertain to, incoming or
        outgoing."
       "The  operational status of this tunnel, typically  a
        function of the state of individual segments of this
        tunnel, among other things."
   ::= { mplsTSpecEntry 3 mplsTunnelEntry 23 }

mplsTSpecMaxRate

mplsTunnelRowStatus OBJECT-TYPE
   SYNTAX        BitRate
   UNITS         "bits per second"        RowStatus
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "Maximum rate in bits/second."
       "For controlling the state of this row."
   ::= { mplsTSpecEntry 4 mplsTunnelEntry 24 }

mplsTSpecMeanRate

-- End of mplsTunnelTable

-- Maximum number of tunnel hops supported.

mplsTunnelMaxHops OBJECT-TYPE
   SYNTAX        BitRate
   UNITS         "bits per second"        RowStatus
   MAX-ACCESS    read-create    read-only
   STATUS        current
   DESCRIPTION
       "Mean rate in bits/second."
       "The maximum number of hops that can be specified for
        a tunnel on this device."
   ::= { mplsTSpecEntry 5 mplsTeObjects 2 }

mplsTSpecMaxBurstSize

-- Tunnel hop table.

mplsTunnelHopTable  OBJECT-TYPE
   SYNTAX        BurstSize
   UNITS         "bytes"        SEQUENCE OF MplsTunnelEntry
   MAX-ACCESS    read-create    not-accessible
   STATUS        current
   DESCRIPTION
       "Maximum burst size
       "The mplsTunnelHopTable is used to indicate the hops,
        strict  or  loose,  for an MPLS  tunnel  defined  in
        mplsTunnelTable,   when  it   is   established   via
        signaling, for the outgoing direction of the tunnel.
        Each  row in this table is indexed primarily by  the
        same  index,  mplsTunnelIndex, as  the  row  of  the
        corresponding tunnel in mplsTunnelTable.   Each  row
        also   has   a  secondary  index  mplsTunnelHopIndex
        corresponding  to  the  next  hop  that   this   row
        corresponds to.  The first row in the table  is  the
        first hop after the origination point of the tunnel.
        In case we want to specify a particular interface on
        the  originating LSR of an outgoing tunnel by  which
        we  want packets to exit the LSR, we specify this as
        the     first    hop    for    this    tunnel     in bytes."
        mplsTunnelHopTable."
   ::= { mplsTSpecEntry 6 mplsTeObjects 3 }

mplsTSpecRowStatus

mplsTunnelHopEntry  OBJECT-TYPE
   SYNTAX        RowStatus        MplsTunnelHopEntry
   MAX-ACCESS    read-create    not-accessible
   STATUS        current
   DESCRIPTION
       "For creating, modifying, and deleting
       "An  entry in this row." table represents a tunnel hop.  An
        entry  is  created  by a network  administrator  for
        signalled ERLSP set up by LDP or RSVP."
   INDEX         {  mplsTunnelIndex, mplsTunnelHopIndex  }
      ::= { mplsTSpecEntry 7 mplsTunnelHopTable 1 }

-- End of mplsTSpecTable

-- Notifications.

-- Tunnel.

mplsTunnelUp NOTIFICATION-TYPE
   OBJECTS

MplsTunnelHopEntry ::= SEQUENCE { mplsTunnelIndex, mplsTunnelAdminStatus,
                mplsTunnelOperStatus
      mplsTunnelHopIndex              Integer32,
      mplsTunnelHopAddrType           INTEGER,
      mplsTunnelHopIpv4Addr           IpAddress,
      mplsTunnelHopIpv4PrefixLen      INTEGER,
      mplsTunnelHopIpv6Addr           Ipv6Address,
      mplsTunnelHopIpv6PrefixLen      INTEGER,
      mplsTunnelHopAsNumber           INTEGER,
      mplsTunnelHopStrictOrLoose      INTEGER,
      mplsTunnelHopRowStatus          RowStatus
   }

mplsTunnelHopIndex OBJECT-TYPE
   SYNTAX        Integer32
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
       "This    notification    is    generated    when    a
        mplsTunnelOperStatus   object   for   one   of   the
        configured tunnels is about to leave the down  state
        and  transition into some other state (but not
       "Secondary  index  into  this table  identifying  the   notPresent  state).   This  other   state   is
        indicated     by    the    included     value     of
        mplsTunnelOperStatus."
        particular hop."
   ::= { mplsTeNotifications mplsTunnelHopEntry 1 }

mplsTunnelDown NOTIFICATION-TYPE
   OBJECTS

mplsTunnelHopAddrType OBJECT-TYPE
   SYNTAX        INTEGER { mplsTunnelIndex, mplsTunnelAdminStatus,
                mplsTunnelOperStatus ipV4(1), ipV6(2), asNumber(3) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This    notification    is    generated    when    a
        mplsTunnelOperStatus   object   for   one   of   the
        configured tunnels is about to enter the down  state
        from  some  other state (but not from the notPresent
        state).   This  other  state  is  indicated  by  the
        included value
       "Address type of mplsTunnelOperStatus."
   ::= this hop."
   DEFVAL        { mplsTeNotifications 2 ipV4 }

-- Interface configuration.

mplsInterfaceUp NOTIFICATION-TYPE
   OBJECTS
   ::= { mplsInterfaceConfIndex,
                mplsInterfaceAdminStatus, mplsInterfaceOperStatus mplsTunnelHopEntry 2 }

mplsTunnelHopIpv4Addr OBJECT-TYPE
   SYNTAX        IpAddress
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This    notification
       "If mplsTunnelHopAddrType is    generated    when    a
        mplsInterfaceOperStatus  object  for  one ipV4(1), IPv4 address of   the
        entries in mplsInterfaceConfTable is about to  leave
        the  down state and transition into some other state
        (but  not  into the notPresent state).
        this  hop.  This  other
        state object is  indicated  by  the  included not significant otherwise
        and should return a value of
        mplsInterfaceOperStatus." 0."
   ::= { mplsTeNotifications mplsTunnelHopEntry 3 }

mplsInterfaceDown NOTIFICATION-TYPE
   OBJECTS     { mplsInterfaceConfIndex,
                mplsInterfaceAdminStatus, mplsInterfaceOperStatus }

mplsTunnelHopIpv4PrefixLen OBJECT-TYPE
   SYNTAX        INTEGER (1..32)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This    notification
       "If  mplsTunnelHopAddrType is    generated    when    a
        mplsInterfaceOperStatus  object ipV4(1), prefix  length
        for  one   of   the
        entries in mplsInterfaceConfTable is about to  enter
        the  down state from some other state (but not  from
        the   notPresent  state).  this  hop's IPv4 address.  This  other   state object  is
        indicated     by    the    included  not
        significant otherwise and should return a  value  of
        mplsInterfaceOperStatus."
        0."
   ::= { mplsTeNotifications mplsTunnelHopEntry 4 }

-- In-segment.

mplsInSegmentUp NOTIFICATION-TYPE
   OBJECTS     { mplsInSegmentIfIndex, mplsInSegmentLabel,
                mplsInSegmentAdminStatus, mplsInSegmentOperStatus }

mplsTunnelHopIpv6Addr OBJECT-TYPE
   SYNTAX        Ipv6Address
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This    notification    is    generated    when    a
        mplsInSegmentOperStatus  object  for  one   of   the
        configured  in-segments
       "If   mplsTunnelHopAddrType  is about to leave  the  down
        state and transition into some other state (but  not
        into  ipV6(2),  the  notPresent state).   IPv6
        address of this hop.  This other  state object is
        indicated     by    the    included not significant
        otherwise and should return a value of
        mplsInSegmentOperStatus." 0."
   ::= { mplsTeNotifications mplsTunnelHopEntry 5 }

mplsInSegmentDown NOTIFICATION-TYPE
   OBJECTS     { mplsInSegmentIfIndex, mplsInSegmentLabel,
                mplsInSegmentAdminStatus, mplsInSegmentOperStatus }

mplsTunnelHopIpv6PrefixLen OBJECT-TYPE
   SYNTAX        INTEGER (1..128)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This    notification
       "If  mplsTunnelHopAddrType is    generated    when    a
        mplsInSegmentOperStatus  object ipV6(2), prefix  length
        for  one   of   the
        configured  in-segments is about to enter  the  down
        state  from  some  other state  (but  not  from  the
        notPresent state).  this  hop's IPv6 address.  This other state object  is indicated by
        the included  not
        significant otherwise and should return a  value  of mplsInSegmentOperStatus."
        0."
   ::= { mplsTeNotifications mplsTunnelHopEntry 6 }

-- Out-segment.

mplsOutSegmentUp NOTIFICATION-TYPE
   OBJECTS     { mplsOutSegmentIndex, mplsInSegmentAdminStatus,
                mplsInSegmentOperStatus }

mplsTunnelHopAsNumber OBJECT-TYPE
   SYNTAX        INTEGER (0..65535)
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This    notification    is    generated    when    a
        mplsOutSegmentOperStatus  object  for  one  of   the
        configured out-segments
       "If  mplsTunnelHopAddrType  is about to leave  the  down
        state and transition into some other state (but  not
        into  asNumber(3),  the  notPresent state).  AS
        number  this  hop.  This other  state object is
        indicated     by    the    included  not  significant
        otherwise and should return a value of
        mplsOutSegmentOperStatus." 0."
   ::= { mplsTeNotifications mplsTunnelHopEntry 7 }

mplsOutSegmentDown NOTIFICATION-TYPE
   OBJECTS

mplsTunnelHopStrictOrLoose OBJECT-TYPE
   SYNTAX        INTEGER { mplsOutSegmentIndex, mplsInSegmentAdminStatus,
                mplsInSegmentOperStatus strict(1), loose(2) }
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "This    notification    is    generated    when    a
        mplsOutSegmentOperStatus  object  for  one  of   the
        configured out-segments is about to enter  the  down
        state  from  some  other state  (but  not  from  the
        notPresent state).  This other state is indicated by
        the included value of mplsOutSegmentOperStatus."
       "Whether this is a strict or loose hop."
   ::= { mplsTeNotifications mplsTunnelHopEntry 8 }

mplsTunnelHopRowStatus OBJECT-TYPE
   SYNTAX        RowStatus
   MAX-ACCESS    read-create
   STATUS        current
   DESCRIPTION
       "For creating, modifying and deleting this row."
   ::= { mplsTunnelHopEntry 9 }

-- End of mplsTunnelHopTable

-- Cross-connect.

mplsXCUp Notifications.

mplsTunnelUp NOTIFICATION-TYPE
   OBJECTS     { mplsXCIndex,
                mplsInSegmentIfIndex, mplsInSegmentLabel,
                mplsOutSegmentIndex,
                mplsXCAdminStatus, mplsXCOperStatus mplsTunnelIndex, mplsTunnelAdminStatus,
                mplsTunnelOperStatus }
   STATUS      current
   DESCRIPTION
       "This    notification    is    generated    when    a
        mplsXCOperStatus
        mplsTunnelOperStatus   object   for   one   of   the
        configured
        cross-connect  entries tunnels is about to leave the down  state
        and  transition into some other state (but not  into
        the   notPresent  state).   This  other   state   is
        indicated     by    the    included     value     of
        mplsXCOperStatus."
        mplsTunnelOperStatus."
   ::= { mplsTeNotifications 9 1 }

mplsXCDown

mplsTunnelDown NOTIFICATION-TYPE
   OBJECTS     { mplsXCIndex,
                mplsInSegmentIfIndex, mplsInSegmentLabel,
                mplsOutSegmentIndex,
                mplsXCAdminStatus, mplsXCOperStatus mplsTunnelIndex, mplsTunnelAdminStatus,
                mplsTunnelOperStatus }
   STATUS      current
   DESCRIPTION
       "This    notification    is    generated    when    a
        mplsXCOperStatus
        mplsTunnelOperStatus   object   for   one   of   the
        configured
        cross-connect  entries tunnels is about to enter the down  state
        from  some  other state (but not from the notPresent
        state).   This  other  state  is  indicated  by  the
        included value of mplsXCOperStatus." mplsTunnelOperStatus."
   ::= { mplsTeNotifications 10 2 }

-- End of notifications.

-- Module compliance.

mplsTeGroups
   OBJECT IDENTIFIER ::= { mplsTeConformance 1 }

mplsTeCompliances
   OBJECT IDENTIFIER ::= { mplsTeConformance 2 }

mplsTeModuleCompliance MODULE-COMPLIANCE
   STATUS current
   DESCRIPTION
       "Compliance  statement for agents  that  support  the
        MPLS TE MIB."
   MODULE -- this module

      -- The mandatory groups have group has to be implemented by all LSRs.
      -- However, they may all be supported as read-only objects
      -- in the case where manual configuration is not
      -- supported.

      MANDATORY-GROUPS    { mplsInSegmentGroup, mplsOutSegmentGroup,
                          mplsXCGroup, mplsInterfaceGroup,
                          mplsPerfGroup }

      GROUP mplsHCInterfacePerfGroup
      DESCRIPTION
          "This  group  is  mandatory for  high-speed  MPLS
           capable   interfaces  for  which   the   objects
           mplsInterfaceInOctets and mplsInterfaceOutOctets
           wrap around too quickly."

      GROUP mplsHCInSegmentPerfGroup
      DESCRIPTION
          "This  group  is  mandatory for those  in-segment
           entries      for      which      the      object
           mplsInSegmentOutOctets    wraps    around    too
           quickly."

      GROUP mplsHCOutSegmentPerfGroup
      DESCRIPTION
          "This  group  is mandatory for those  out-segment
           entries      for      which      the      object
           mplsOutSegmentOctets wraps around too quickly."

      GROUP mplsTSpecGroup
      DESCRIPTION
          "This  group  is  mandatory for those LSRs
      -- that
           support int-serv style resource reservation."

      GROUP mplsTunnelGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support tunnels. originate/terminate ESLSPs/tunnels.
      -- In addition, depending on the type of  the  tunnel  (for  example,  manually
           configured  or  signalled,  persistent  or  non-
           persistent,  etc.), the following tunnels
      -- supported, other groups
           are   mandatory:  mplsTunnelManualGroup   and/or
           mplsTunnelSignalledGroup,
           mplsTunnelIsNotIntfcGroup                 and/or
           mplsTunnelIsIntfcGroup,   mplsTunnelIsPersistent
           and/or mplsTunnelIsNotPersistent." become mandatory as explained
      -- below.

      MANDATORY-GROUPS    { mplsTunnelGroup }

      GROUP mplsTunnelManualGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support  manual  configuration  of  tunnels,  in
           addition   to  mplsTunnelGroup.   The  following
           constraints   apply:   mplsTunnelSignallingProto
           should  be  at least read-only with a  value  of
           none(1)."

      GROUP mplsTunnelSignalledGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support signalled tunnel set up, in addition  to
           mplsTunnelGroup.    The  following   constraints
           apply:  mplsTunnelSignallingProto should  be  at
           least read-only returning a value of ldp(2),  or
           rsvp(3)."

      GROUP mplsTunnelIsNotIntfcGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support  tunnels  that are  not  interfaces,  in
           addition   to  mplsTunnelGroup.   The  following
           constraints apply: mplsTunnelIsIf must at  least
           be read-only returning false(1)."

      GROUP mplsTunnelIsIntfcGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support tunnels that are interfaces, in addition
           to  mplsTunnelGroup.  The following  constraints
           apply: mplsTunnelIsIf must at least be read-only
           returning true(2)."

      GROUP mplsTunnelIsPersistentGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support  persistent  tunnels,  in  addition   to
           mplsTunnelGroup.    The  following   constraints
           apply:  mplsTunnelIsPersistent must at least  be
           read-only returning true(2)."

      GROUP mplsTunnelIsNotPersistentGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support  non-persistent tunnels, in addition  to
           mplsTunnelGroup.    The  following   constraints
           apply:  mplsTunnelIsPersistent must at least  be
           read-only returning false(1)."

      -- Depending on whether the device implements persistent
      -- cross-connects or not one of the following two groups
      -- is mandatory.

      GROUP mplsXCIsPersistentGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support    persistent    cross-connects.     The
           following  constraints apply: mplsXCIsPersistent
           must at least be read-only returning true(2)."

      GROUP mplsXCIsNotPersistentGroup mplsTunnelIsNotPersistentGroup
      DESCRIPTION
          "This   group  is  mandatory  for  devices  which
           support  non-persistent  cross-connects. tunnels, in addition  to
           mplsTunnelGroup.    The  following   constraints
           apply: mplsXCIsPersistent  mplsTunnelIsPersistent must at least  be
           read-only returning false(1)."

      -- mplsTunnelTable

      OBJECT      mplsTunnelDirection
      SYNTAX      INTEGER { in(1), out(2) }      mplsTunnelIndex
      MIN-ACCESS  read-only
      DESCRIPTION
          "in-out(3) need
          "Write access is not be supported."

      OBJECT      mplsTunnelAdminStatus
      SYNTAX      INTEGER { up (1), down (2) }
      DESCRIPTION
          "Only up and down states need to be supported."

      OBJECT      mplsTunnelOperStatus
      SYNTAX      INTEGER { up (1), down (2) }
      DESCRIPTION
          "Only up and down states need to be supported." required."

      OBJECT      mplsTunnelRowStatus
      SYNTAX      INTEGER { active(1), notInService(2),
                       createAndGo(4), destroy(6) }      mplsTunnelName
      MIN-ACCESS  read-only
      DESCRIPTION
          "The notReady(3) and createAndWait(5) states need
          "Write access is not be supported."

      -- mplsTunnelHopTable required."

      OBJECT      mplsTunnelHopStrictOrLoose
      SYNTAX      INTEGER { strict(1) }      mplsTunnelDescr
      MIN-ACCESS  read-only
      DESCRIPTION
          "loose(2) need
          "Write access is not be supported." required."

      OBJECT      mplsTunnelHopRowStatus
      SYNTAX      INTEGER { active(1), notInService(2),
                       createAndGo(4), destroy(6) }      mplsTunnelIsIf
      MIN-ACCESS  read-only
      DESCRIPTION
          "The notReady(3) and createAndWait(5) states need
          "Write access is not be supported."

      -- mplsInterfaceConfTable required."
      OBJECT      mplsInterfaceAdminStatus
      SYNTAX      INTEGER { up(1), down(2) }      mplsTunnelIfIndex
      MIN-ACCESS  read-only
      DESCRIPTION
          "A value of testing(3) need
          "Write access is not be supported." required."

      OBJECT      mplsInterfaceOperStatus      mplsTunnelDirection
      SYNTAX      INTEGER { up(1), down(2) out(2) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "Only up(1)
          "The  values  in(1)  and down(2) in-out(3)  need to  not  be
           supported."

      -- mplsInSegmentTable

      OBJECT      mplsInSegmentIfIndex      mplsTunnelXCIndex
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsInSegmentLabel      mplsTunnelSignallingProto
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT     mplsInSegmentXCIndex      mplsTunnelLocalCookie
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsInSegmentTSpecIndex      mplsTunnelRemoteCookie
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsInSegmentNPop      mplsTunnelIsMergeable
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access  if  not  required.   This  object
           should be set to 1 if it is read-only." not required."

      OBJECT      mplsInSegmentAddrFamily
      SYNTAX      INTEGER { other(0) }      mplsTunnelSetupPrio
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not  required.   A  value  of
           other(0) should be supported."

      OBJECT      mplsInSegmentAdminStatus
      SYNTAX      INTEGER { up(1), down(2) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "A value of testing(3) need not be supported."
      OBJECT      mplsInSegmentOperStatus
      SYNTAX      INTEGER { up(1), down(2) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "Only up(1) and down(2) need to be supported."

      OBJECT      mplsInSegmentRowStatus
      SYNTAX      INTEGER { active(1), notInService(2),
      createAndGo(4),
                          destroy(6) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "The notReady(3) and createAndWait(5) states need
           not be supported."

      -- mplsOutSegmentTable required."

      OBJECT      mplsOutSegmentIndex      mplsTunnelHoldingPrio
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsOutSegmentIfIndex      mplsTunnelInMaxRate
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsOutSegmentPushTopLabel      mplsTunnelInMeanRate
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsOutSegmentTopLabel      mplsTunnelInMaxBurstSize
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsOutSegmentNextHopIpAddrType
      SYNTAX      INTEGER { none(1), ipV4(2) }      mplsTunnelOutMaxRate
      MIN-ACCESS  read-only
      DESCRIPTION
          "ipV6(3) need
          "Write access is not be supported." required."

      OBJECT      mplsOutSegmentNextHopIpv4Addr      mplsTunnelOutMeanRate
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT    mplsOutSegmentNextHopIpv6Addr      mplsTunnelOutMaxBurstSize
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsOutSegmentXCIndex      mplsTunnelIsPinned
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsOutSegmentTSpecIndex      mplsTunnelIsPersistent
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsOutSegmentAdminStatus      mplsTunnelAdminStatus
      SYNTAX      INTEGER { up(1), down(2) up (1), down (2) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "A value of testing(3)
          "Only  up  and down states need not to be supported."  supported.
           Write access is not required."

      OBJECT      mplsOutSegmentOperStatus      mplsTunnelOperStatus
      SYNTAX      INTEGER { up(1), down(2) up (1), down (2) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "Only up(1)  up  and down(2) down states need to be supported."  supported.
           Write access is not required."
      OBJECT      mplsOutSegmentRowStatus      mplsTunnelRowStatus
      SYNTAX      INTEGER { active(1), notInService(2),
                       createAndGo(4), destroy(6) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "The notReady(3) and createAndWait(5) states need
           not be supported." supported. Write access is not required."

      -- mplsXCTable mplsTunnelHopTable

      OBJECT      mplsXCIndex      mplsTunnelHopIndex
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsXCLabelStackIndex      mplsTunnelHopAddrType
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsXCCOS      mplsTunnelHopIpv4Addr
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsXCIsPersistent      mplsTunnelHopIpv4PrefixLen
      MIN-ACCESS  read-only
      DESCRIPTION
          "Write access is not required."

      OBJECT      mplsXCAdminStatus
      SYNTAX      INTEGER { up(1), down(2) }      mplsTunnelHopIpv6Addr
      MIN-ACCESS  read-only
      DESCRIPTION
          "A value of testing(3) need
          "Write access is not be supported."

      OBJECT      mplsXCOperStatus
      SYNTAX      INTEGER { up(1), down(2) }
      MIN-ACCESS  read-only
      DESCRIPTION
          "Only up(1) and down(2) need to be supported." required."

      OBJECT      mplsXCRowStatus
      SYNTAX      INTEGER { active(1), notInService(2),
      createAndGo(4),
                          destroy(6) }      mplsTunnelHopIpv6PrefixLen
      MIN-ACCESS  read-only
      DESCRIPTION
          "The notReady(3) and createAndWait(5) states need
          "Write access is not be supported."

   ::= { mplsTeCompliances 1 }

-- Units of conformance.

mplsInterfaceGroup OBJECT-GROUP
   OBJECTS { mplsInterfaceConfIndex,
             mplsInterfaceLabelMinIn, mplsInterfaceLabelMaxIn,
             mplsInterfaceLabelMinOut, mplsInterfaceLabelMaxOut,
             mplsInterfaceAdminStatus, mplsInterfaceOperStatus,
             mplsInterfaceInLabelsUsed, mplsInterfaceOutLabelsUsed }
   STATUS  current
   DESCRIPTION
       "Collection  of  objects needed  for  MPLS  interface
        configuration and performance information."
   ::= { mplsTeGroups 1 }

mplsInSegmentGroup  OBJECT-GROUP
   OBJECTS { mplsInSegmentIfIndex, mplsInSegmentLabel,
             mplsInSegmentNPop, mplsInSegmentAddrFamily,
             mplsInSegmentXCIndex, mplsInSegmentTSpecIndex,
             mplsInSegmentAdminStatus, mplsInSegmentOperStatus,
             mplsInSegmentRowStatus,
             mplsInSegmentOctets, mplsInSegmentDiscards }
   STATUS  current
   DESCRIPTION
       "Collection  of  objects needed to implement  an  in-
        segment."
   ::= { mplsTeGroups 2 }

mplsOutSegmentGroup  OBJECT-GROUP
   OBJECTS { mplsOutSegmentIndex, mplsOutSegmentIfIndex,
             mplsOutSegmentPushTopLabel, mplsOutSegmentTopLabel,
             mplsOutSegmentNextHopIpAddrType,
             mplsOutSegmentNextHopIpv4Addr,
             mplsOutSegmentNextHopIpv6Addr,
             mplsOutSegmentXCIndex, mplsOutSegmentTSpecIndex,
             mplsOutSegmentAdminStatus, mplsOutSegmentOperStatus,
             mplsOutSegmentRowStatus,
             mplsOutSegmentOctets, mplsOutSegmentDiscards }
   STATUS  current
   DESCRIPTION
       "Collection  of objects needed to implement  an  out-
        segment."
   ::= { mplsTeGroups 3 }

mplsXCGroup  OBJECT-GROUP
   OBJECTS { mplsXCIndex, mplsXCLabelStackIndex,
             mplsXCAdminStatus, mplsXCOperStatus, mplsXCRowStatus }
   STATUS  current
   DESCRIPTION
       "Collection of objects needed to implement  a  cross-
        connect entry."
   ::= { mplsTeGroups 4 }

mplsPerfGroup OBJECT-GROUP
   OBJECTS { mplsInterfaceInOctets, mplsInterfaceInPackets,
             mplsInterfaceInDiscards,
             mplsInterfaceOutOctets, mplsInterfaceOutPackets,
             mplsInterfaceOutDiscards,
             mplsInSegmentOctets, mplsInSegmentPackets,
             mplsInSegmentDiscards,
             mplsOutSegmentOctets, mplsOutSegmentPackets,
             mplsOutSegmentDiscards }
   STATUS  current
   DESCRIPTION
       "Collection    of   objects   providing   performance
        information about an LSR."
   ::= { mplsTeGroups 5 }

mplsHCInterfacePerfGroup OBJECT-GROUP
   OBJECTS { mplsInterfaceInHCOctets, mplsInterfaceOutHCOctets }
   STATUS  current
   DESCRIPTION
       "Collection    of   objects   providing   performance
        information  specific to high-speed  interfaces  for
        which   the   objects   mplsInterfaceInOctets    and
        mplsInterfaceOutOctets wrap-around too quickly."
   ::= { mplsTeGroups 6 }

mplsHCInSegmentPerfGroup OBJECT-GROUP
   OBJECTS { mplsInSegmentHCOctets }
   STATUS  current required."

      OBJECT      mplsTunnelHopAsNumber
      MIN-ACCESS  read-only
      DESCRIPTION
       "Object(s) providing performance information specific
        to     out-segments    for    which    the    object
        mplsInterfaceInOctets wraps around too quickly."
   ::= { mplsTeGroups 7 }

mplsHCOutSegmentPerfGroup OBJECT-GROUP
   OBJECTS
          "Write access is not required."

      OBJECT      mplsTunnelHopStrictOrLoose
      SYNTAX      INTEGER { mplsOutSegmentHCOctets strict(1) }
   STATUS  current
      MIN-ACCESS  read-only
      DESCRIPTION
       "Object(s) providing performance information specific
        to     out-segments    for    which    the    object
        mplsInterfaceOutOctets wraps around too quickly."
   ::= { mplsTeGroups 8 }

mplsTSpecGroup OBJECT-GROUP
   OBJECTS
          "loose(2) need not be supported. Write access  is
           not required."

      OBJECT      mplsTunnelHopRowStatus
      SYNTAX      INTEGER { mplsTSpecIndex, mplsTSpecIfIndex, mplsTSpecDirection,
             mplsTSpecMaxRate, mplsTSpecMeanRate,
             mplsTSpecMaxBurstSize, mplsTSpecRowStatus active(1), notInService(2),
                       createAndGo(4), destroy(6) }
   STATUS  current
      MIN-ACCESS  read-only
      DESCRIPTION
       "Object(s)  required  for supporting  int-serv  style
        resource reservation."
          "The notReady(3) and createAndWait(5) states need
           not be supported. Write access is not required."

   ::= { mplsTeGroups 9 mplsTeCompliances 1 }

-- Units of conformance.

mplsTunnelGroup OBJECT-GROUP
   OBJECTS { mplsTunnelIndex, mplsTunnelName,
             mplsTunnelDirection, mplsTunnelXCIndex,
             mplsTunnelIfIndex,
             mplsTunnelAdminStatus, mplsTunnelOperStatus,
             mplsTunnelRowStatus }
   STATUS  current
   DESCRIPTION
       "Necessary,  but not sufficient, set  of  objects  to
        implement  tunnels.   Other  objects  are   required  In addition, depending  on  the
        type of tunnel supported,  such  as the tunnels supported (for example, manually
        configured   or   signalled,  manual etc., as defined  in  persistent   or   non-
        persistent,   etc.),  the  following  other   groups
        below."
        defined  below  are mandatory: mplsTunnelManualGroup
        and/or                     mplsTunnelSignalledGroup,
        mplsTunnelIsNotIntfcGroup                     and/or
        mplsTunnelIsIntfcGroup,       mplsTunnelIsPersistent
        and/or mplsTunnelIsNotPersistent."
   ::= { mplsTeGroups 10 1 }

mplsTunnelManualGroup  OBJECT-GROUP
   OBJECTS { mplsTunnelSignallingProto }
   STATUS  current
   DESCRIPTION
       "Object(s)  needed  to implement manually  configured
        tunnels."
   ::= { mplsTeGroups 11 2 }

mplsTunnelSignalledGroup OBJECT-GROUP
   OBJECTS { mplsTunnelSignallingProto,
             mplsTunnelLocalCookie, mplsTunnelRemoteCookie,
             mplsTunnelHopIndex, mplsTunnelHopAddrType,
             mplsTunnelHopIpv4Addr, mplsTunnelHopIpv4PrefixLen,
             mplsTunnelHopIpv6Addr, mplsTunnelHopIpv6PrefixLen,
             mplsTunnelHopStrictOrLoose, mplsTunnelHopRowStatus }
   STATUS  current
   DESCRIPTION
       "Object needed to implement signalled tunnels."
   ::= { mplsTeGroups 12 3 }

mplsTunnelIsIntfcGroup OBJECT-GROUP
   OBJECTS { mplsTunnelIsIf }
   STATUS  current
   DESCRIPTION
       "Objects   needed  to  implement  tunnels  that   are
        interfaces."
   ::= { mplsTeGroups 13 4 }

mplsTunnelIsNotIntfcGroup OBJECT-GROUP
   OBJECTS { mplsTunnelIsIf }
   STATUS  current
   DESCRIPTION
       "Objects  needed to implement tunnels  that  are  not
        interfaces."
   ::= { mplsTeGroups 14 5 }

mplsTunnelIsPersistentGroup OBJECT-GROUP
   OBJECTS { mplsTunnelIsPersistent }
   STATUS  current
   DESCRIPTION
       "Objects needed to support persistent tunnels."
   ::= { mplsTeGroups 15 6 }

mplsTunnelIsNotPersistentGroup OBJECT-GROUP
   OBJECTS { mplsTunnelIsPersistent }
   STATUS  current
   DESCRIPTION
       "Objects needed to support non-persistent tunnels."
   ::= { mplsTeGroups 16 }

mplsXCIsPersistentGroup OBJECT-GROUP
   OBJECTS { mplsXCIsPersistent }
   STATUS  current
   DESCRIPTION
       "Objects   needed   to   support  persistent   cross-
        connects."
   ::= { mplsTeGroups 17 }

mplsXCIsNotPersistentGroup OBJECT-GROUP
   OBJECTS { mplsXCIsPersistent }
   STATUS  current
   DESCRIPTION
       "Objects  needed  to  support  non-persistent  cross-
        connects."
   ::= { mplsTeGroups 18 7 }

mplsTeNotificationGroup NOTIFICATION-GROUP
   NOTIFICATIONS { mplsTunnelUp, mplsTunnelDown,
                mplsInterfaceUp, mplsInterfaceDown,
                mplsInSegmentUp, mplsInSegmentDown,
                mplsOutSegmentUp, mplsOutSegmentDown,
                mplsXCUp, mplsXCDown mplsTunnelDown }
   STATUS  current
   DESCRIPTION
       "Set  of  notifications implemented in  this  module.
        None is mandatory."
   ::= { mplsTeGroups 19 8 }

-- End of MPLS-TE-MIB
END

10.

8. Security Considerations

   The  MIBs  MIB  specified in this document does not raise  any  security
   issues   other   than  those  present  in  the  MPLS  architecture
   [MPLSArch] or those imposed by SNMP itself.

11.

9. Acknowledgments

   We wish to thank Ron Bonica, Eric Gray, Patrick Kerharo,  Pramod
   Koppol, and Dan Tappan Pramod Koppol for
   their comments on this draft.

12.

10.   References

   [MPLSArch]    Rosen,   E.,   Viswanathan,  A.,  and   R.   Callon,
                 "Multiprotocol    Label   Switching   Architecture",
                 Internet     Draft    <draft-ietf-mpls-arch-03.txt>,    <draft-ietf-mpls-arch-05.txt>,
                 February 1999 1999.

   [MPLSFW]      Callon,  R., Doolan, P., Feldman, N., Fredette,  A.,
                 Swallow,  G.,  and A. Viswanathan, "A Framework  for
                 Multiprotocol   Label  Switching",  Internet   Draft
                 <draft-ietf-mpls-framework-02.txt>, November 1997.

   [LSRMIB]      Srinivasan,  C.,  and  A. Viswanathan,  "MPLS  Label
                 Switch  Router  Management  Information  Base  Using
                 SMIv2",   Internet  Draft  <draft-ietf-mpls-lsr-mib-
                 00.txt>, June 1999.

   [LDPMIB]      Cucchiara,  J.,  Sjostrand,  H.,  and  J.   Luciani,  "
                 Definitions
                 "Definitions    of   Managed   Objects    for    the
                 Multiprotocol  Label Switching,  Label  Distribution
                 Protocol  (LDP)",  Internet Draft  <draft-ietf-mpls-
                 ldp-mib-00.txt>, August 1998.

   [LblStk]      Rosen,  E., Rekhter, Y., Tappan, D., Farinacci,  D.,
                 Federokow,  G.,  Li, T., and A. Conta,  "MPLS  Label
                 Stack  Encoding",  Internet Draft  <draft-ietf-mpls-
                 label-encaps-03.txt>, September 1998.
                 label-encaps-04.txt>, April 1999.

   [RSVPTun]     Awaduche,  D.,  Berger, L.,  Der-Haw,  G.,  Li,  T.,
                 Swallow, G., and V. Srinivasan, "Extensions to  RSVP
                 for  LSP  Tunnels", Internet Draft <draft-mpls-rsvp-
                 lsp-tunnel-00.txt>, November 1998.
                 lsp-tunnel-02.txt>, March 1999.

   [CRLDP]       Andersson,  L., Fredette, A., Jamoussi, B.,  Callon,
                 R.,  Doolan, P., Feldman, N., Gray, E., Halpern, J.,
                 Heinenan,  J.,  Kilty, T., Malis,  A.,  Girish,  M.,
                 Sundell, K., Vaananen, P., T. Worster, Wu,  L.,  and
                 Dantu,    R.,    "Explicit    Routing    Over    LDP
                 Specification",       B.  Jamoussi (Editor), "Constraint-Based  LSP  Setup
                 using  LDP", Internet Draft <draft-jamoussi-mpls-
                 cr-ldp-00.txt>, November 1998. <draft-ietf-mpls-cr-ldp-
                 01.txt>, February 1999.

   [Assigned]    Reynolds,  J.,  and  J. Postel, "Assigned  Numbers",
                 RFC     1700,     October    1994.     See     also:
                 http://www.isi.edu/in-notes/iana/assignments/smi-
                 numbers

   [SNMPArch]    Harrington,  D.,  Presuhn, R., and  B.  Wijnen,  "An
                 Architecture   for   Describing   SNMP    Management
                 Frameworks", RFC 2271, January 1998.

   [SMIv1]       Rose,   M.,   and  K.  McCloghrie,  "Structure   and
                 Identification of Management Information for TCP/IP-
                 based Internets", RFC 1155, May 1990.

   [SNMPv1MIBDef]Rose,   M.,   and   K.  McCloghrie,   "Concise   MIB
                 Definitions", RFC 1212, March 1991.

   [SNMPv1Traps] M.  Rose, "A Convention for Defining Traps  for  use
                 with the SNMP", RFC 1215, March 1991.

   [SMIv2]       Case,   J.,  McCloghrie,  K.,  Rose,  M.,   and   S.
                 Waldbusser,  "Structure  of  Management  Information
                 for  Version  2  of  the Simple  Network  Management
                 Protocol (SNMPv2)", RFC 1902, January 1996.

   [SNMPv2TC]    Case,   J.,  McCloghrie,  K.,  Rose,  M.,   and   S.
                 Waldbusser,  "Textual Conventions for Version  2  of
                 the  Simple  Network Management Protocol  (SNMPv2)",
                 RFC  1903, SNMP Research, Inc., Cisco Systems, Inc.,
                 January 1996.

   [SNMPv2Conf]  Case,   J.,  McCloghrie,  K.,  Rose,  M.,   and   S.
                 Waldbusser,  "Conformance Statements for  Version  2
                 of    the   Simple   Network   Management   Protocol
                 (SNMPv2)", RFC 1904, January 1996.

   [SNMPv1]      Case,  J., Fedor, M., Schoffstall, M., and J. Davin,
                 "Simple Network Management Protocol", RFC 1157,  May
                 1990.

   [SNMPv2c]     Case,   J.,  McCloghrie,  K.,  Rose,  M.,   and   S.
                 Waldbusser,    "Introduction   to    Community-based
                 SNMPv2", RFC 1901, January 1996.

   [SNMPv2TM]    Case,   J.,  McCloghrie,  K.,  Rose,  M.,   and   S.
                 Waldbusser,  "Transport Mappings for  Version  2  of
                 the  Simple  Network Management Protocol  (SNMPv2)",
                 RFC 1906, January 1996.

   [SNMPv3MP]    Case,  J., Harrington D., Presuhn R., and B. Wijnen,
                 "Message  Processing and Dispatching for the  Simple
                 Network  Management  Protocol  (SNMP)",  RFC   2272,
                 January 1998.

   [SNMPv3USM]   Blumenthal, U., and B. Wijnen, "User-based  Security
                 Model  (USM)  for  version 3 of the  Simple  Network
                 Management  Protocol (SNMPv3)",  RFC  2274,  January
                 1998.

   [SNMPv2PO]    Case,   J.,  McCloghrie,  K.,  Rose,  M.,   and   S.
                 Waldbusser,  "Protocol Operations for Version  2  of
                 the  Simple  Network Management Protocol  (SNMPv2)",
                 RFC 1905, January 1996.

   [SNMPv3App]   Levi,   D.,  Meyer,  P.,  and  B.  Stewart,  "SNMPv3
                 Applications", RFC 2273, January 1998

   [SNMPv3VACM]  Wijnen,  B., Presuhn, R., and K. McCloghrie,  "View-
                 based  Access  Control Model (VACM) for  the  Simple
                 Network  Management  Protocol  (SNMP)",  RFC   2275,
                 January 1998

13.

11.   Authors's Addresses

   Cheenu Srinivasan
   Lucent
   Tachion Network Technologies
   4F535, 101 Crawfords Corner
   2 Meridian Road
   Holmdel,
   Eatontown, NJ 07733 07724

   Phone: +1-732-949-0709 +1-732-542-7750 x234
   Email: cheenu@lucent.com cheenu@tachion.com

   Arun Viswanathan
   Lucent Technologies
   4D537, 101 Crawfords Corner Road
   Holmdel, NJ 07733

   Phone: +1-732-332-5613 +1-732-332-5163
   Email: arunv@lucent.com