Subject: [mpls] Yangdoctors early review of draft-ietf-mpls-mldp-yang-03

From: Acee Lindem <[email-masked]>
Date: Wed, 13 Dec 2017 10:27:15 -0800

Reviewer: Acee Lindem
Review result: On the Right Track

I have reviewed this document as part of the YANG doctors directorate's 
ongoing effort to review all IETF documents being processed by the IESG.  These 
comments were written with the intent of improving the operational aspects of the 
IETF drafts. Comments that are not addressed in last call may be included in AD reviews 
during the IESG review.  Document editors and WG chairs should treat these comments 
just like any other early review comments. 

Document: draft-ietf-mpls-mldp-yang-03.txt
Reviewer: Acee Lindem
Review Date: December 13, 2017
Review Type: Early Review
Intended Status: Standards Track
Summary: On right track but has issues

Modules: "[email-masked]" and "[email-masked]"

Tech Summary: While I have a good general understanding of MPLS and LDP, 
I am not familiar with the details of the all the mLDP features in the
extended model.  

Major Issue:

  The "Security Considerations" cannot just reference the ldp YANG considerations. The
  schema nodes that are sensitive will be different and multicast (e.g., P2MP and MP2MP) 
  are suspectible to different attacks than unicast. 

General Comments:

  1. There are places where it the text alludes to additional features to be covered
     in a future version of the document. If the document is to progress, 
     the authors need to agree on the scope of the modules. 

  2. There are no configuration and operational state XML or JSON examples as 
     recommended by RFC6087BIS. 

  3. Some of the YANG descriptions are rather terse and look as though they were
     added solely for pyang validation. Also, why are they all terminated with a
     period. Normally a period is reserved for complete sentences. However, I didn't
     remove these in my editorial comments.

  4. Add RFC 7431 as a normative reference since the extended mLDP model covers 
     Multicast-Only FRR. 

Comments on ietf-mpsl-mldp.yang:

   1. The module prologue doesn't conform to the RFC6087BIS template. For example, 
      the chairs should no longer be listed. 

   2. The grouping mldp-binding-label-peer-state-attributes is arbitrary. Cascading
      multiple levels of groupings that are only used in a single place just makes
      the module harder to read. In fact, the module would easier to read even
      with mldp-binding-label-state-attributes inline.

   3. Why is there a choice with only a single case under opaque-type in 
      mldp-fec-event?

   3. is-self says "This is the root." I'm assuming it means the YANG server itself
      is the root.  

   4. "opaque-type-lspid" is a very poor choice for an identifier. It confuses the
      reading into thinking it is a type. Use "opaque-lspid". 

   5. Move the grouping mldp-fec-event inline unless you are using it elsewhere. 

Minor Editorial Commments:

*** ietf-mpls-mldp.yang.orig           2017-12-12 19:09:40.000000000 -0500
--- ietf-mpls-mldp.yang                2017-12-12 19:52:08.000000000 -0500
***************
*** 82,91 ****
        description
          "p2mp or mp2mp.";
      }
      /*
       * Groupings
       */
- 
      grouping mldp-capabilities {
        description
          "mLDP capabilities.";
--- 82,91 ----
        description
          "p2mp or mp2mp.";
      }
+      
      /*
       * Groupings
       */
      grouping mldp-capabilities {
        description
          "mLDP capabilities.";
***************
*** 131,137 ****
      } // mldp-capabilities
      grouping mldp-fec-event {
        description
!          "A mLDP FEC event.";
        choice opaque-type {
          description
            "The type of opaque value element.";
--- 131,137 ----
      } // mldp-capabilities
      grouping mldp-fec-event {
        description
!          "mLDP FEC event.";
        choice opaque-type {
          description
            "The type of opaque value element.";
***************
*** 157,169 ****
              leaf multipoint-type {
                type multipoint-type;
                description
!                  "The type of mutipoint, p2mp or mp2mp.";
              }
            } // container opaque-type-lspid
          }
        }
      } // mldp-fec-event
