Subject: LDP MIB Nits

From: "Adrian Farrel" <[email-masked]>
Date: Thu, 12 Jun 2003 09:52:43 -0400

Hi Joan,

Good job with the LDP MIB.

Here are a few very picky nits. Typos and some very trivial point.

Cheers,
Adrian

Status of this Memo

   This document is an Internet-Draft and is in full conformance with
   all provisions of Section 10 of RFC 2026.  Internet-Drafts are

This reference is missing

3.  Structure of the MIB

   This section describes the structure of the LDP MIB.

# "module"

3.1.  Overview

[SNIP]

   The MPLS-LDP-MIB Module MUST be implemented and at least one of the
   Layer 2 MIB Modules MUST be implemented.

# 'MUST be implemented' by whom?

[SNIP]

   There are 2 Compliance statements for each MIB Module.  One which is
   for FULL Compliance which includes configuration and monitoring via
<  SNMP.  The other is a READ-ONLY Compliance which is only monitoring
>  SNMP.  The other is a READ-ONLY Compliance which is only for monitoring
                                                            ^^^
3.4.  Differences from the LDP Specification

   Currently, there are 3 differences between this specification and the
   LDP Specification.

# give reference

   As previously mentioned,

# Where? I don't find it.

   this MIB is almost
   entirely based on the LDP specification.  The differences are
<  documented here in the hope to avoid any confusion between the two
>  documented here to avoid any confusion between the two
   documents.

   The first difference is that the LDP Entity Table contains some
   DEFVAL clauses which are not specified explicitly in the LDP
   Specification.  These values, although not documented in the LDP
   Specification are widely used by existing LDP MIB implementations and
   thus, have been adopted within this MIB.

# "module"

   Please note, they can
<  certainly be changed during row creation or a subsequent set request.
>  certainly be changed during row creation or a subsequent SET request.
                                                            ^^^
3.5.  The MPLS-LDP-MIB Module

   This MIB Module contains objects which are common to all LDP
   implementations.  This MIB Module MUST always be implemented along
   with one or more of the Layer 2 MIB Modules.

   NOTE, this table allows the Label Edge Router (LER) or the Label
<  Switching router (LSR) to initiate and/or receive requests to
>  Switching Router (LSR) to initiate and/or receive requests to
             ^

   establish LDP sessions.  As the LDP protocol distributes labels and
   establishes sessions with Peers most of the tables in this MIB are

# "module"

3.5.1.  The LDP Entity Table

   The MPLS-LDP-MIB provides objects to configure/set-up potential LDP
   sessions on a specific LSR.  The mplsLdpEntityTable is used to
   configure potential LDP Sessions, where each row in the table
   represents a potential LDP Session.

   Each entry/row in this table represents a single LDP Entity.  There
   is no maximum number of LDP Entities specified.  However, there is an
   mplsLdpEntityIndexNext object which should be retrieved by the
   command generator prior to creating an LDP Entity.  If the
   mplsLdpEntityIndexNext object is zero, this indicates that the LSR is
   not able to create another LDP Entity at that time.

# There seems to be a contratiction between the last sentence of the 1st
# paragraph and the first of the 2nd. Perhaps you could clarify.

3.5.1.1.  Changing Values After Session Establishment

[SNIP]

   and Session statistics (i.e. releveant row in the mplsLdpSesTable).
   Also, if the LSR MIB is implemented and the optional Mapping Table

