The MPLS WG Archive

Cell Relay Retreat>MPLS WG Archive>month:2003-Apr> msg00111



[Date Prev][Date Next][Thread Prev][Thread Next]  
  [Date Index][Thread Index][Author Index][Subject Index]

LDP MIB, version 9 outstanding issue

  • From: jcucchiara@mindspring.com
  • Date: Sun, 13 Apr 2003 17:53:15 -0400
  • Cc: nj@dataconnection.com, hans@ipunplugged.com, james_luciani@mindspring.com, riza.cetin@alcatel.be, jcucchiara@artel.com, jcucchiara@mindspring.com


Hello Everyone,

>From the Atlanta MPLS MIB meeting there was an outstanding issue
as described by the "MPLS MIB review meeting minutes" posted
to the mpls working group on Dec 03, 2002.  This issue
had to do with the change from version 8 of the MIB to
version 9.

Version 8 of the MIB had 3 Mapping tables, from an LDP LSP
to either an InSegment/OutSegment/XCSegment in the LSR-MIB.

Version 9 reduces this to 1 table and uses RowPointers.

The motivation for doing this was to reduce the number of
objects.  However, it turns out that this table is lacking
because the indexing will not be unique under certain
circumstances.  This was very well documented in email 
by Neil Jerram on Nov 15, 2002 "RE: Questions on LDP MIB v9".
This is repeated here for your convenience:

  "Here is a concrete example of the problem.  LSR A and LSR B each
   distribute a label to each other, and by chance they use the same
   label value, 67.  So in LSR A's mplsLdpLspTable, the label that A
   distributed to B has index:

     mplsLdpEntityLdpId      AA AA AA AA 00 01
     mplsLdpEntityIndex      1
     mplsLdpPeerLdpId        BB BB BB BB 00 01
     mplsLdpLspIfIndex       1
     mplsLdpLspLabel         67

   The label that A received from B has index:

     mplsLdpEntityLdpId      AA AA AA AA 00 01
     mplsLdpEntityIndex      1
     mplsLdpPeerLdpId        BB BB BB BB 00 01
     mplsLdpLspIfIndex       1
     mplsLdpLspLabel         67

   Which is exactly the same.  So the mplsLdpLspTable can't hold
   represent both of these labels at once."

Please note, the next version of the MIB will 
not have the mplsLdpLspTable.  Neil has proposed a solution
which is very detailed in that email (and repeated
at the end of this email).  I would like to incorporate his
these tables (or revised versions of these tables) 
into the next version of the MIB.

Does anyone have any objections with this change?

   Thanks, Joan

Quoting from Neil's email dated Nov 15th to the mpls@uu.net:

"Key points of my proposal are as follows.

- The new tables are:

  - mplsLdpUpLabelTable, describing labels distributed to upstream peers

  - mplsLdpDownLabelTable, describing labels received from downstream
    peers, including liberally retained and null labels.

- Like the tables that they replace in LDP MIB v9, these tables use
  RowPointers to point to LIB information in the LSR MIB.  They don't
  unnecessarily duplicate any information that can be obtained from
  the LSR MIB.

- Advantages in comparison with LDB MIB v9 are that:

  - mplsLdpDownLabelTable can show both established and liberally
    retained labels, and has a flag to indicate which labels are which

  - mplsLdpDownLabelTable can show multiple label mappings received
    from the same peer, for the same FEC, and with the same label
    value (this is most relevant for implicit and explicit null
    labels, but can also occur in some networks with non-null label
    values)

  - mplsLdpUpLabelTable and mplsLdpDownLabelTable can show a
    distributed label and a received label that share the same
    session, FEC and label value.

- mplsLdpUpLabelTable has a RowPointer to an mplsLdpDownLabelTable
  entry that can be used to show how upstream and downstream mappings
  are connected.

The full ASN.1 and a note on indexing are appended below.  Thank you
very much for your time.

     Neil


Indexing
========

The tables are indexed by (LDP session, FEC index, LSP index), where:

- LDP session is the usual (entity ldp id, entity index, peer ldp id)
- FEC index is a non-predictable index into the mplsFecTable
- LSP index is a non-predictable tie-breaker index for non-merging
  LSPs for the same FEC. 

The key benefit of this indexing is that it permits the
representation, for non-merging FECs, of the labels established by
multiple Label Request - Label Mapping exchanges through an LSR, even
when the labels distributed for different Label Requests are the same
(usually implicit and explicit nulls).