- 
      grouping  mldp-binding-label-peer-state-attributes {
        description
          "mLDP label binding per peer attributes.";
--- 157,168 ----
              leaf multipoint-type {
                type multipoint-type;
                description
!                  "The type of multipoint: p2mp or mp2mp.";
              }
            } // container opaque-type-lspid
          }
        }
      } // mldp-fec-event
      grouping  mldp-binding-label-peer-state-attributes {
        description
          "mLDP label binding per peer attributes.";
***************
*** 199,205 ****
          }
          type enumeration {
            enum none {
!              description "MBB is not enabled.";
            }
            enum active {
              description "This LSP is active.";
--- 198,204 ----
          }
          type enumeration {
            enum none {
!              description "Make-Before-Break (MBB) is not enabled.";
            }
            enum active {
              description "This LSP is active.";
***************
*** 329,335 ****
                  list reachability {
                    key "address interface";
                    description
!                      "A next hop for reachability to root,
                         as a RIB view.";
                    leaf address {
                      type inet:ipv4-address;
--- 328,334 ----
                  list reachability {
                    key "address interface";
                    description
!                      "A next-hop for reachability to root,
                         as a RIB view.";
                    leaf address {
                      type inet:ipv4-address;
***************
*** 348,354 ****
                          + "ldp:peer/ldp:lsr-id";
                      }
                      description
!                        "LDP peer from which this next hop can be
                         reached.";
                    }
                  }
--- 347,353 ----
                          + "ldp:peer/ldp:lsr-id";
                      }
                      description
!                        "LDP peer from which this next-hop can be
                         reached.";
                    }
                  }
***************
*** 359,365 ****
                    container opaque-type-lspid {
                      description
                        "The type of opaque value element is
!                           the generic LSP identifier";
                      reference
                        "RFC6388: Label Distribution Protocol
                         Extensions for Point-to-Multipoint and
--- 358,364 ----
                    container opaque-type-lspid {
                      description
                        "The type of opaque value element is
!                         the generic LSP identifier";
                      reference
                        "RFC6388: Label Distribution Protocol
                         Extensions for Point-to-Multipoint and
***************
*** 377,383 ****
                        leaf multipoint-type {
                          type multipoint-type;
                          description
!                            "The type of mutipoint, p2mp or mp2mp.";
                        }
                        uses mldp-binding-label-state-attributes;
                      } // fec-label
--- 376,382 ----
                        leaf multipoint-type {
                          type multipoint-type;
                          description
!                            "The type of multipoint: p2mp or mp2mp.";
                        }
                        uses mldp-binding-label-state-attributes;
                      } // fec-label
***************
*** 415,421 ****
                    leaf multipoint-type {
                      type multipoint-type;
                      description
!                        "The type of mutipoint, p2mp or mp2mp.";
                    }
                  } // fec-label
                } // opaque-type-lspid
--- 414,420 ----
                    leaf multipoint-type {
                      type multipoint-type;
                      description
!                        "The type of multipoint: p2mp or mp2mp.";
                    }
                  } // fec-label
                } // opaque-type-lspid

Comments on ietf-mpsl-mldp-extended.yang:

   1. The module prologue doesn't conform to the RFC6087BIS template. For example, 
      the chairs should no longer be listed. 

   2. The module description is a copy of the base mLDP. It should refer that the
      module contains extended functions.
 
   3. There is a type for route-distinguisher in ietf-routing-types. 

   4. The lsa-key-type is very confusing since the root-address is actually the
      key for the grouping. 

   5. All these containers that start "opaque-type..." would be less confusing if
      they just read "opaque..". These are NOT YANG type or any other type of 
      type.

   6. For FEC-label in opaque-type-transit, do you really need every node to be
      part of the key? 

Editorial Nits:

*** ietf-mpls-mldp-extended.yang.orig   2017-12-12 20:33:09.000000000 -0500
--- ietf-mpls-mldp-extended.yang        2017-12-12 21:14:14.000000000 -0500
***************
*** 101,108 ****
       * Typedefs
       */
      typedef route-distinguisher {
!        type string {
!        }
        description
          "Type definition for route distinguisher.";
        reference
--- 101,107 ----
       * Typedefs
       */
      typedef route-distinguisher {
!        type string;
        description
          "Type definition for route distinguisher.";
        reference
***************
*** 175,186 ****
          leaf plr {
            type boolean;
            description
!              "Point of Local Repair capable for MP LSP node
!               protection.";
          }
          container merge-point {
            description
!              "Merge Point capable for MP LSP node protection.";
            leaf enable {
              type boolean;
              description
--- 174,185 ----
          leaf plr {
            type boolean;
            description
!              "Point of Local Repair capable for Multipoint LSP
!               node protection.";
          }
          container merge-point {
            description
!              "Merge Point capable for Multipoint LSP node protection.";
            leaf enable {
              type boolean;
              description
***************
*** 271,277 ****
          leaf prefix-list {
            type ldp-ext:prefix-list-ref;
            description
!              "Enables MoFRR for the specified access list.";
          }
        } // multicast-only-frr
        container recursive-fec {
--- 270,276 ----
          leaf prefix-list {
            type ldp-ext:prefix-list-ref;
            description
!              "Enables Multicast-Only FRR (MoFRR) for the specified 
!               prefix list.";
          }
        } // multicast-only-frr
        container recursive-fec {
***************
*** 280,288 ****
          leaf prefix-list {
            type ldp-ext:prefix-list-ref;
            description
!              "Enables recursive FEC for the specified access list.";
          }
!        } // recursive-for
      } // mldp-ext-per-af-config-attibutes

      grouping recursive-fec-attibutes {
--- 279,287 ----
          leaf prefix-list {
            type ldp-ext:prefix-list-ref;
            description
!              "Enables recursive FEC for the specified prefix list.";
          }
!        } // recursive-fec
      } // mldp-ext-per-af-config-attibutes

      grouping recursive-fec-attibutes {
***************
*** 308,314 ****
        leaf multipoint-type {
          type mldp:multipoint-type;
          description
!            "The type of mutipoint, p2mp or mp2mp.";
        }
      } // recursive-fec-attibutes

--- 307,313 ----
        leaf multipoint-type {
          type mldp:multipoint-type;
          description
!            "The type of multipoint: p2mp or mp2mp.";
        }
      } // recursive-fec-attibutes

***************
*** 377,384 ****
             Multipoint-to-Multipoint Label Switched Paths.";
          list fec-label {
            key
!              "root-address source-address group-address "
!            + "rd recur-root-address recur-rd";
            description
              "List of FEC to label bindings.";
            leaf root-address {
--- 376,383 ----
             Multipoint-to-Multipoint Label Switched Paths.";
          list fec-label {
            key
!              "root-address source-address group-address " +
!              "rd recur-root-address recur-rd";
            description
              "List of FEC to label bindings.";
            leaf root-address {
***************
*** 433,439 ****
            leaf rp {
              type inet:ip-address;
              description
!                "RP address.";
            }
            leaf group-address {
              type inet:ip-address-no-zone;
--- 432,438 ----
            leaf rp {
              type inet:ip-address;
              description
!                "Rendezvous-Point address.";
            }
            leaf group-address {
              type inet:ip-address-no-zone;
***************
*** 472,478 ****
        leaf mldp-disable {
          type boolean;
          description
!            "Disable mLDP forwarding on the interface.";
        }
      }

--- 471,477 ----
        leaf mldp-disable {
          type boolean;
          description
!            "Disable mLDP forwarding on this interface.";
        }
      }

***************
*** 523,535 ****
          leaf plr {
            type boolean;
            description
!              "Point of Local Repair capable for MP LSP node
               protection.";
          }
          leaf merge-point {
            type boolean;
            description
!              "Merge Point capable for MP LSP node protection.";
          } // merge-point
        } // node-protection
      }
--- 522,534 ----
          leaf plr {
            type boolean;
            description
!              "Point-of-Local-Repair capable for Multipoint LSP node
               protection.";
          }
          leaf merge-point {
            type boolean;
            description
!              "Merge Point capable for Multipoint LSP node protection.";
          } // merge-point
        } // node-protection
      }
***************
*** 682,688 ****
            leaf rp {
              type inet:ip-address;
              description
!                "RP address.";
            }
            leaf group-address {
              type inet:ip-address-no-zone;
--- 681,687 ----
            leaf rp {
              type inet:ip-address;
              description
!                "Rendezvous Point (RP) address.";
            }
            leaf group-address {
              type inet:ip-address-no-zone;
***************
*** 773,784 ****
              list reachability {
                key "address interface";
                description
!                  "A next hop for reachability to root,
                   as a RIB view.";
                leaf address {
                  type inet:ipv6-address;
                  description
!                    "The next hop address to reach root.";
                }
                leaf interface {
                  type if:interface-ref;
--- 772,783 ----
              list reachability {
                key "address interface";
                description
!                  "A next-hop for reachability to root,
                   as a RIB view.";
                leaf address {
                  type inet:ipv6-address;
                  description
!                    "The next-hop address to reach root.";
                }
                leaf interface {
                  type if:interface-ref;
***************
*** 792,798 ****
                      + "ldp:peer/ldp:lsr-id";
                  }
                  description
!                    "LDP peer from which this next hop can be
                     reached.";
                }
              }
--- 791,797 ----
                      + "ldp:peer/ldp:lsr-id";
                  }
                  description
!                    "LDP peer from which this next-hop can be
                     reached.";
                }
              }
***************
*** 821,827 ****
                    leaf multipoint-type {
                      type mldp:multipoint-type;
                      description
!                        "The type of mutipoint, p2mp or mp2mp.";
                    }

                    uses mldp-ext-binding-label-state-attributes;
--- 820,826 ----
                    leaf multipoint-type {
                      type mldp:multipoint-type;
                      description
!                        "The type of multipoint: p2mp or mp2mp.";
                    }

                    uses mldp-ext-binding-label-state-attributes;
***************
*** 861,867 ****
                leaf multipoint-type {
                  type mldp:multipoint-type;
                  description
!                    "The type of mutipoint, p2mp or mp2mp.";
                }
                list recursive-fec {
                  key
--- 860,866 ----
                leaf multipoint-type {
                  type mldp:multipoint-type;
                  description
!                    "The type of multipoint:p2mp or mp2mp.";
                }
                list recursive-fec {
                  key
***************
*** 1040,1046 ****
            leaf rp {
              type inet:ip-address;
              description
!                "RP address.";
            }
            leaf group-address {
              type inet:ip-address-no-zone;
--- 1039,1045 ----
            leaf rp {
              type inet:ip-address;
              description
!                "Rendezvous-Point (RP) address.";
            }
            leaf group-address {
              type inet:ip-address-no-zone;

Editorial comments on the draft text are included below. There seems to be an absence of articles...

*** draft-ietf-mpls-mldp-yang-03.txt.orig         2017-12-12 18:17:12.000000000 -0500
--- draft-ietf-mpls-mldp-yang-03.txt              2017-12-13 11:47:06.000000000 -0500
***************
*** 120,132 ****

    This document introduces a YANG data model for MPLS Multipoint Label
    Distribution Protocol (mLDP).  The mLDP model being defined here is
!    dependent on LDP YANG data model [I-D.ietf-mpls-ldp-yang].  This
!    implies that an opertor will need to use base LDP module to configure
!    and manage control plane for mLDP.  For example, an operator would
    enable LDP discovery on MPLS interface to establish LDP/mLDP peering
    on which mLDP bindings could be exchanged.  Similarly, an operator
    could query state information for an LDP peer in order to verify
!    peering attributes etc.

    Moreover, it is important to note here that any assumptions made in
    the LDP model also hold true in this document, unless otherwise
--- 120,132 ----

    This document introduces a YANG data model for MPLS Multipoint Label
    Distribution Protocol (mLDP).  The mLDP model being defined here is
!    dependent on the LDP YANG data model [I-D.ietf-mpls-ldp-yang].  This
!    implies that an opertor will need to use the base LDP module to configure
!    and manage the control plane for mLDP.  For example, an operator would
    enable LDP discovery on MPLS interface to establish LDP/mLDP peering
    on which mLDP bindings could be exchanged.  Similarly, an operator
    could query state information for an LDP peer in order to verify
!    peering attributes, etc.

    Moreover, it is important to note here that any assumptions made in
    the LDP model also hold true in this document, unless otherwise
***************
*** 157,164 ****

 1.1.  Base and Extended

!    Like LDP model, the configuration and state items are divided into
!    following two broad categories:

--- 157,164 ----

 1.1.  Base and Extended

!    Like the LDP model, the configuration and state items are divided into
!    the following two broad categories:

***************
*** 173,197 ****
    o  Extended

    The "base" category contains the basic and fundamental features that
!    are covered in mLDP base specification [RFC6388] alongwith few
    significant extension like targeted mLDP [RFC7060], constituting the
    minumum requirements for an mLDP deployment.  Whereas, the "extended"
    category contains all other non-base features (such as recursive FEC
!    support, protection etc.).  All the items in a base category are
    mandatory and hence no "if-feature" is allowed under the "base"
    category.  While "base" model support will suffice for small
    deployments, large deployments will require not only the "base"
    module support but also "extended" support for some selected and
    required features.

!    The base and extended catogories are defined in their own modules
    ietf-mpls-mldp and ietf-mpls-mldp-extended respectively, each of
!    which augments the LDP base model as defined under ietf-mpls-ldp
    module [I-D.ietf-mpls-ldp-yang].

!    Like LDP, mLDP "base" model configuration and state covers ipv4
    address-family only, with ipv6 address-family related configuration
!    and state be covered in "extended" model.

 2.  Specification of Requirements

--- 173,197 ----
    o  Extended

    The "base" category contains the basic and fundamental features that
!    are covered in the mLDP base specification [RFC6388] along with a few
    significant extension like targeted mLDP [RFC7060], constituting the
    minumum requirements for an mLDP deployment.  Whereas, the "extended"
    category contains all other non-base features (such as recursive FEC
!    support, protection, etc.).  All the items in the base category are
    mandatory and hence no "if-feature" is allowed under the "base"
    category.  While "base" model support will suffice for small
    deployments, large deployments will require not only the "base"
    module support but also "extended" support for some selected and
    required features.

!    The base and extended catogories are defined in their own modules,
    ietf-mpls-mldp and ietf-mpls-mldp-extended respectively, each of
!    which augments the LDP base model as defined within the ietf-mpls-ldp
    module [I-D.ietf-mpls-ldp-yang].

!    Like LDP, the mLDP "base" model configuration and state covers the ipv4
    address-family only, with ipv6 address-family related configuration
!    and state covered in the "extended" model.

 2.  Specification of Requirements

***************
*** 201,213 ****

 3.  Overview

!    This document defines a new module named "ietf-mpls-mldp" for mLDP
    YANG base data model that augments /rt:routing/rt:control-plane-
    protocols/ldp:mpls-ldp defined in [I-D.ietf-mpls-ldp-yang].  The
!    document also defines "ietf-mpls-mldp-extended" module that models
!    the extended mLDP features under YANG.

!    Following diagram depicts high level mLDP yang tree organization and
    hierarchy with respect to LDP:

--- 201,213 ----

 3.  Overview

!    This document defines a YANG module named "ietf-mpls-mldp" for the mLDP
    YANG base data model that augments /rt:routing/rt:control-plane-
    protocols/ldp:mpls-ldp defined in [I-D.ietf-mpls-ldp-yang].  The
!    document also defines the "ietf-mpls-mldp-extended" YANG module that
!    models the extended mLDP features.

!    The following diagram depicts high-level mLDP yang tree organization and
    hierarchy with respect to LDP:

***************
*** 255,262 ****

 3.1.  Scope

!    Following are the main mLDP areas and features that are within the
!    scope of this model:

    o  Base:

--- 255,262 ----

 3.1.  Scope

!    The main mLDP areas and features that are within the scope of this 
!    model are as follows:

    o  Base:

***************
*** 282,288 ****

          +  Node Protection [RFC7715]

!          +  Multicast-only

       *  In-band Signaling:

--- 282,288 ----

          +  Node Protection [RFC7715]

!          +  Multicast-only [RFC7431]

       *  In-band Signaling:

***************
*** 300,306 ****
 3.2.  FEC Types

    The FEC for Multipoint LSP is presented as (root-address, opaque-
!    type).  The following is the table for various type of MP opaque
    values with their keys, as covered in the configuration and state
    model:

--- 300,306 ----
 3.2.  FEC Types

    The FEC for Multipoint LSP is presented as (root-address, opaque-
!    type).  The following table lists various types of MP opaque
    values with their keys, as covered in the configuration and state
    model:

***************
*** 322,328 ****

                      Table 1: MP Opaque Types and keys

!    It is to be noted that there are three basic types (LSP Id, Source,
    and Bidir) and then there are variants (VPN, recursive, VPN-
    recursive) on top of these basic types.

--- 322,328 ----

                      Table 1: MP Opaque Types and keys

!    It should be noted that there are three basic types (LSP Id, Source,
    and Bidir) and then there are variants (VPN, recursive, VPN-
    recursive) on top of these basic types.

***************
*** 344,351 ****

 4.1.  Configuration Hierarchy

!    Following is the high-level configuration organization for base and
!    extended mLDP:

         augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
--- 344,351 ----

 4.1.  Configuration Hierarchy

!    The high-level configuration organization for the base and
!    extended mLDP follows:

         augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
***************
*** 399,406 ****

    o  Parameters that leverage/extend LDP containers and parameters

!    Following subsections first describe mLDP specific configuration
!    parameters, followed by those leveraging LDP.  It is to be noted that
    these parameters are defined under their respective base or extended
    module as per their categorization.

--- 399,406 ----

    o  Parameters that leverage/extend LDP containers and parameters

!    The following subsections first describe mLDP specific configuration
!    parameters, followed by those leveraging LDP.  It should be noted that
    these parameters are defined under their respective base or extended
    module as per their categorization.

***************
*** 410,421 ****
    the configuration related to items that are mLDP specific.  The main
    items under this container are:

!    o  mLDP enabling: To enable mLDP under a (VRF) routing instance, mldp
!       container is enabled under LDP.  Given that mLDP requires LDP
!       signalling, it is not sensible to allow disabling LDP control
       plane under a (VRF) network-instance while requiring mLDP to be
!       enabled for the same.  However, if a user wants only to allow
!       signalling for multipoint FECs on an LDP/mLDP enabled VRF
       instance, he/she can use LDP label-policies to disable unicast
       FECs under the VRF.

--- 410,421 ----
    the configuration related to items that are mLDP specific.  The main
    items under this container are:

!    o  mLDP enablement: To enable mLDP under a (VRF) routing instance, mldp
!       is enabled in the mldp container under LDP.  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.

***************
*** 429,438 ****
          of the feature.

       *  Recursive FEC: The recursive-fec feature [RFC6512] can be
!          enabled per AF with a route-policy.

!       *  Configured Leaf LSPs: To provision multipoint leaf LSP
!          manually, a container is provided per-AF under LDP.  The
          configuration is flexible and allows a user to specify MP LSPs
          of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by
          using either LSP-Id or (S,G).
--- 429,438 ----
          of the feature.

       *  Recursive FEC: The recursive-fec feature [RFC6512] can be
!          enabled per-AF with a route-policy.

!       *  Configured Leaf LSPs: To provision multipoint leaf LSPs
!          manually, a per-AF container is provided under LDP.  The
          configuration is flexible and allows a user to specify MP LSPs
          of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by
          using either LSP-Id or (S,G).
***************
*** 450,478 ****

 4.3.  Leveraging LDP containers

!    mLDP configuration model leverages following configuration areas and
    containers that are already defined for LDP:

    o  Capabilities: A new container "mldp" is defined that augments
       LDP's capabilities container.  This new container specifies any
       mLDP specific capabilities and their parameters.  Moreover, a new
!       "mldp" container is also added by augmenting LDP per-peer
       capability container to override/control mLDP specific
       capabilities on a peer level.  In the scope of this document, the
       most important capabilities related to mLDP are p2mp, mp2mp, make-
       before-break, hub-and-spoke, and node-protection.

!    o  Discovery and Peer: mLDP requires LDP discovery and peer
!       procedures to form mLDP peering.  A peer is treated as mLDP peer
       only when either P2MP or MP2MP capabilities have been successfully
       exchanged with the peer.  If a user wish to selectively enable or
       disable mLDP with a LDP-enabled peer, he/she may use per-peer mLDP
       capabilities configuration.  [Ed Note: The option to control mLDP
!       enabling/disabling on a peer-list is being explored for future ].
       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 targeted
!       type only.  In future revision, a configuration option for this
       support will also be provided.

    o  Forwarding: By default, mLDP is allowed to select any of the LDP
--- 450,478 ----

 4.3.  Leveraging LDP containers

!    The mLDP configuration model leverages following configuration areas and
    containers that are already defined for LDP:

    o  Capabilities: A new container "mldp" is defined that augments
       LDP's capabilities container.  This new container specifies any
       mLDP specific capabilities and their parameters.  Moreover, a new
!       "mldp" container is also added by augmenting the LDP per-peer
       capability container to override/control mLDP specific
       capabilities on a peer level.  In the scope of this document, the
       most important capabilities related to mLDP are p2mp, mp2mp, make-
       before-break, hub-and-spoke, and node-protection.

!    o  Discovery and Peering: mLDP requires LDP discovery and peer
!       procedures to form mLDP peering.  A peer is treated as an mLDP peer
       only when either P2MP or MP2MP capabilities have been successfully
       exchanged with the peer.  If a user wish to selectively enable or
       disable mLDP with a LDP-enabled peer, he/she may use per-peer mLDP
       capabilities configuration.  [Ed Note: The option to control mLDP
!       enabling/disabling on a peer-list is being explored for future].
       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.  In a future revision, a configuration option for this
       support will also be provided.

    o  Forwarding: By default, mLDP is allowed to select any of the LDP
***************
*** 480,494 ****
       (LDP/mLDP peer) for MP LSP programming.  However, a configuration
       option is provided to allow mLDP to exclude a given interface from
       such a selection.  Note that such a configuration option will be
!       useful only when there are more than one interfaces available for
       the downstream selection.

 4.4.  Configuration Tree

 4.4.1.  Base

!    Following is a simplified graphical representation of the data model
!    for mLDP base configuration

--- 480,494 ----
       (LDP/mLDP peer) for MP LSP programming.  However, a configuration
       option is provided to allow mLDP to exclude a given interface from
       such a selection.  Note that such a configuration option will be
!       useful only when there are more than one interface available for
       the downstream selection.

 4.4.  Configuration Tree

 4.4.1.  Base

!    A simplified graphical representation of the data model
!    for mLDP base configuration follows:

***************
*** 533,540 ****

 4.4.2.  Extended

!    Following is a simplified graphical representation of the data model
!    for mLDP extended configuration

--- 533,540 ----

 4.4.2.  Extended

!    A simplified graphical representation of the data model for mLDP extended 
!    configuration follows:

***************
*** 647,659 ****

 5.  Operational State

!    Operational state of mLDP can be queried and obtained from various
    read-only mdlp "state" containers that augment ldp containers.

 5.1.  Base

!    Following is a simplified graphical representation of the data model
!    for mLDP base operational state:

--- 647,659 ----

 5.  Operational State

!    The operational state for mLDP can be queried and obtained from various
    read-only mdlp "state" containers that augment ldp containers.

 5.1.  Base

!    A simplified graphical representation of the data model
!    for mLDP base operational state follows:

***************
*** 713,720 ****

 5.2.  Extended

!    Following is a simplified graphical representation of the data model
!    for mLDP extended operational state:

 module: ietf-mpls-mldp
--- 713,720 ----

 5.2.  Extended

!    A simplified graphical representation of the data model
!    for mLDP extended operational state follows:

 module: ietf-mpls-mldp
***************
*** 871,878 ****

 5.3.  Derived states

!    Following are main areas for which mLDP operational derived state is
!    defined:

    o  Root

--- 871,878 ----

 5.3.  Derived states

!    The main areas for which mLDP operational derived state is
!    defined are:

    o  Root

***************
*** 882,892 ****

 5.3.1.  Root state

!    Root address is a fundamental construct for MP FEC bindings and LSPs.
    The root state provides information on all the known roots in a given
!    address-familty, and their information on the root reachability (as
    learnt from RIB).  In case of multi-path reachability to a root, the
!    selection of upstream path is done on per-LSP basis at the time of
    LSP setup.  Similarly, when protection mechanisms like MBB or MoFRR

--- 882,892 ----

 5.3.1.  Root state

!    The root address is a fundamental construct for MP FEC bindings and LSPs.
    The root state provides information on all the known roots in a given
!    address-family, and their root reachability information (as
    learnt from RIB).  In case of multi-path reachability to a root, the
!    selection of the upstream path is done on per-LSP basis at the time of
    LSP setup.  Similarly, when protection mechanisms like MBB or MoFRR

***************
*** 897,906 ****

    are in place, the path designation as active/standby or primary/
!    backup is also done on per LSP basis.  It is to be noted that a given
    root can be shared amongst multiple P2MP and/or MP2MP LSPs.
!    Moreover, an LSP can be signaled to more than one root for RNR
!    purposes.

    The following diagram illustrates a root database on a branch/transit
    LSR:
--- 897,906 ----

    are in place, the path designation as active/standby or primary/
!    backup is also done on per-LSP basis.  It is to be noted that a given
    root can be shared amongst multiple P2MP and/or MP2MP LSPs.
!    Moreover, an LSP can be signaled to more than one root for Root Node
!    Redundancy (RNR) purposes.

    The following diagram illustrates a root database on a branch/transit
    LSR:
***************
*** 936,942 ****
 5.3.2.  Bindings state

    Binding state provides information on mLDP FEC-label bindings for
!    both P2MP and MP2MP FEC types.  Like LDP, the FEC-label binding
    derived state is presented in a FEC-centric view per address-family,
    and provides information on both inbound (received) and outbound
    (advertised) bindings.  The FEC is presented as (root-address,
--- 936,942 ----
 5.3.2.  Bindings state

    Binding state provides information on mLDP FEC-label bindings for
!    both the P2MP and MP2MP FEC types.  Like LDP, the FEC-label binding
    derived state is presented in a FEC-centric view per address-family,
    and provides information on both inbound (received) and outbound
    (advertised) bindings.  The FEC is presented as (root-address,
***************
*** 955,962 ****
    binding is also provided with respect to MBB (active or standby) or/
    and MoFRR (primary or backup).

!    Following captures a high level tree hierarchy for mLDP bindings
!    state:

 +--rw mpls-ldp!
--- 955,961 ----
    binding is also provided with respect to MBB (active or standby) or/
    and MoFRR (primary or backup).

!    A high-level tree hierarchy for mLDP bindings state follows:

 +--rw mpls-ldp!
***************
*** 990,1003 ****
                                  Figure 9

    mLDP binding state is organized and presented per root address, and
!    hence the bindings container hang off a root node in the model.  The
    bindings state is made available for FECs pertaining to different
!    types of opaque types, with some state avaiable under "base" tree and
!    the rest under "extended".

!    In the above tree, the various opaque types alongwith their type
!    specific key(s) refer to the table Table 1 captured earlier in the
!    document.  For example, if the opaque type is Generic LSP Identifier,

--- 989,1002 ----
                                  Figure 9

    mLDP binding state is organized and presented per root address, and
!    hence the bindings container in under a root node in the model.  The
    bindings state is made available for FECs pertaining to different
!    types of opaque types, with some state avaiable under the "base" tree and
!    the rest under the "extended" tree.

!    In the above tree, the various opaque types along with their type
!    specific key(s) refer to the table Table 1, as captured earlier in the
!    document.  For example, if the opaque type is a Generic LSP Identifier,

***************
*** 1010,1028 ****
    then the type-specific-key will be a uint32 LSP-Id key.  Please see
    the complete model for all other types.

!    It is important to take note of the following:

!    o  The address-family ipv4/ipv4 applies to "root" address in the mLDP
!       binding tree.  The other addresses (source, group, RP etc) do not
       have to be of the same address family type as the root.

!    o  The "recur-root-address" field applies to Recursive opaque type,
!       and (recur-root-address, recur-rd) fields applies to VPN-Recursive
!       opaque types as defined in [RFC6512]

    o  In case of a recursive FEC, the address-family of the recur-root-
       address could be different than the address-family of the root
!       address of original encapsulated MP FEC

    The following diagram illustrates the FEC-label binding information
    structure for a P2MP (Transit IPv4 Source type) LSP on a branch/
--- 1009,1027 ----
    then the type-specific-key will be a uint32 LSP-Id key.  Please see
    the complete model for all other types.

!    It is important to note the following:

!    o  The address-family ipv4/ipv4 applies to "root" addresses in the mLDP
!       binding tree.  The other addresses (source, group, RP, etc.) do not
       have to be of the same address family type as the root.

!    o  The "recur-root-address" field applies to the Recursive opaque type,
!       and the (recur-root-address, recur-rd) fields apply to the VPN-Recursive
!       opaque types as defined in [RFC6512].

    o  In case of a recursive FEC, the address-family of the recur-root-
       address could be different than the address-family of the root
!       address of the original encapsulated MP FEC.

    The following diagram illustrates the FEC-label binding information
    structure for a P2MP (Transit IPv4 Source type) LSP on a branch/
***************
*** 1091,1103 ****

 6.  Notifications

!    mLDP notification module consists of notification related to changes
    in the operational state of an mLDP FEC.

 6.1.  Base

!    Following is a simplified graphical representation of the base data
!    model for mLDP notifications:

--- 1090,1102 ----

 6.  Notifications

!    The mLDP notification module consists of notifications related to changes
    in the operational state of an mLDP FEC.

 6.1.  Base

!    A simplified graphical representation of the base data
!    model for mLDP notifications follows:

***************
*** 1139,1146 ****

 6.2.  Extended

!    Following is a simplified graphical representation of the extended
!    data model for mLDP notifications:

--- 1138,1145 ----

 6.2.  Extended

!    A simplified graphical representation of the extended
!    data model for mLDP notifications follows:

***************
*** 1208,1215 ****

 8.  Open Items

!    Following is a list of open items that are to be discussed and
!    addressed in future revisions of this document:

    o  Specify default values for configuration parameters

--- 1207,1214 ----

 8.  Open Items

!    A list of open items that are to be discussed and
!    addressed in future revisions of this document follows:

    o  Specify default values for configuration parameters

***************
*** 1233,1240 ****

 9.  YANG Specification

!    Following is the actual YANG definition (module) for mLDP constructs
!    defined earlier in the document.

 9.1.  Base

--- 1232,1239 ----

 9.  YANG Specification

!    The YANG definition, i.e., the modules, for mLDP constructs defined earlier 
!    in this document are includind the subsections below. 

 9.1.  Base

Thanks,
Acee