Skip to main content

Early Review of draft-ietf-mpls-mldp-yang-12
review-ietf-mpls-mldp-yang-12-rtgdir-early-zhang-2025-01-29-00

Request Review of draft-ietf-mpls-mldp-yang-12
Requested revision 12 (document currently at 16)
Type Early Review
Team Routing Area Directorate (rtgdir)
Deadline 2025-02-03
Requested 2025-01-06
Requested by Tarek Saad
Authors Syed Kamran Raza , Xufeng Liu , Santosh Esale , Loa Andersson , Jeff Tantsura
I-D last updated 2026-07-02 (Latest revision 2026-02-03)
Completed reviews Yangdoctors Early review of -03 by Acee Lindem (diff)
Yangdoctors Early review of -11 by Joe Clarke (diff)
Rtgdir Early review of -12 by Zhaohui (Jeffrey) Zhang (diff)
Yangdoctors IETF Last Call review of -16 by Joe Clarke
Opsdir IETF Last Call review of -16 by Ran Chen
Genart IETF Last Call review of -16 by Meral Shirazipour
Secdir IETF Last Call review of -16 by Linda Dunbar
Rtgdir IETF Last Call review of -16 by Cheng Li
Comments
We are kindly asking for a early review before the last call.
Assignment Reviewer Zhaohui (Jeffrey) Zhang
State Completed
Request Early review on draft-ietf-mpls-mldp-yang by Routing Area Directorate Assigned
Posted at https://mailarchive.ietf.org/arch/msg/rtg-dir/yCEnuF2Bnuu9fY6JIJgXlNpToQ8
Reviewed revision 12 (document currently at 16)
Result Has nits
Completed 2025-01-29
review-ietf-mpls-mldp-yang-12-rtgdir-early-zhang-2025-01-29-00
I have only very limited comprehension of YANG from more than 10 years ago.
Therefore, my review does not include "9.  YANG Specification".
Security considerations are always a headache to me as well, and I skipped
"10. Security Considerations".

Many of the following questions/comments are because of my fuzzy
YANG understanding - perhaps some clarfication in the email or in the document
will clear them.

   [Ed Note: Some of the topics in the above list are to be addressed/
   extended in a later revision of this document].

Shouldn't the above be removed?

   For manually provisioned Multipoint LSPs, we represent its associated
   FEC as (root-address, opaque-element) tuple.  The following table
   lists various type of opaque elements with their keys, as later used
   in the configuration and state model:

Why "manually provisioned" only? Shouldn't it apply to both provisioned
ones (on leaves) and signaled ones (on roots/transit nodes)? In fact,
the last sentence does say "in the ... state model". Perhaps "manually
provisioned"?

  augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
    +--rw mpls-ldp
       +--rw global
       |  +--rw capability
       |  |  +--rw mldp:mldp
       |  |     +--rw mldp:p2mp
       |  |     |  +--rw mldp:enabled?   boolean
       |  |     +--rw mldp:mp2mp
       |  |     |  +--rw mldp:enabled?   boolean

Shouldn't all the "enabled" be "supported"? A router may "support" (or not)
a capability, and a supported capability nay be "enabled" (or not) by
provisioning as in the following (notice the "mldp:enabled"):

       |  +--rw mldp:mldp
       |     +--rw mldp:enabled?            boolean
       |     +--rw mldp:address-families
       |        +--rw mldp:ipv4!
       |        |  +--rw mldp:enabled?                  boolean
       |        |  +--ro mldp:roots
       |        |  |  +--ro mldp:root* [root-address]

For the following parameters in the "capability" portion,

       |  |     |  +--rw mldp:switchover-delay?   uint16
       |  |     |  +--rw mldp:timeout?            uint16
       ...
       |  |           +--rw mldp-ext:targeted-session-teardown-delay?   uint16

Shouldn't they be the under the following?

       |  +--rw mldp:mldp
       |     +--rw mldp:enabled?            boolean

If the "capability" is really about whether a feature is enabled on this
node or not, then I don't think we should call them out as "capabitlity" -
they'd just be like if mldp is enabled/configured or not.