ASN.1
=====

     --
     --  The MPLS LDP Upstream Label Table
     --

     mplsLdpUpLabelTable OBJECT-TYPE
         SYNTAX      SEQUENCE OF MplsLdpUpLabelEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "A table mapping LDP sessions and FECs to the upstream
             labels distributed for those sessions and FECs, and to
             the corresponding LIB entries in the LSR MIB."
         ::= { mplsLdpSessionObjects 6 }

     mplsLdpUpLabelEntry OBJECT-TYPE
         SYNTAX      MplsLdpUpLabelEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "An entry in this table represents a label that has been
             distributed upstream for a particular session and FEC
             combination.  It is indexed by the session's index triple
             (mplsLdpEntityLdpId, mplsLdpEntityIndex,
             mplsLdpPeerLdpId), the FEC index (mplsFecIndex) and an
             LSP index (mplsLdpLspIndex) that distinguishes between
             non-merging LSPs for the same FEC. 

             The information contained in a row is read-only."
         INDEX       { mplsLdpEntityLdpId,
                       mplsLdpEntityIndex,
                       mplsLdpPeerLdpId,
                       mplsFecIndex,
                       mplsLdpLspIndex
                     }
         ::= { mplsLdpUpLabelTable 1 }

     MplsLdpUpLabelEntry ::= SEQUENCE {
         mplsLdpUpLabel                  MplsLabel,
         mplsLdpUpLabelType              MplsLdpLabelType,
         mplsLdpUpLspType                MplsLspType,
         mplsLdpUpDownLabelPointer       RowPointer,
         mplsLdpUpLsrInSegmentPointer    RowPointer,
         mplsLdpUpLsrXCPointer           RowPointer
     }

     mplsLdpLspIndex OBJECT-TYPE
         SYNTAX       Unsigned32
         MAX-ACCESS   not-accessible
         STATUS       current
         DESCRIPTION
             "A tie-breaker index that distinguishes between multiple
              non-merging LSPs for the same FEC.

              Where an LSR merges all LSPs for the same FEC, this
              field is not needed and should always be zero.

              Where an LSR does not merge LSPs for the same FEC, it is
              possible for the LSR to distribute (or receive) multiple
              label mappings for the same FEC to (or from) the same
              session, and for some of these labels to be equal (in
              particular where implicit and explicit null labels are
              in use).  In this case, the entries that describe the
              labels are distinguished from each other by using a
              different, non-zero value for this index field."
         ::= { mplsLdpUpLabelEntry 1 }

     mplsLdpUpLabel OBJECT-TYPE
         SYNTAX        MplsLabel
         MAX-ACCESS    not-accessible
         STATUS        current
         DESCRIPTION
             "The upstream label value."
         ::= { mplsLdpUpLabelEntry 2 }

     mplsLdpUpLabelType  OBJECT-TYPE
         SYNTAX        MplsLdpLabelType
         MAX-ACCESS    read-only
         STATUS        current
         DESCRIPTION
             "The Layer 2 upstream label type."
         ::= { mplsLdpUpLabelEntry 3 }

     mplsLdpUpLspType OBJECT-TYPE
         SYNTAX        MplsLspType
         MAX-ACCESS    read-only
         STATUS        current
         DESCRIPTION
             "The type of LSP connection for which this label is in
             use.  The possible values are:

                unknown(1)         --  if the LSP is not known
                                       to be one of the following.

               terminatingLsp(2)   -- if the LSP terminates
                                      on the LSR, then this
                                      is an ingressing LSP
                                      which ends on the LSR,

               originatingLsp(3)   -- if the LSP originates
                                      from the LSR, then this
                                      is an egressing LSP which is
                                      the head-end of the LSP,

             crossConnectingLsp(4) -- if the LSP ingresses
                                      and egresses on the LSR,
                                      then it is cross-connecting
                                      on that LSR."
         ::= { mplsLdpUpLabelEntry 4 }

     mplsLdpUpDownLabelPointer OBJECT-TYPE
         SYNTAX      RowPointer
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "If this label is cross-connected to a received LDP
             downstream label mapping, this RowPointer should point to
             the entry in the mplsLdpDownLabelTable that describes the
             downstream label.

             Otherwise this field's value is zeroDotzero."
         ::= { mplsLdpUpLabelEntry 5 }

     mplsLdpUpLsrInSegmentPointer OBJECT-TYPE
         SYNTAX      RowPointer
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "If this label has a corresponding entry in the LSR MIB
             mplsInSegmentTable, this RowPointer should point to that
             entry.

             Otherwise this field's value is zeroDotzero."
         ::= { mplsLdpUpLabelEntry 6 }

     mplsLdpUpLsrXCPointer OBJECT-TYPE
         SYNTAX      RowPointer
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "If this label is cross-connected to a received LDP
             downstream label mapping and there is an entry
             describing this cross-connect in the LSR MIB mplsXCTable,
             this RowPointer should point to that entry.

             Otherwise this field's value is zeroDotzero."
         ::= { mplsLdpUpLabelEntry 7 }


     --
     --  The MPLS LDP Downstream Label Table
     --

     mplsLdpDownLabelTable OBJECT-TYPE
         SYNTAX      SEQUENCE OF MplsLdpDownLabelEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "A table mapping LDP sessions and FECs to the downstream
             labels received for those sessions and FECs, and to the
             corresponding LIB entries in the LSR MIB."
         ::= { mplsLdpSessionObjects 6 }

     mplsLdpDownLabelEntry OBJECT-TYPE
         SYNTAX      MplsLdpDownLabelEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "An entry in this table represents a label that has been
             received from a downstream peer for a particular session
             and FEC combination.  It is indexed by the session's
             index triple (mplsLdpEntityLdpId, mplsLdpEntityIndex,
             mplsLdpPeerLdpId), the FEC index (mplsFecIndex) and an
             LSP index (mplsLdpLspIndex) that distinguishes between
             non-merging LSPs for the same FEC.

             The information contained in a row is read-only."
         INDEX       { mplsLdpEntityLdpId,
                       mplsLdpEntityIndex,
                       mplsLdpPeerLdpId,
                       mplsFecIndex,
                       mplsLdpLspIndex
                     }
         ::= { mplsLdpDownLabelTable 1 }

     MplsLdpDownLabelEntry ::= SEQUENCE {
         mplsLdpDownLabel                  MplsLabel,
         mplsLdpDownLabelType              MplsLdpLabelType,
         mplsLdpDownLspType                MplsLspType,
         mplsLdpDownLiberal                TruthValue,
         mplsLdpDownLsrOutSegmentPointer   RowPointer,
         mplsLdpDownLsrXCPointer           RowPointer
     }

     mplsLdpDownLabel OBJECT-TYPE
         SYNTAX        MplsLabel
         MAX-ACCESS    not-accessible
         STATUS        current
         DESCRIPTION
             "The downstream label value."
         ::= { mplsLdpDownLabelEntry 1 }

     mplsLdpDownLabelType  OBJECT-TYPE
         SYNTAX        MplsLdpLabelType
         MAX-ACCESS    read-only
         STATUS        current
         DESCRIPTION
             "The Layer 2 downstream label type."
         ::= { mplsLdpDownLabelEntry 2 }

     mplsLdpDownLspType OBJECT-TYPE
         SYNTAX        MplsLspType
         MAX-ACCESS    read-only
         STATUS        current
         DESCRIPTION
             "The type of LSP connection for which this label is in
             use.  The possible values are:

                unknown(1)         --  if the LSP is not known
                                       to be one of the following.

               terminatingLsp(2)   -- if the LSP terminates
                                      on the LSR, then this
                                      is an ingressing LSP
                                      which ends on the LSR,

               originatingLsp(3)   -- if the LSP originates
                                      from the LSR, then this
                                      is an egressing LSP which is
                                      the head-end of the LSP,

             crossConnectingLsp(4) -- if the LSP ingresses
                                      and egresses on the LSR,
                                      then it is cross-connecting
                                      on that LSR."
         ::= { mplsLdpDownLabelEntry 3 }

     mplsLdpDownLiberal OBJECT-TYPE
         SYNTAX      TruthValue
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "Whether this is a liberally retained downstream label."
         DEFVAL { false }
         ::= { mplsLdpDownLabelEntry 4 }

     mplsLdpDownLsrOutSegmentPointer OBJECT-TYPE
         SYNTAX      RowPointer
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "If this label has a corresponding entry in the LSR MIB
             mplsOutSegmentTable, this RowPointer should point to that
             entry.

             Otherwise this field's value is zeroDotzero."
         ::= { mplsLdpDownLabelEntry 5 }

     mplsLdpDownLsrXCPointer OBJECT-TYPE
         SYNTAX      RowPointer
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "If this label is cross-connected to a distributed LDP
             upstream label mapping and there is an entry describing
             this cross-connect in the LSR MIB mplsXCTable, this
             RowPointer should point to that entry.

             Otherwise this field's value is zeroDotzero."
         ::= { mplsLdpDownLabelEntry 6 }"