# "module"
# give reference

   objects are implemented, then all information related to the LSPs in
   this session should be removed from these MIBs. [For more information

# "module"

3.5.2.  The LDP Entity Statistics Table

   The mplsLpdEntityStatsTable is a read-only table which contains
   statistical information related to failed attempts to establish
   sessions.  Each row in this table is related to a single LDP entity
<  and this table AUGMENTS an mplsLdpEntityEntry.  This table could be
>  and each mplsLpdEntityStatsEntry AUGMENTS an mplsLdpEntityEntry. This
table could be
# the table doesn't augment an entry
# either the table augments a table, or an entry augments an entry

3.5.3.  The LDP Peer Table

[SNIP]

   The Peer Table information was placed in a separate table from the
<  Session information to allow for a  more comprehensive and coherent
>  Session information to allow for a more comprehensive and coherent
                                     ^
3.5.5.  The LDP Session Statistics Table

   The MPLS LDP Session Stats Table is a read-only table which contains
   statistical information on sessions.

# Say what it augments

<3.5.6.  The LDP Hello Adjacencies Table
>3.5.6.  The LDP Hello Adjacency Table
                               ^
   This is a table of all adjacencies between all LDP Entities and all
   LDP Peers.  A Session may have one or more adjacencies.  A session
   should not have zero adjacencies, because this indicates that the
   session has lost contact with the Peer.  A session which has zero
   Hello Adjacencies should be eventually removed.

# I don't think you should be allowed to say "eventually".
# Can you qualify it?

3.5.7.  The LDP LSP Table

# In this section (and possibly elsewhere in the draft?) you use
# "ingress label" and "egress label". This makes me nervous wrt LSPs
# where ingress and egress are different things. Could you say
# "incoming" and "outgoing" or 2input" and "output"?

3.5.9.  The LDP Session Peer Address Table

# Do you need 3.5.10 to discuss global objects?

3.6.  LDP Notifications

# I think this section would be enhanced by a note on control of
# Notifications. I think Tom had some Boiler Plate (TM) about how
# control is based within this MIB module, but I am really interested
# in how I stop these Notifications (especially since it is not
# a global object that you use.

     mplsLdpEntityIndex OBJECT-TYPE
         SYNTAX      IndexInteger
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "This index is used as a secondary index to uniquely
             identify this row.  Before creating a row in this table,
             the 'mplsLdpEntityIndexNext' object should be retrieved.
             That value should be used for the value of this index
<            when creating a row in this table.  (NOTE:  if a value
>            when creating a row in this table.  NOTE:  if a value
                                                 ^
             of zero (0) is retrieved, that indicates that no rows
             can be created in this table at this time.

             A secondary index (this object) is meaningful to some
             but not all, LDP implementations.  For example
<            in an LDP implementation which uses PPP would
>            an LDP implementation which uses PPP would
             ^

     mplsLdpEntityOperStatus OBJECT-TYPE
         SYNTAX      INTEGER {
                       unknown(1),
                       enabled(2),
                       disabled(3)
                     }
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "The operational status of this LDP Entity."
         ::= { mplsLdpEntityEntry 5 }

# I think one sentence explaining the meaning of unknown

     mplsLdpEntityInitSesThreshold OBJECT-TYPE
         SYNTAX      Integer32(0..100)
         MAX-ACCESS  read-create
         STATUS      current
         DESCRIPTION
             "When attempting to establish a session with a
             given Peer, the given LDP Entity should
             send out the SNMP notification,
             'mplsLdpInitSesThresholdExceeded', when
             the number of Session Initialization messages sent
             exceeds this threshold.  The notification is
             used to notify an operator when this Entity and
             its Peer are possibily engaged in an endless
             sequence of messages as each NAKs the other's
             Initialization messages with Error Notification
             messages.  Setting this threshold which triggers
             the notification is one way to
             notify the operator.

             A value of 0 (zero) for this object
             indicates that the threshold is infinity, thus
             the SNMP notification will never be generated."

# Should the local count be reset when the Notification is sent?
# In other words, one Notification per N attempts, or one for each
# attempt after N?

     mplsLdpEntityLabelType OBJECT-TYPE
         SYNTAX      MplsLdpLabelType
         MAX-ACCESS  read-create
         STATUS      current
         DESCRIPTION
             "Specifies the optional parameters for the LDP
             Initialization Message.  If the value is generic(1)
             then no optional parameters will be sent in
             the LDP Initialization message associated with
             this Entity.

             If the value is atmParameters(2) then
             a row must be created in the mplsLdpEntityAtmParms
             Table, which corresponds to this entry.

             If the value is frameRelayParameters(3) then
<            a row must be created in the mplsLdpEntityFrameRelayParms
<            Table, which corresponds to this entry."
>            a row must be created in the mplsLdpEntityFrameRelayTable,
>            which corresponds to this entry."

     mplsLdpEntityDiscontinuityTime OBJECT-TYPE
         SYNTAX      TimeStamp
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "The value of sysUpTime on the most recent occasion
             at which any one or more of this entity's counters
             suffered a discontinuity.  The relevant counters are the
             specific instances associated with this entity of
<            any Counter32, or Counter64 object contained
>            any Counter32 object contained
# there are not 64 bit counters

             in the 'mplsLdpEntityStatsTable'.  If no such
             discontinuities have occurred since the last
             re-initialization of the local management
             subsystem, then this object contains a zero
             value."
         ::= { mplsLdpEntityEntry 21 }

# Any reason why the discontinuity timer is here and not in the
# augmentation? If so, perhaps state it?

     mplsLdpEntityStatsEntry OBJECT-TYPE
         SYNTAX      MplsLdpEntityStatsEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "A row in this table contains statistical information
             about an LDP Entity.  Some counters contained in a
             row are for fatal errors received during a former
             LDP Session associated with this entry.  For example,
<            an Ldp Pdu received on a TCP connection during an
>            an LDP PDU received on a TCP connection during an
                 ^^  ^^
             LDP Session contains a fatal error.  That
             error is counted here, because the
             session is terminated.

<            If the error is NOT fatal (i.e. and the Session
>            If the error is NOT fatal (i.e. the Session

             remains), then the error is counted in the
             mplsLdpSesStatsEntry."
         AUGMENTS       {   mplsLdpEntityEntry  }
         ::= { mplsLdpEntityStatsTable 1 }

     mplsLdpEntityStatsSesAttempts OBJECT-TYPE
         SYNTAX      Counter32
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "A count of the total attempted sessions for
             this LDP Entity.
# Is this a count of the total attempts (including success) or
# the failures only?

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

     mplsLdpEntityStatsSesRejectedNoHelloErrors OBJECT-TYPE
         SYNTAX      Counter32
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "A count of the Session Rejected/No Hello Error
             Notification Messages sent or received by
             this LDP Entity.
# Is there merit in bundling 'sent or received' together?
# You do it for a bunch of errors and then after the errors
# which can only be local detection of receipts, you have a
# separate sent and receive counter for shutdown Notifications

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

     mplsLdpEntityStatsBadPduLengthErrors OBJECT-TYPE
         SYNTAX      Counter32
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
<            "This object counts the number of Bad Pdu Length
>            "This object counts the number of Bad PDU Length
                                                    ^^
     mplsLdpPeerTransportAddr OBJECT-TYPE
         SYNTAX      InetAddress
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "The transport address advertized by the peer
<            in the hello message or the Hello source address."
>            in the Hello Message or the Hello source address."
                    ^     ^
         REFERENCE
            "[RFC3036], LDP Specification, Section 2.5.2
            Transport Connection Establishment and
            Section 3.5.2.1 Hello Message Procedures."
         ::= { mplsLdpPeerEntry 5 }

     --
     -- The MPLS LDP Sessions Table
     --

     mplsLdpSesTable OBJECT-TYPE
         SYNTAX      SEQUENCE OF MplsLdpSesEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "A table of Sessions between the LDP Entities and
             LDP Peers.  Each row represents a single session."
# Please comment that this augments the peer table
         ::= { mplsLdpSesObjects 3 }

     mplsLdpSesEntry OBJECT-TYPE
         SYNTAX      MplsLdpSesEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "An entry in this table represents information on a
             single session between an LDP Entity and LDP Peer.
             The information contained in a row is read-only.

             Please note:  the Path Vector Limit for the
             Session is the value which is configured in
             the corresponding mplsLdpEntityEntry. The
             Peer's Path Vector Limit is in noted in the
             mplsLdpPeerTable.

             Values which may differ from those configured are
             noted in the objects of this table, the
             mplsLdpAtmSesTable and the
             mplsLdpFrameRelaySesTable. A value will
             differ if it was negotiated between the
             Entity and the Peer. Values may or may not
             be negotiated. For example, if the values
             are the same then no negotiation takes place.
             If they are negotiated, then they may differ."
         AUGMENTS { mplsLdpPeerEntry }

     mplsLdpSesDiscontinuityTime OBJECT-TYPE
# ditto the placement in the parent not the augment table

     mplsLdpSesStatsTable OBJECT-TYPE
         SYNTAX      SEQUENCE OF MplsLdpSesStatsEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "A table of statistics for Sessions between
             LDP Entities and LDP Peers."
# plase say this augments (whatever it augments!)

     mplsLdpSesStatsUnkMesTypeErrors OBJECT-TYPE
         SYNTAX      Counter32
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "This object counts the number of Unknown Message Type
<            Errors detected during this session.
>            Errors detected by this LSR during this session.
                             ^^^^^^^^^^^
             Discontinuities in the value of this counter can occur
             at re-initialization of the management system, and at
             other times as indicated by the value of
             mplsLdpSesDiscontinuityTime."
         ::= { mplsLdpSesStatsEntry 1 }

     mplsLdpSesStatsUnkTlvErrors OBJECT-TYPE
         SYNTAX      Counter32
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "This object counts the number of Unknown TLV Errors
<            detected during this session.
>            detected by this LSR during this session.
                      ^^^^^^^^^^^
             Discontinuities in the value of this counter can occur
             at re-initialization of the management system, and at
             other times as indicated by the value of
             mplsLdpSessionDiscontinuityTime."
         ::= { mplsLdpSesStatsEntry 2 }

     mplsLdpHelloAdjacencyEntry OBJECT-TYPE
         SYNTAX      MplsLdpHelloAdjacencyEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "Each row represents a single LDP Hello Adjacency.
<            An LDP Session can have one or more Hello adjacencies."
>            An LDP Session can have one or more Hello Adjacencies."
                                                       ^
     mplsLdpHelloAdjacencyHoldTimeRem OBJECT-TYPE
         SYNTAX      TimeInterval
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "The time remaining for this Hello Adjacency.
             This interval will change when the 'next'
<            Hello message which corresponds to this
>            Hello Message which corresponds to this
                   ^
             Hello Adjacency is received."
         ::= { mplsLdpHelloAdjacencyEntry 2 }

     mplsLdpHelloAdjacencyHoldTime OBJECT-TYPE
         SYNTAX Unsigned32
         MAX-ACCESS  read-only
         STATUS      current
         DESCRIPTION
             "The Hello hold time which is negotiated between
             the Entity and the Peer.

              A value of 0 means the default,
              which is 15 seconds for Link Hellos and 45 seconds
              for Targeted Hellos.  A value of 0xffff indicates an
              infinite hold time."

# I may be wrong, but I think you need 0xffffffff, or should this be a
# uint16? Or perhaps you need unit32 but values above 0xffff are not
# valid?

     mplsInSegmentLdpLspTable OBJECT-TYPE
         SYNTAX      SEQUENCE OF MplsInSegmentLdpLspEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "A table of LDP LSP's which
             map to the InSegment Table in the
             the LSR MIB's."
# The LSR MIB's what?

     mplsInSegmentLdpLspEntry OBJECT-TYPE
# Tom's new indexing scheme (if I don't kill him first!)

     mplsInSegmentLdpLspIfIndex OBJECT-TYPE
         SYNTAX       InterfaceIndexOrZero
         MAX-ACCESS   not-accessible
         STATUS       current
         DESCRIPTION
             "The ifIndex value associated with this LSP which has the
             same value as the mplsInSegmentIfIndex in the MPLS-LSR-MIB's
             mplsInSegmentTable."
# Add note about the meaning of zero?

     mplsOutSegmentLdpLspTable OBJECT-TYPE
         SYNTAX      SEQUENCE OF MplsOutSegmentLdpLspEntry
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "A table of LDP LSP's which
             map to the InSegment Table in the
             the LSR MIB's."
# The LSR MIB's what?

     mplsOutSegmentLdpLspEntry OBJECT-TYPE
# Shouldn't be surprised if this indexing isn't broken, too

     mplsFecAddr     OBJECT-TYPE
         SYNTAX      InetAddress
         MAX-ACCESS  read-create
         STATUS      current
         DESCRIPTION
             "The value of this object is the an address where the
             address type is specified by the 'mplsFecAddrFamily' object.

             This address is then used as either an address prefix,
             or as the host address as indicated by the 'mplsFecType'
             object.  In other words, the FEC element is populated
             according to the Prefix FEC Element value encoding, or
             the Host Address FEC Element encoding."
# Either this should default to zero (because prefix length defaults to
# zero and you have stated a rule) or FecType should default to 'host'

     mplsFecStorageType  OBJECT-TYPE
         SYNTAX      StorageType
         MAX-ACCESS  read-create
         STATUS      current
         DESCRIPTION
                "The storage type for this conceptual row.  Conceptual rows
                having the value 'permanent(4)' MAY allow write-access to
                any columnar objects in the row, except for setting the
                'mplsFecRowStatus' to 'destroy(6)'."
# indentation is wrong
         DEFVAL { nonVolatile }
         ::= { mplsFecEntry 6 }

# I have an issue with your use of storage type, which differs from Tom's.
# I have assumed that 'peranent' means that if I restart the agent, master
# agent or LDP software, this configuration inforation should be restored.
# You have made 'permanent' mean undeletable.
#
# I guess both are acceptable meanings, but probably only one is standard
# usage within MIBs. One of you needs to conform with the other!
#
# This comment applies to every instance of storage type

     mplsFecRowStatus OBJECT-TYPE
         SYNTAX      RowStatus
         MAX-ACCESS  read-create
         STATUS      current
         DESCRIPTION
             "The status of this conceptual row.  If the value of this
             object is 'active(1)', then none of the writable objects of
             this entry can be modified, except to set this object
             to 'destroy(6)'.

# Why am I not allowed to transition a row to 'notInService'?
# This comment applies to every instance of row status

     mplsLdpLspFecIfIndex OBJECT-TYPE
         SYNTAX      InterfaceIndexOrZero
         MAX-ACCESS  not-accessible
         STATUS      current
         DESCRIPTION
             "This index is either the mplsInSegmentLdpLspIfIndex
             or the mplsOutSegmentLdpLspIfIndex as indicated by
             the mplsLdpLspFecSegment."
# Comment special meaning of zero

     mplsLdpLspFecOperStatus  OBJECT-TYPE
        SYNTAX      INTEGER {
                              unknown(1),
                              inUse(2),
                              notInUse(3)
                            }
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
           "An indication of the operational status of
           the FEC associated with LDP LSP.

           unknown(1) - this is a temporary state which
                        may indicate the LSP-FEC association
                        is in a state of transition.

           inUse(2) - the FEC associated with the LSP is
                      currently being applied.

           notInUse(3) - the FEC associated with the LSP is
                         not being applied.  Eventually, this
                         entry may be aged out."

# There you go with "eventually" again :-)
# But also, please say how you arrive at 'notInUse'. What does it mean?

     mplsLdpLspFecRowStatus  OBJECT-TYPE
        SYNTAX     RowStatus
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
              "The status of this conceptual row.  If the value of this
              object is 'active(1)', then none of the writable objects of
              this entry can be modified.

# The folowing text is confusing (to me).
# I thought the relationship for FEC<-->LSP and LSP<-->Session
# I'm not clear about how you describe FEC to session
# If I've missed something, just ignore me (there really is no need
# to explain LDP to me at this stage in my life :-)
              The Agent should delete this row when the Session ceases to
              exist.  If an operator wants to associate the session with
              a different FEC, the recommended
              procedure is (as described in detail in the section
              entitled, 'Changing Values After Session
              Establishment', and again described in the
              DESCRIPTION clause of the mplsLdpEntityAdminStatus object)
              is to set the mplsLdpEntityAdminStatus to down, thereby
              explicitly causing a session to be torn down. This will also
              cause this entry to be deleted.

              Then, set the mplsLdpEntityAdminStatus
              to enable which enables a NEW session to be initiated.
              Once the session is initiated, an entry may be added to this
              table to associate the new session with a FEC."
        ::= { mplsLdpLspFecEntry 8 }

     mplsLdpPathVectorLimitMismatch NOTIFICATION-TYPE
          OBJECTS     {
                        mplsLdpEntityPathVectorLimit,
                        mplsLdpPeerPathVectorLimit
                      }
          STATUS      current
          DESCRIPTION
<            "If this notification is enabled to generated,
>            "If this notification is enabled to be generated,
                                                 ^^
# Please also say how it is enabled.
# Same changes in all subsequent notifications

4.1.  The MPLS-LDP-ATM-MIB Module

   This MIB Module MUST be supported if LDP uses ATM as the Layer 2
<  media.  There are three tables in this MIB Module.  Two tables are
>  medium.  There are three tables in this MIB Module.  Two tables are
       ^^
   for configuring LDP to use ATM.  These tables are the
   mplsLdpEntityAtmParmsTable and the mplsLdpEntityAtmLabelRangeTable.

   The mplsLdpEntityAtmParmsTable provides a way to configure
   information which would be contained in the "Optional Parameter"
   portion of an LDP PDU Initialization Message.

   The mplsLdpEntityAtmLabelRangeTable provides a way to configure
   information which would be contained in the "ATM Label Range
   Components" portion of an LDP PDU Intialization Message, see
   [RFC3035] and [RFC3036].

# And the third table is...?

   mplsLdpEntityAtmTable  OBJECT-TYPE
       SYNTAX      SEQUENCE OF MplsLdpEntityAtmEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
<          "This table contains information about the
<          ATM specific information which could be used
<          in the 'Optional Parameters' and other ATM specific
<          information.
>          "This table contains ATM specific information which
>          could be used in the 'Optional Parameters' and other
>          ATM specific information.

           This table 'extends' the mplsLdpEntityTable when
<          ATM as the Layer 2 media."
>          ATM as the Layer 2 medium."
                                  ^^

   mplsLdpEntityAtmIfIndexOrZero  OBJECT-TYPE
       SYNTAX      InterfaceIndexOrZero
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
          "This value represents either the InterfaceIndex of
          the 'ifLayer' where the ATM Labels 'owned' by this
          entry were created, or 0 (zero).  The value of zero
          means that the InterfaceIndex is not known.  For example,
          if the InterfaceIndex is created subsequent to the
          ATM Label's creation, then it would not be known.
# huh? Do you mean "subsequent to the creation of the ATM Labels"?

   mplsLdpEntityAtmRowStatus OBJECT-TYPE
[SNIP]
            NOTE:  This RowStatus object should
            have the same value of the 'mplsLdpEntityRowStatus'
            related to this entry."
# upper case SHOULD
# but, why have it?
# alternatively make it a firm requirement that "agents that
# change the setting of this object must make the identical change
# the the value of mplsLdpEntityRowStatus" and place a similar
# comment in the definition of mplsLdpEntityRowStatus

       ::= { mplsLdpEntityAtmEntry 11 }

   --
   -- The MPLS LDP Entity ATM Label Range Table
   --

# Somewhere around here I got confused!
# We have a count of AtmLRComponents which is SETable
# So now I can have
# - not enough corresponding entries in AtmSesTable
# - enough objects in AtmSesTable, but the corresponding
#   objects in mplsLdpEntityAtmLRTable have rowSatuts
#   not active (or even don't exist!)
#
# I would suggest AtmLRComponents should be read-only
# That probably covers it since you have dire warnings in
# the rowStatus objects

   mplsLdpEntityAtmLREntry OBJECT-TYPE
       SYNTAX MplsLdpEntityAtmLREntry
       MAX-ACCESS not-accessible
       STATUS current
       DESCRIPTION
           "A row in the LDP Entity ATM Label
           Range Table.  One entry in this table contains
           information on a single range of labels
           represented by the configured Upper and Lower
           Bounds VPI/VCI pairs.  These are the same
           data used in the Initialization Message.

           NOTE:  The ranges for a specific LDP Entity
           are UNIQUE and non-overlapping.  For example,
           for a specific LDP Entity index, there could
           be one entry having LowerBound vpi/vci == 0/32, and
           UpperBound vpi/vci == 0/100, and a second entry
           for this same interface with LowerBound
           vpi/vci == 0/101 and UpperBound vpi/vci == 0/200.
           However, there could not be a third entry with
           LowerBound vpi/vci == 0/200 and
           UpperBound vpi/vci == 0/300 because this label
           range overlaps with the second entry (i.e. both
           entries now have 0/200).

           A row will not be created unless a unique and
           non-overlapping range is specified.  Thus, row
           creation implies a one-shot row creation of
           LDP EntityID and LowerBound vpi/vci and
           UpperBound vpi/vci.  At least one label
           range entry for a specific LDP Entity MUST
           include the default VPI/VCI  values denoted
           in the LDP Entity Table."
# One-shot always worries me because I spent too long living with
# HP OpenView at a time when it could only touch one object at a
# time. So...
# What is wrong with allowing notReady row creation and
# preventing overlap only at the time of setting rowStatus to
# active?
# Similarly, if I wanted to change a range, I could set it
# notInService, cahnge the objects one at a time (during which time
# it might overlap another rrange) and set it back to active when
# I'm done.

4.2.  The MPLS-LDP-FRAME-RELAY-MIB Module

   This MIB Module MUST be supported if LDP uses FRAME RELAY as the
<  Layer 2 media.  There are three tables in this MIB Module.  Two
>  Layer 2 medium.  There are three tables in this MIB Module.  Two
               ^^
   tables are to configure LDP for using Frame Relay.  These tables are
<  the mplsLdpEntityFrameRelayParmsTable and the
<  mplsLdpEntityFrameRelayLabelRangeTable.
>  the mplsLdpEntityFrameRelayTable and the
>  mplsLdpEntityFrameRelayLRTable.

<  The mplsLdpEntityFrameRelayParmsTable provides a way to configure
>  The mplsLdpEntityFrameRelayTable provides a way to configure
   information which would be contained in the "Optional Parameter"
   portion of an LDP PDU Initialization Message.

<  The mplsLdpEntityFrameRelayLabelRangeTable provides a way to
>  The mplsLdpEntityFrameRelayLRTable provides a way to
   configure information which would be contained in the "Frame Relay
   Label Range Components" portion of an LDP PDU Intialization Message,
   see [RFC3034] and [RFC3036].

# And the third table is...?

4.3.  The MPLS-LDP-GENERIC-MIB Module

   This MIB Module MUST be supported if LDP uses a Per Platform Label
   Space.  This MIB Module contains a Label Range (LR) table for
<  configuring Mpls Generic Label Ranges.  This table is
>  configuring MPLS Generic Label Ranges.  This table is
               ^^^^
<  mplsLdpEntityGenericLabelRangeTable.  Although the LDP Specification
>  mplsLdpEntityGenericLRTable.  Although the LDP Specification
   does not provide a way for configuring Label Ranges for Generic
   Labels, the MIB does provide a way to reserve a range of generic
   labels because this was thought to be useful by the working group.

   mplsLdpEntityGenericIfIndexOrZero OBJECT-TYPE
       SYNTAX      InterfaceIndexOrZero
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
          "This value represents either the InterfaceIndex of
          the 'ifLayer' where these Generic Label would be created,
          or 0 (zero).  The value of zero means that the
          InterfaceIndex is not known.  For example, if
          the InterfaceIndex is  created subsequent to
          the Generic Label's creation, then it would not be
# as for previous tables
          known.  However, if the InterfaceIndex
          is known, then it must be represented by this value.
          If an InterfaceIndex becomes known, then the
          network management entity (e.g. SNMP agent) responsible
          for this object MUST change the value from 0 (zero) to the
          value of the InterfaceIndex."
       ::= { mplsLdpEntityGenericLREntry 4 }

8.  Informative References

[SNIP]

# I think this is normative for ifIndex

[RFC2863]   McCloghrie, K., F. Kastenholz,  "The Interfaces Group MIB
            using SMIv2", RFC 2863, June 2000.

[MPLSMGMT]  Nadeau, T., Srinivasan, C., and A. Farrel, "Multiprotocol
            Label Switching (MPLS) Management Overview", draft-ietf-
<           mpls-mgmt-overview-03.txt, February 2003.
>           mpls-mgmt-overview-04.txt, April 2003.

9.1.  Security Considerations for MPLS-LDP-MIB

[SNIP]

<  Some of the readable objects in this MIB module "i.e., objects with a
>  Some of the readable objects in this MIB module i.e., "objects with a
                                                   ^     ^