I noticed that the global/peers part uses "capable" - should we make it
consistent?

     +--ro mldp:peer* [direction peer advertisement-type]
     |  +--ro mldp:peer                  ->
     ../../../../../../../../../../../ldp:peers/peer/lsr-id |  +--ro
     mldp:direction             ldp:downstream-upstream |  +--ro
     mldp:advertisement-type    ldp:advertised-received |  +--ro mldp:label?   
                 rt-types:mpls-label |  +--ro mldp:mbb-status?          
     lsp-mbb-role |  +--ro mldp-ext:mofrr-status?     lsp-mofrr-role

I noticed the a similar mldp-ext:peer (compared to mldp:peer)

     +--ro mldp-ext:peer* [direction peer advertisement-type]
        +--ro mldp-ext:peer                  ->
        ../../../../../../../../../../../../ldp:peers/peer/lsr-id +--ro
        mldp-ext:direction             ldp:downstream-upstream +--ro
        mldp-ext:advertisement-type    ldp:advertised-received +--ro
        mldp-ext:label?                rt-types:mpls-label +--ro
        mldp-ext:mbb-status?           lsp-mbb-role +--ro
        mldp-ext:mofrr-status?         lsp-mofrr-role

Can they not share a same defintition (is that called "grouping")?
The key is [direction peer advertisement-type], but the peer is listed before
direction. Does that matter?

     +--ro mldp:bindings
        +--ro mldp:opaque-element-lspid
        |     +--ro mldp-ext:recursive-fec* [recur-root-addr
        |        +--ro mldp-ext:recur-root-address    inet:ip-address
        |        +--ro mldp-ext:recur-rd             
        rt-types:route-distinguisher |        +--ro mldp-ext:multipoint-type?  
           mldp:multipoint-type +--ro mldp-ext:opaque-element-transit +--ro
        mldp-ext:opaque-element-bidir

Why is mldp-ext:recursive-fec nested under mldp:opaque-element-lspid instead
of parallel to all bindings? and where is the recursive part of the fec
(besides the recur-root-address/rd)?

  +--rw mldp:configured-leaf-lsps
  |  +--rw mldp:opaque-element-lspid
  |  |  +--rw mldp:fec-label* [root-address lsp-id]
  |  |     +--rw mldp:root-address         inet:ipv4-address
  |  |     +--rw mldp:lsp-id               uint32
  |  |     +--rw mldp:multipoint-type?     multipoint-type
  |  |     +--rw mldp-ext:recursive-fec* [recur-root-address recur-rd]
  |  |        +--rw mldp-ext:recur-root-address    inet:ip-address
  |  |        +--rw mldp-ext:recur-rd              rt-types:route-distinguisher
  |  |        +--rw mldp-ext:multipoint-type?      mldp:multipoint-type

Same question for the configured leaf lsp, and notifications.

Looking at the other fec types, I wonder if the sub-fields of
mldp-ext:recursive-fec should be pulled out, and the extra multipoint-type
be removed. Or, use the mldp-ext:recursive-fec for all (though the
multipoint-type seems to be extra).

I noticed that the configured leaf lsps and the notifications are very similar.
Could they share the same grouping (or whatever is the proper yang terminology)?

   *  mLDP enablement: To enable mLDP under a (VRF) routing instance,
      mldp is enabled in the mldp container under LDP.  It is to remind
      that the LDP modules reside under a network-instance and the scope
      of any configuration defined under this tree is network-instance
      (VRF) scoped.  Given that mLDP requires LDP signaling, it is not
      sensible to allow disabling the LDP control plane under a (VRF)
      network-instance while requiring mLDP to be enabled for the same.
      However, if a user wants to only allow signaling for multipoint
      FECs on an LDP/mLDP enabled VRF instance, he/she can use LDP
      label-policies to disable unicast FECs under the VRF.
      Alternatively, the same can be achieved by advertising the
      capabilities and the procedures defined in [RFC7473].

For the two alternatives (policy or RFC7473), how is it refected in the
YANG configuration/state?

   In most common deployments, it is desirable to disable mLDP
   (capabilities announcements) on a targeted-only LDP peering, where
   targeted-only peer is the one whose discovery sources are the
   targeted type only.

Why is that? It there a reference?