idnits 2.17.00 (12 Aug 2021) /tmp/idnits56426/draft-ietf-mpls-mldp-yang-03.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 156 instances of too long lines in the document, the longest one being 88 characters in excess of 72. -- The document has examples using IPv4 documentation addresses according to RFC6890, but does not use any IPv6 documentation addresses. Maybe there should be IPv6 examples, too? Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 468 has weird spacing: '...address ine...' == Line 477 has weird spacing: '...address ine...' == Line 492 has weird spacing: '...address ine...' == Line 501 has weird spacing: '...address ine...' == Line 510 has weird spacing: '...address ine...' == (22 more instances...) == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (November 11, 2017) is 1652 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: draft-ietf-mpls-ldp-yang has been published as RFC 9070 == Outdated reference: draft-ietf-netmod-revised-datastores has been published as RFC 8342 == Outdated reference: draft-ietf-netmod-rfc6087bis has been published as RFC 8407 Summary: 1 error (**), 0 flaws (~~), 11 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 MPLS Working Group K. Raza 2 Internet-Draft S. Krishnaswamy 3 Intended status: Standards Track Cisco Systems, Inc. 4 Expires: May 15, 2018 5 X. Liu 6 Jabil 8 S. Esale 9 Juniper Networks 11 L. Andersson 12 Huawei Technologies 14 Jeff Tantsura 15 Individual 17 November 11, 2017 19 YANG Data Model for MPLS mLDP 20 draft-ietf-mpls-mldp-yang-03 22 Abstract 24 This document describes a YANG data model for Multi-Protocol Label 25 Switching (MPLS) Multipoint Label Distribution Protocol (mLDP). The 26 mLDP data model augments the LDP data model. 28 Status of This Memo 30 This Internet-Draft is submitted in full conformance with the 31 provisions of BCP 78 and BCP 79. 33 Internet-Drafts are working documents of the Internet Engineering 34 Task Force (IETF). Note that other groups may also distribute 35 working documents as Internet-Drafts. The list of current Internet- 36 Drafts is at https://datatracker.ietf.org/drafts/current/. 38 Internet-Drafts are draft documents valid for a maximum of six months 39 and may be updated, replaced, or obsoleted by other documents at any 40 time. It is inappropriate to use Internet-Drafts as reference 41 material or to cite them other than as "work in progress." 43 This Internet-Draft will expire on May 15, 2018. 45 Copyright Notice 47 Copyright (c) 2017 IETF Trust and the persons identified as the 48 document authors. All rights reserved. 50 This document is subject to BCP 78 and the IETF Trust's Legal 51 Provisions Relating to IETF Documents 52 (https://trustee.ietf.org/license-info) in effect on the date of 53 publication of this document. Please review these documents 54 carefully, as they describe your rights and restrictions with respect 55 to this document. Code Components extracted from this document must 56 include Simplified BSD License text as described in Section 4.e of 57 the Trust Legal Provisions and are provided without warranty as 58 described in the Simplified BSD License. 60 Table of Contents 62 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 63 1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 3 64 2. Specification of Requirements . . . . . . . . . . . . . . . . 4 65 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 66 3.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 5 67 3.2. FEC Types . . . . . . . . . . . . . . . . . . . . . . . . 6 68 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 7 69 4.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 7 70 4.2. mldp global container . . . . . . . . . . . . . . . . . . 8 71 4.3. Leveraging LDP containers . . . . . . . . . . . . . . . . 9 72 4.4. Configuration Tree . . . . . . . . . . . . . . . . . . . 9 73 4.4.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 9 74 4.4.2. Extended . . . . . . . . . . . . . . . . . . . . . . 10 75 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 12 76 5.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 12 77 5.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 13 78 5.3. Derived states . . . . . . . . . . . . . . . . . . . . . 16 79 5.3.1. Root state . . . . . . . . . . . . . . . . . . . . . 16 80 5.3.2. Bindings state . . . . . . . . . . . . . . . . . . . 17 81 5.3.3. Capabilities state . . . . . . . . . . . . . . . . . 20 82 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 20 83 6.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 20 84 6.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 21 85 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 86 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 22 87 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 23 88 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 23 89 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 32 90 10. Security Considerations . . . . . . . . . . . . . . . . . . . 55 91 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 92 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55 93 13. Normative References . . . . . . . . . . . . . . . . . . . . 55 94 Appendix A. Additional Contributors . . . . . . . . . . . . . . 56 95 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 97 1. Introduction 99 This document introduces a YANG data model for MPLS Multipoint Label 100 Distribution Protocol (mLDP). The mLDP model being defined here is 101 dependent on LDP YANG data model [I-D.ietf-mpls-ldp-yang]. This 102 implies that an opertor will need to use base LDP module to configure 103 and manage control plane for mLDP. For example, an operator would 104 enable LDP discovery on MPLS interface to establish LDP/mLDP peering 105 on which mLDP bindings could be exchanged. Similarly, an operator 106 could query state information for an LDP peer in order to verify 107 peering attributes etc. 109 Moreover, it is important to note here that any assumptions made in 110 the LDP model also hold true in this document, unless otherwise 111 explicitly stated. 113 Like its parent LDP data model, this mLDP model also defines the 114 following constructs for managing the mLDP protocol: 116 o Configuration 118 o Operational State 120 o Executables (Actions) 122 o Notifications 124 The modeling in this document complies with the Network Management 125 Datastore Architecture (NMDA) [I-D.ietf-netmod-revised-datastores]. 126 The operational state data is combined with the associated 127 configuration data in the same hierarchy 128 [I-D.ietf-netmod-rfc6087bis]. When protocol states are retrieved 129 from the NMDA operational state datastore, the returned states cover 130 all "config true" (rw) and "config false" (ro) nodes defined in the 131 schema. 133 This document is organized to define the data model for each of the 134 above constructs in the sequence as listed above. 136 1.1. Base and Extended 138 Like LDP model, the configuration and state items are divided into 139 following two broad categories: 141 o Base 143 o Extended 145 The "base" category contains the basic and fundamental features that 146 are covered in mLDP base specification [RFC6388] alongwith few 147 significant extension like targeted mLDP [RFC7060], constituting the 148 minumum requirements for an mLDP deployment. Whereas, the "extended" 149 category contains all other non-base features (such as recursive FEC 150 support, protection etc.). All the items in a base category are 151 mandatory and hence no "if-feature" is allowed under the "base" 152 category. While "base" model support will suffice for small 153 deployments, large deployments will require not only the "base" 154 module support but also "extended" support for some selected and 155 required features. 157 The base and extended catogories are defined in their own modules 158 ietf-mpls-mldp and ietf-mpls-mldp-extended respectively, each of 159 which augments the LDP base model as defined under ietf-mpls-ldp 160 module [I-D.ietf-mpls-ldp-yang]. 162 Like LDP, mLDP "base" model configuration and state covers ipv4 163 address-family only, with ipv6 address-family related configuration 164 and state be covered in "extended" model. 166 2. Specification of Requirements 168 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 169 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 170 document are to be interpreted as described in [RFC2119]. 172 3. Overview 174 This document defines a new module named "ietf-mpls-mldp" for mLDP 175 YANG base data model that augments /rt:routing/rt:control-plane- 176 protocols/ldp:mpls-ldp defined in [I-D.ietf-mpls-ldp-yang]. The 177 document also defines "ietf-mpls-mldp-extended" module that models 178 the extended mLDP features under YANG. 180 Following diagram depicts high level mLDP yang tree organization and 181 hierarchy with respect to LDP: 183 +-- rw routing 184 +-- rw control-plane-protocols 185 +-- rw mpls-ldp 186 +-- rw some_ldp_container 187 | +-- rw mldp 188 | +-- rw ... // mldp base 189 | | +-- rw ... 190 | | +-- ro ... 191 | | +-- 192 | +-- rw mldp-ext:... // mldp extended 193 | | +-- rw ... 194 | | +-- ro ... 195 | | +-- 196 +-- ro some_ldp_container 197 +-- ro mldp 198 +-- ro ... // mldp base 199 | +-- ro ... 200 | +-- 201 +-- ro mldp-ext:... // mldp extended 202 +-- ro ... 203 +-- 205 notifications: 206 +--- n mpls-mldp-some_event 207 +--- n ... 209 Figure 1 211 3.1. Scope 213 Following are the main mLDP areas and features that are within the 214 scope of this model: 216 o Base: 218 * mLDP Base Specification [RFC6388] 220 * Targeted mLDP [RFC7060] 222 * Configured Leaf LSPs (manually provisioned) 224 o Extended: 226 * mLDP Recursive FEC [RFC6512] 228 * mLDP Fast-Reroute (FRR): 230 + Node Protection [RFC7715] 232 + Multicast-only 234 * In-band Signaling: 236 + mLDP In-band Signaling [RFC6826] 238 + mLDP In-band signaling in a VRF [RFC7246] 240 + mLDP In-band Signaling with Wildcards [RFC7438] 242 * Hub-and-Spoke Multipoint LSPs [RFC7140] 244 [Ed Note: Some of the topics in the above list are to be addressed/ 245 extended in a later revision of this document]. 247 3.2. FEC Types 249 The FEC for Multipoint LSP is presented as (root-address, opaque- 250 type). The following is the table for various type of MP opaque 251 values with their keys, as covered in the configuration and state 252 model: 254 +-------------------------+--------------------+------------+ 255 | Opaque Type | Key | RFC | 256 +-------------------------+--------------------+------------+ 257 | Generic LSP Identifier | LSP Id | [RFC6388] | 258 | Transit IPv4 Source | Source, Group | [RFC6826] | 259 | Transit IPv6 Source | Source, Group | [RFC6826] | 260 | Transit IPv4 Bidir | RP, Group | [RFC6826] | 261 | Transit IPv6 Bidir | RP, Group | [RFC6826] | 262 | Transit VPNv4 Source | Source, Group, RD | [RFC7246] | 263 | Transit VPNv6 Source | Source, Group, RD | [RFC7246] | 264 | Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] | 265 | Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] | 266 | Recursive Opaque | Root | [RFC6512] | 267 | VPN-Recursive Opaque | Root, RD | [RFC6512] | 268 +-------------------------+--------------------+------------+ 270 Table 1: MP Opaque Types and keys 272 It is to be noted that there are three basic types (LSP Id, Source, 273 and Bidir) and then there are variants (VPN, recursive, VPN- 274 recursive) on top of these basic types. 276 The "base" model includes only the "Generic LSP Identifier" opaque 277 type (for ipv4), while rest of the above types are covered by the 278 "extended" model. 280 4. Configuration 282 4.1. Configuration Hierarchy 284 Following is the high-level configuration organization for base and 285 extended mLDP: 287 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 288 +-- mpls-ldp 289 +-- global 290 +-- ... 291 +-- ... 292 +-- mldp 293 | +-- ... 294 | +-- ... 295 | +-- address-families 296 | +-- ipv4 297 | | +-- ... 298 | | +-- mldp-ext: ... 299 | | +-- ... 300 | | +-- configured-leaf-lsps 301 | | +-- ... 302 | | +-- ... 303 | | +-- mldp-ext: ... 304 | | +-- ... 305 | +-- mldp-ext: ipv6 306 | +-- ... 307 | +-- ... 308 | +-- configured-leaf-lsps 309 | +-- ... 310 | +-- ... 311 +-- capability 312 | +-- mldp 313 | +-- ... 314 | +-- mldp-ext: ... 315 | +-- ... 316 +-- forwarding-nexthop 317 +--- interfaces 318 +--- interface* [name] 319 +--- mldp-ext: ... 321 Figure 2 323 From above hierarchy, we can categorize mLDP configuration parameters 324 into two types: 326 o Parameters that are mLDP specific 328 o Parameters that leverage/extend LDP containers and parameters 330 Following subsections first describe mLDP specific configuration 331 parameters, followed by those leveraging LDP. It is to be noted that 332 these parameters are defined under their respective base or extended 333 module as per their categorization. 335 4.2. mldp global container 337 mldp container is an augmentation of LDP global container and holds 338 the configuration related to items that are mLDP specific. The main 339 items under this container are: 341 o mLDP enabling: To enable mLDP under a (VRF) routing instance, mldp 342 container is enabled under LDP. Given that mLDP requires LDP 343 signalling, it is not sensible to allow disabling LDP control 344 plane under a (VRF) network-instance while requiring mLDP to be 345 enabled for the same. However, if a user wants only to allow 346 signalling for multipoint FECs on an LDP/mLDP enabled VRF 347 instance, he/she can use LDP label-policies to disable unicast 348 FECs under the VRF. 350 o mLDP per-AF features: mLDP manages its own list of IP address- 351 families and the features enabled underneath. The per-AF mLDP 352 configuration items include: 354 * Multicast-only FRR: This enables Multicast-only FRR 355 functionality for a given AF under mLDP. The feature allows 356 route-policy to be configured for finer control/applicability 357 of the feature. 359 * Recursive FEC: The recursive-fec feature [RFC6512] can be 360 enabled per AF with a route-policy. 362 * Configured Leaf LSPs: To provision multipoint leaf LSP 363 manually, a container is provided per-AF under LDP. The 364 configuration is flexible and allows a user to specify MP LSPs 365 of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by 366 using either LSP-Id or (S,G). 368 Targeted mLDP feature specification [RFC7060] does not require any 369 mLDP specific configuration. It, however, requires LDP upstream- 370 label-assignment capability [RFC6389] to be enabled. 372 4.3. Leveraging LDP containers 374 mLDP configuration model leverages following configuration areas and 375 containers that are already defined for LDP: 377 o Capabilities: A new container "mldp" is defined that augments 378 LDP's capabilities container. This new container specifies any 379 mLDP specific capabilities and their parameters. Moreover, a new 380 "mldp" container is also added by augmenting LDP per-peer 381 capability container to override/control mLDP specific 382 capabilities on a peer level. In the scope of this document, the 383 most important capabilities related to mLDP are p2mp, mp2mp, make- 384 before-break, hub-and-spoke, and node-protection. 386 o Discovery and Peer: mLDP requires LDP discovery and peer 387 procedures to form mLDP peering. A peer is treated as mLDP peer 388 only when either P2MP or MP2MP capabilities have been successfully 389 exchanged with the peer. If a user wish to selectively enable or 390 disable mLDP with a LDP-enabled peer, he/she may use per-peer mLDP 391 capabilities configuration. [Ed Note: The option to control mLDP 392 enabling/disabling on a peer-list is being explored for future ]. 393 In most common deployments, it is desirable to disable mLDP 394 (capabilities announcements) on a targeted-only LDP peering, where 395 targeted-only peer is the one whose discovery sources are targeted 396 type only. In future revision, a configuration option for this 397 support will also be provided. 399 o Forwarding: By default, mLDP is allowed to select any of the LDP 400 enabled interface as a downstream interface towards a nexthop 401 (LDP/mLDP peer) for MP LSP programming. However, a configuration 402 option is provided to allow mLDP to exclude a given interface from 403 such a selection. Note that such a configuration option will be 404 useful only when there are more than one interfaces available for 405 the downstream selection. 407 4.4. Configuration Tree 409 4.4.1. Base 411 Following is a simplified graphical representation of the data model 412 for mLDP base configuration 414 module: ietf-mpls-mldp 415 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:capability: 416 +--rw mldp 417 +--rw p2mp 418 | +--rw enable? boolean 419 +--rw mp2mp 420 | +--rw enable? boolean 421 +--rw make-before-break 422 +--rw enable? boolean 423 +--rw switchover-delay? uint16 424 +--rw timeout? uint16 426 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 427 +--rw mldp 428 +--rw enable? boolean 429 +--rw address-families 430 +--rw ipv4 431 +--rw configured-leaf-lsps 432 +--rw opaque-type-lspid 433 +--rw fec-label* [root-address lsp-id] 434 +--rw root-address inet:ipv4-address 435 +--rw lsp-id uint32 436 +--rw multipoint-type? multipoint-type 438 Figure 3 440 4.4.2. Extended 442 Following is a simplified graphical representation of the data model 443 for mLDP extended configuration 445 module: ietf-mpls-mldp 446 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:capability: 447 +--rw mldp 448 +--rw mldp-ext:hub-and-spoke {capability-mldp-hsmp}? 449 | +--rw mldp-ext:enable? boolean 450 +--rw mldp-ext:node-protection {capability-mldp-node-protection}? 451 +--rw mldp-ext:plr? boolean 452 +--rw mldp-ext:merge-point 453 +--rw mldp-ext:enable? boolean 454 +--rw mldp-ext:targeted-session-teardown-delay? uint16 456 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 457 +--rw mldp 458 +--rw enable? boolean 459 +--rw address-families 460 +--rw ipv4 461 | +--rw configured-leaf-lsps 462 | | +--rw mldp-ext:opaque-type-transit 463 | | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 464 | | | +--rw mldp-ext:root-address inet:ipv4-address 465 | | | +--rw mldp-ext:source-address inet:ip-address 466 | | | +--rw mldp-ext:group-address inet:ip-address-no-zone 467 | | | +--rw mldp-ext:rd route-distinguisher 468 | | | +--rw mldp-ext:recur-root-address inet:ip-address 469 | | | +--rw mldp-ext:recur-rd route-distinguisher 470 | | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 471 | | +--rw mldp-ext:opaque-type-bidir 472 | | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] 473 | | +--rw mldp-ext:root-address inet:ipv4-address 474 | | +--rw mldp-ext:rp inet:ip-address 475 | | +--rw mldp-ext:group-address inet:ip-address-no-zone 476 | | +--rw mldp-ext:rd route-distinguisher 477 | | +--rw mldp-ext:recur-root-address inet:ip-address 478 | | +--rw mldp-ext:recur-rd route-distinguisher 479 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 480 | +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 481 | | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 482 | +--rw mldp-ext:recursive-fec 483 | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 484 +--rw mldp-ext:ipv6 485 +--rw mldp-ext:configured-leaf-lsps 486 | +--rw mldp-ext:opaque-type-lspid 487 | | +--rw mldp-ext:fec-label* [root-address lsp-id] 488 | | +--rw mldp-ext:root-address inet:ipv6-address 489 | | +--rw mldp-ext:lsp-id uint32 490 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 491 | | +--rw mldp-ext:recursive-fec* [recur-root-address recur-rd] 492 | | +--rw mldp-ext:recur-root-address inet:ip-address 493 | | +--rw mldp-ext:recur-rd route-distinguisher 494 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 495 | +--rw mldp-ext:opaque-type-transit 496 | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 497 | | +--rw mldp-ext:root-address inet:ipv6-address 498 | | +--rw mldp-ext:source-address inet:ip-address 499 | | +--rw mldp-ext:group-address inet:ip-address-no-zone 500 | | +--rw mldp-ext:rd route-distinguisher 501 | | +--rw mldp-ext:recur-root-address inet:ip-address 502 | | +--rw mldp-ext:recur-rd route-distinguisher 503 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 504 | +--rw mldp-ext:opaque-type-bidir 505 | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] 506 | +--rw mldp-ext:root-address inet:ipv6-address 507 | +--rw mldp-ext:rp inet:ip-address 508 | +--rw mldp-ext:group-address inet:ip-address-no-zone 509 | +--rw mldp-ext:rd route-distinguisher 510 | +--rw mldp-ext:recur-root-address inet:ip-address 511 | +--rw mldp-ext:recur-rd route-distinguisher 512 | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 513 +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 514 | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 515 +--rw mldp-ext:recursive-fec 516 +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 518 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability: 519 +--rw mldp {per-peer-capability}? 520 +--rw p2mp 521 | +--rw enable? boolean 522 +--rw mp2mp 523 | +--rw enable? boolean 524 +--rw make-before-break 525 +--rw enable? boolean 526 +--rw switchover-delay? uint16 527 +--rw timeout? uint16 529 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family: 530 +--rw mldp-disable? boolean 532 Figure 4 534 5. Operational State 536 Operational state of mLDP can be queried and obtained from various 537 read-only mdlp "state" containers that augment ldp containers. 539 5.1. Base 541 Following is a simplified graphical representation of the data model 542 for mLDP base operational state: 544 module: ietf-mpls-mldp 545 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: 546 +--ro mldp 547 +--ro p2mp 548 | +--ro enable? boolean 549 +--ro mp2mp 550 | +--ro enable? boolean 551 +--ro make-before-break 552 +--ro enable? boolean 554 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 555 +--rw mldp 556 +--rw enable? boolean 557 +--rw address-families 558 +--rw ipv4 559 +--ro roots 560 +--ro root* [root-address] 561 +--ro root-address inet:ipv4-address 562 +--ro is-self? boolean 563 +--ro reachability* [address interface] 564 | +--ro address inet:ipv4-address 565 | +--ro interface if:interface-ref 566 | +--ro peer? -> ../../../../../../../../ldp:peers/peer/lsr-id 567 +--ro bindings 568 +--ro opaque-type-lspid 569 +--ro fec-label* [lsp-id] 570 +--ro lsp-id uint32 571 +--ro multipoint-type? multipoint-type 572 +--ro peer* [direction peer advertisement-type] 573 +--ro direction ldp:downstream-upstream 574 +--ro peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 575 +--ro advertisement-type ldp:advertised-received 576 +--ro label? rt-types:mpls-label 577 +--ro mbb-role? enumeration 578 +--ro mldp-ext:mofrr-role? mofrr-role 580 Figure 5 582 5.2. Extended 584 Following is a simplified graphical representation of the data model 585 for mLDP extended operational state: 587 module: ietf-mpls-mldp 589 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: 591 +--ro mldp 592 +--ro mldp-ext:hub-and-spoke 593 | +--ro mldp-ext:enable? boolean 594 +--ro mldp-ext:node-protection 595 +--ro mldp-ext:plr? boolean 596 +--ro mldp-ext:merge-point? boolean 598 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 599 +--rw mldp 600 +--rw enable? boolean 601 +--rw address-families 602 +--rw ipv4 603 | +--ro roots 604 | +--ro root* [root-address] 605 | +--ro root-address inet:ipv4-address 606 | +--ro bindings 607 | +--ro opaque-type-lspid 608 | | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] 609 | | +--ro mldp-ext:recur-root-address inet:ip-address 610 | | +--ro mldp-ext:recur-rd route-distinguisher 611 | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 612 | | +--ro mldp-ext:peer* [direction peer advertisement-type] 613 | | +--ro mldp-ext:direction ldp:downstream-upstream 614 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 615 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 616 | | +--ro mldp-ext:label? rt-types:mpls-label 617 | | +--ro mldp-ext:mbb-role? enumeration 618 | | +--ro mldp-ext:mofrr-role? mofrr-role 619 | +--ro mldp-ext:opaque-type-transit 620 | | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] 621 | | +--ro mldp-ext:source-address inet:ip-address 622 | | +--ro mldp-ext:group-address inet:ip-address-no-zone 623 | | +--ro mldp-ext:rd route-distinguisher 624 | | +--ro mldp-ext:recur-root-address inet:ip-address 625 | | +--ro mldp-ext:recur-rd route-distinguisher 626 | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 627 | | +--ro mldp-ext:peer* [direction peer advertisement-type] 628 | | +--ro mldp-ext:direction ldp:downstream-upstream 629 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 630 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 631 | | +--ro mldp-ext:label? rt-types:mpls-label 632 | | +--ro mldp-ext:mbb-role? enumeration 633 | | +--ro mldp-ext:mofrr-role? mofrr-role 634 | +--ro mldp-ext:opaque-type-bidir 635 | +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] 636 | +--ro mldp-ext:rp inet:ip-address 637 | +--ro mldp-ext:group-address inet:ip-address-no-zone 638 | +--ro mldp-ext:rd route-distinguisher 639 | +--ro mldp-ext:recur-root-address inet:ip-address 640 | +--ro mldp-ext:recur-rd route-distinguisher 641 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 642 | +--ro mldp-ext:peer* [direction peer advertisement-type] 643 | +--ro mldp-ext:direction ldp:downstream-upstream 644 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 645 | +--ro mldp-ext:advertisement-type ldp:advertised-received 646 | +--ro mldp-ext:label? rt-types:mpls-label 647 | +--ro mldp-ext:mbb-role? enumeration 648 | +--ro mldp-ext:mofrr-role? mofrr-role 649 +--rw mldp-ext:ipv6 650 +--ro mldp-ext:roots 651 +--ro mldp-ext:root* [root-address] 652 +--ro mldp-ext:root-address inet:ipv6-address 653 +--ro mldp-ext:is-self? boolean 654 +--ro mldp-ext:reachability* [address interface] 655 | +--ro mldp-ext:address inet:ipv6-address 656 | +--ro mldp-ext:interface if:interface-ref 657 | +--ro mldp-ext:peer? -> ../../../../../../../../ldp:peers/peer/lsr-id 658 +--ro mldp-ext:bindings 659 +--ro mldp-ext:opaque-type-lspid 660 | +--ro mldp-ext:fec-label* [lsp-id] 661 | +--ro mldp-ext:lsp-id uint32 662 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 663 | +--ro mldp-ext:peer* [direction peer advertisement-type] 664 | | +--ro mldp-ext:direction ldp:downstream-upstream 665 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 666 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 667 | | +--ro mldp-ext:label? rt-types:mpls-label 668 | | +--ro mldp-ext:mbb-role? enumeration 669 | | +--ro mldp-ext:mofrr-role? mofrr-role 670 | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] 671 | +--ro mldp-ext:recur-root-address inet:ip-address 672 | +--ro mldp-ext:recur-rd route-distinguisher 673 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 674 | +--ro mldp-ext:peer* [direction peer advertisement-type] 675 | +--ro mldp-ext:direction ldp:downstream-upstream 676 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 677 | +--ro mldp-ext:advertisement-type ldp:advertised-received 678 | +--ro mldp-ext:label? rt-types:mpls-label 679 | +--ro mldp-ext:mbb-role? enumeration 680 | +--ro mldp-ext:mofrr-role? mofrr-role 681 +--ro mldp-ext:opaque-type-transit 682 | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] 683 | +--ro mldp-ext:source-address inet:ip-address 684 | +--ro mldp-ext:group-address inet:ip-address-no-zone 685 | +--ro mldp-ext:rd route-distinguisher 686 | +--ro mldp-ext:recur-root-address inet:ip-address 687 | +--ro mldp-ext:recur-rd route-distinguisher 688 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 689 | +--ro mldp-ext:peer* [direction peer advertisement-type] 690 | +--ro mldp-ext:direction ldp:downstream-upstream 691 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 692 | +--ro mldp-ext:advertisement-type ldp:advertised-received 693 | +--ro mldp-ext:label? rt-types:mpls-label 694 | +--ro mldp-ext:mbb-role? enumeration 695 | +--ro mldp-ext:mofrr-role? mofrr-role 696 +--ro mldp-ext:opaque-type-bidir 697 +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] 698 +--ro mldp-ext:rp inet:ip-address 699 +--ro mldp-ext:group-address inet:ip-address-no-zone 700 +--ro mldp-ext:rd route-distinguisher 701 +--ro mldp-ext:recur-root-address inet:ip-address 702 +--ro mldp-ext:recur-rd route-distinguisher 703 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 704 +--ro mldp-ext:peer* [direction peer advertisement-type] 705 +--ro mldp-ext:direction ldp:downstream-upstream 706 +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 707 +--ro mldp-ext:advertisement-type ldp:advertised-received 708 +--ro mldp-ext:label? rt-types:mpls-label 709 +--ro mldp-ext:mbb-role? enumeration 710 +--ro mldp-ext:mofrr-role? mofrr-role 712 Figure 6 714 5.3. Derived states 716 Following are main areas for which mLDP operational derived state is 717 defined: 719 o Root 721 o Bindings (FEC-label) 723 o Capabilities 725 5.3.1. Root state 727 Root address is a fundamental construct for MP FEC bindings and LSPs. 728 The root state provides information on all the known roots in a given 729 address-familty, and their information on the root reachability (as 730 learnt from RIB). In case of multi-path reachability to a root, the 731 selection of upstream path is done on per-LSP basis at the time of 732 LSP setup. Similarly, when protection mechanisms like MBB or MoFRR 733 are in place, the path designation as active/standby or primary/ 734 backup is also done on per LSP basis. It is to be noted that a given 735 root can be shared amongst multiple P2MP and/or MP2MP LSPs. 736 Moreover, an LSP can be signaled to more than one root for RNR 737 purposes. 739 The following diagram illustrates a root database on a branch/transit 740 LSR: 742 root 203.0.113.1: 743 path1: 744 RIB: GigEthernet 1/0, 198.51.100.1; 745 LDP: peer 192.0.2.1:0 746 path2: 747 RIB: GigEthernet 2/0, 198.51.100.16; 748 LDP: peer 192.0.2.2:0 750 root 203.0.113.2: 751 path1: 752 RIB: 198.51.100.100; (NOTE: This is a recursive path) 753 LDP: peer 192.0.2.100:0 (NOTE: T-mLDP peer) 755 root . . . . 757 Figure 7 759 A root entry on a root LSR itself will be presented as follows: 761 root 203.0.113.10: 762 is-self 764 Figure 8 766 5.3.2. Bindings state 768 Binding state provides information on mLDP FEC-label bindings for 769 both P2MP and MP2MP FEC types. Like LDP, the FEC-label binding 770 derived state is presented in a FEC-centric view per address-family, 771 and provides information on both inbound (received) and outbound 772 (advertised) bindings. The FEC is presented as (root-address, 773 opaque-type-data) as described earlier in section Section 3.2, and 774 the direction (upstream or downstream) is picked with respect to root 775 reachability. In case of MBB or/and MoFRR, the role of a given peer 776 binding is also provided with respect to MBB (active or standby) or/ 777 and MoFRR (primary or backup). 779 Following captures a high level tree hierarchy for mLDP bindings 780 state: 782 +--rw mpls-ldp! 783 +--rw global 784 +--rw mldp 785 +--rw address-families 786 +--rw ipv4 (or ipv6) 787 +--ro roots 788 +--ro root* [root-address] 789 +--ro .... 790 +--ro bindings 791 +--ro opaque-type-xxx 792 | +--ro fec-label* [type-specific-key] 793 | +--ro some_key_1 ... 794 | +--ro some_key_2 ... 795 | +--ro multipoint-type? multipoint-type 796 | +--ro peer* [direction peer advertisement-type] 797 | | +--ro direction ldp:downstream-upstream 798 | | +--ro peer leafref 799 | | +--ro advertisement-type ldp:advertised-received 800 | | +--ro label? mpls:mpls-label 801 | | +--ro mbb-role? enumeration 802 | | +--ro mldp-ext:mofrr-role? mofrr-role 803 +--ro opaque-type-yyy 804 | +--ro fec-label* [type-specific-key] 805 | +--ro some_key_1 ... 806 ... 808 Figure 9 810 mLDP binding state is organized and presented per root address, and 811 hence the bindings container hang off a root node in the model. The 812 bindings state is made available for FECs pertaining to different 813 types of opaque types, with some state avaiable under "base" tree and 814 the rest under "extended". 816 In the above tree, the various opaque types alongwith their type 817 specific key(s) refer to the table Table 1 captured earlier in the 818 document. For example, if the opaque type is Generic LSP Identifier, 819 then the type-specific-key will be a uint32 LSP-Id key. Please see 820 the complete model for all other types. 822 It is important to take note of the following: 824 o The address-family ipv4/ipv4 applies to "root" address in the mLDP 825 binding tree. The other addresses (source, group, RP etc) do not 826 have to be of the same address family type as the root. 828 o The "recur-root-address" field applies to Recursive opaque type, 829 and (recur-root-address, recur-rd) fields applies to VPN-Recursive 830 opaque types as defined in [RFC6512] 832 o In case of a recursive FEC, the address-family of the recur-root- 833 address could be different than the address-family of the root 834 address of original encapsulated MP FEC 836 The following diagram illustrates the FEC-label binding information 837 structure for a P2MP (Transit IPv4 Source type) LSP on a branch/ 838 transit LSR: 840 FEC (root 203.0.113.1, S=198.51.100.1, G=224.1.1.1): 841 type: p2mp 842 upstream: 843 advertised: 844 peer 192.0.2.1:0, label 16000 (local) 845 downstream: 846 received: 847 peer 192.0.2.2:0, label 17000 (remote) 848 peer 192.0.2.3:0, label 18000 (remote) 850 Figure 10 852 The following diagram illustrates the FEC-label binding information 853 structure for a similar MP2MP LSP on a branch/transit LSR: 855 FEC (root 203.0.113.2, RP=198.51.100.2, G=224.1.1.1): 856 type: mp2mp 857 upstream: 858 advertised: 859 peer 192.0.2.1:0, label 16000 (local) 860 received: 861 peer 192.0.2.1:0, label 17000 (remote) 862 downstream: 863 advertised: 864 peer 192.0.2.2:0, label 16001 (local), MBB role=active 865 peer 192.0.2.3:0, label 16002 (local), MBB role=standby 866 received: 867 peer 192.0.2.2:0, label 17001 (remote) 868 peer 192.0.2.3:0, label 18001 (remote) 870 Figure 11 872 5.3.3. Capabilities state 874 Like LDP, mLDP capabilities state comprise two types of information: 876 o global: augments ldp:global/ldp:state/ldp:capability. 878 o per-peer: augments ldp:peers/ldp:peer/ldp:state/ldp:capability 880 6. Notifications 882 mLDP notification module consists of notification related to changes 883 in the operational state of an mLDP FEC. 885 6.1. Base 887 Following is a simplified graphical representation of the base data 888 model for mLDP notifications: 890 module: ietf-mpls-mldp 891 notifications: 892 +---n mpls-mldp-fec-event 893 +--ro event-type? ldp:oper-status-event-type 894 +--ro (opaque-type)? 895 +--:(opaque-type-lspid) 896 +--ro opaque-type-lspid 897 +--ro root-address? inet:ip-address 898 +--ro lsp-id? uint32 899 +--ro multipoint-type? multipoint-type 900 +--ro mldp-ext:recursive-fec 901 +--ro mldp-ext:recur-root-address? inet:ip-address 902 +--ro mldp-ext:recur-rd? route-distinguisher 903 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 905 Figure 12 907 6.2. Extended 909 Following is a simplified graphical representation of the extended 910 data model for mLDP notifications: 912 module: ietf-mpls-mldp 913 notifications: 914 +---n mpls-mldp-fec-event 915 +--ro event-type? ldp:oper-status-event-type 916 +--ro (opaque-type)? 917 +--:(mldp-ext:opaque-type-transit) 918 | +--ro mldp-ext:opaque-type-transit 919 | +--ro mldp-ext:root-address? inet:ip-address 920 | +--ro mldp-ext:source-address? inet:ip-address 921 | +--ro mldp-ext:group-address? inet:ip-address-no-zone 922 | +--ro mldp-ext:rd? route-distinguisher 923 | +--ro mldp-ext:recur-root-address? inet:ip-address 924 | +--ro mldp-ext:recur-rd? route-distinguisher 925 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 926 +--:(mldp-ext:opaque-type-bidir) 927 +--ro mldp-ext:opaque-type-bidir 928 +--ro mldp-ext:root-address? inet:ip-address 929 +--ro mldp-ext:rp? inet:ip-address 930 +--ro mldp-ext:group-address? inet:ip-address-no-zone 931 +--ro mldp-ext:rd? route-distinguisher 932 +--ro mldp-ext:recur-root-address? inet:ip-address 933 +--ro mldp-ext:recur-rd? route-distinguisher 934 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 936 Figure 13 938 7. Actions 940 Currently, no RPCs/actions are defined for mLDP. 942 8. Open Items 944 Following is a list of open items that are to be discussed and 945 addressed in future revisions of this document: 947 o Specify default values for configuration parameters 949 o Extend the "Configured Leaf LSPs" for various type of opaque-types 951 o Extend mLDP notifications for other types of opaque values as well 953 o Make MP LSP configuration and state model consistent 955 9. YANG Specification 957 Following is the actual YANG definition (module) for mLDP constructs 958 defined earlier in the document. 960 9.1. Base 962 file "ietf-mpls-mldp@2017-10-19.yang" 964 module ietf-mpls-mldp { 965 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp"; 966 prefix "mldp"; 968 import ietf-inet-types { 969 prefix "inet"; 970 } 972 import ietf-interfaces { 973 prefix "if"; 974 } 976 import ietf-mpls-ldp { 977 prefix "ldp"; 978 } 980 import ietf-routing { 981 prefix "rt"; 982 } 984 import ietf-routing-types { 985 prefix "rt-types"; 986 } 988 organization 989 "IETF MPLS Working Group"; 990 contact 991 "WG Web: 992 WG List: 994 WG Chair: Loa Andersson 995 997 WG Chair: Ross Callon 998 1000 WG Chair: George Swallow 1001 1003 Editor: Kamran Raza 1004 1006 Editor: Rajiv Asati 1007 1009 Editor: Xufeng Liu 1010 1012 Editor: Santosh Esale 1013 1015 Editor: Xia Chen 1016 1018 Editor: Himanshu Shah 1019 "; 1021 description 1022 "This YANG module defines the essential components for the 1023 management of Multi-Protocol Label Switching (MPLS) Multipoint 1024 LDP (mLDP)."; 1026 revision 2017-10-19 { 1027 description 1028 "Initial revision."; 1029 reference 1030 "RFC XXXX: YANG Data Model for MPLS mLDP."; 1031 } 1033 /* 1034 * Typedefs 1035 */ 1036 typedef multipoint-type { 1037 type enumeration { 1038 enum p2mp { 1039 description "Point to multipoint."; 1040 } 1041 enum mp2mp { 1042 description "Multipoint to multipoint."; 1043 } 1044 } 1045 description 1046 "p2mp or mp2mp."; 1047 } 1048 /* 1049 * Groupings 1050 */ 1052 grouping mldp-capabilities { 1053 description 1054 "mLDP capabilities."; 1055 container p2mp { 1056 description 1057 "Configure point-to-multipoint capability."; 1058 leaf enable { 1059 type boolean; 1060 description 1061 "Enable point-to-multipoint."; 1062 } 1063 } 1064 container mp2mp { 1065 description 1066 "Configure multipoint-to-multipoint capability."; 1067 leaf enable { 1068 type boolean; 1069 description 1070 "Enable multipoint-to-multipoint."; 1071 } 1072 } 1073 container make-before-break { 1074 description 1075 "Configure make-before-break capability."; 1076 leaf enable { 1077 type boolean; 1078 description 1079 "Enable make-before-break."; 1080 } 1081 leaf switchover-delay { 1082 type uint16; 1083 units seconds; 1084 description 1085 "Switchover delay in seconds."; 1086 } 1087 leaf timeout { 1088 type uint16; 1089 units seconds; 1090 description 1091 "Timeout in seconds."; 1092 } 1093 } 1094 } // mldp-capabilities 1095 grouping mldp-fec-event { 1096 description 1097 "A mLDP FEC event."; 1098 choice opaque-type { 1099 description 1100 "The type of opaque value element."; 1101 case opaque-type-lspid { 1102 container opaque-type-lspid { 1103 description 1104 "The type of opaque value element is 1105 the generic LSP identifier"; 1106 reference 1107 "RFC6388: Label Distribution Protocol 1108 Extensions for Point-to-Multipoint and 1109 Multipoint-to-Multipoint Label Switched 1110 Paths."; 1111 leaf root-address { 1112 type inet:ip-address; 1113 description 1114 "Root address."; 1115 } 1116 leaf lsp-id { 1117 type uint32; 1118 description "ID to identify the LSP."; 1119 } 1120 leaf multipoint-type { 1121 type multipoint-type; 1122 description 1123 "The type of mutipoint, p2mp or mp2mp."; 1124 } 1125 } // container opaque-type-lspid 1126 } 1127 } 1128 } // mldp-fec-event 1130 grouping mldp-binding-label-peer-state-attributes { 1131 description 1132 "mLDP label binding per peer attributes."; 1133 leaf direction { 1134 type ldp:downstream-upstream; 1135 description 1136 "Downstream or upstream."; 1137 } 1138 leaf peer { 1139 type leafref { 1140 path 1141 "/rt:routing/rt:control-plane-protocols/" 1142 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:lsr-id"; 1144 } 1145 description 1146 "LDP peer from which this binding is received, 1147 or to which this binding is advertised."; 1148 } 1149 leaf advertisement-type { 1150 type ldp:advertised-received; 1151 description 1152 "Advertised or received."; 1153 } 1154 leaf label { 1155 type rt-types:mpls-label; 1156 description 1157 "Advertised (outbound) or received (inbound) label."; 1158 } 1159 leaf mbb-role { 1160 when "../direction = 'upstream'" { 1161 description 1162 "For upstream."; 1163 } 1164 type enumeration { 1165 enum none { 1166 description "MBB is not enabled."; 1167 } 1168 enum active { 1169 description "This LSP is active."; 1170 } 1171 enum inactive { 1172 description "This LSP is inactive."; 1173 } 1174 } 1175 description 1176 "The MBB status of this LSP."; 1177 } 1178 } // mldp-binding-label-peer-state-attributes 1180 grouping mldp-binding-label-state-attributes { 1181 description 1182 "mLDP label binding attributes."; 1183 list peer { 1184 key "direction peer advertisement-type"; 1185 description 1186 "List of advertised and received peers."; 1187 uses mldp-binding-label-peer-state-attributes; 1188 } // peer 1189 } // mldp-binding-label-state-attributes 1191 /* 1192 * Configuration data and operational state data nodes 1193 */ 1194 augment "/rt:routing/rt:control-plane-protocols/" 1195 + "ldp:mpls-ldp/ldp:global/ldp:capability" { 1196 description "Augmentation for MLDP global capability."; 1197 container mldp { 1198 description 1199 "Multipoint capabilities."; 1200 uses mldp-capabilities; 1201 } 1202 } 1204 /* 1205 * Operational state data nodes 1206 */ 1207 augment "/rt:routing/rt:control-plane-protocols/" 1208 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" 1209 + "ldp:capability" { 1210 description 1211 "Augmentation for MLDP received peer state capability."; 1212 container mldp { 1213 description 1214 "Multipoint capabilities."; 1216 container p2mp { 1217 description 1218 "Configure point-to-multipoint capability."; 1219 leaf enable { 1220 type boolean; 1221 description 1222 "Enable point-to-multipoint."; 1223 } 1224 } 1225 container mp2mp { 1226 description 1227 "Configure multipoint-to-multipoint capability."; 1228 leaf enable { 1229 type boolean; 1230 description 1231 "Enable multipoint-to-multipoint."; 1232 } 1233 } 1234 container make-before-break { 1235 description 1236 "Configure make-before-break capability."; 1237 leaf enable { 1238 type boolean; 1239 description 1240 "Enable make-before-break."; 1241 } 1242 } 1243 } // mldp 1244 } 1246 /* 1247 * Global augmentation 1248 */ 1249 augment "/rt:routing/rt:control-plane-protocols/" 1250 + "ldp:mpls-ldp/ldp:global" { 1251 description "MLDP global augmentation."; 1252 container mldp { 1253 description 1254 "mLDP attributes at per instance level. Defining 1255 attributes here does not enable any MP capabilities. 1256 MP capabilities need to be explicitly enabled under 1257 container capability."; 1259 leaf enable { 1260 type boolean; 1261 description 1262 "Enable mLDP."; 1263 } 1265 container address-families { 1266 description 1267 "Per-af params."; 1269 container ipv4 { 1270 description 1271 "IPv4 information."; 1272 container roots { 1273 config false; 1274 description 1275 "IPv4 multicast LSP roots."; 1276 list root { 1277 key "root-address"; 1278 description 1279 "List of roots for configured multicast LSPs."; 1281 leaf root-address { 1282 type inet:ipv4-address; 1283 description 1284 "Root address."; 1285 } 1287 leaf is-self { 1288 type boolean; 1289 description 1290 "This is the root."; 1291 } 1293 list reachability { 1294 key "address interface"; 1295 description 1296 "A next hop for reachability to root, 1297 as a RIB view."; 1298 leaf address { 1299 type inet:ipv4-address; 1300 description 1301 "The next hop address to reach root."; 1302 } 1303 leaf interface { 1304 type if:interface-ref; 1305 description 1306 "Interface connecting to next-hop."; 1307 } 1308 leaf peer { 1309 type leafref { 1310 path 1311 "../../../../../../../../ldp:peers/" 1312 + "ldp:peer/ldp:lsr-id"; 1313 } 1314 description 1315 "LDP peer from which this next hop can be 1316 reached."; 1317 } 1318 } 1320 container bindings { 1321 description 1322 "mLDP FEC to label bindings."; 1323 container opaque-type-lspid { 1324 description 1325 "The type of opaque value element is 1326 the generic LSP identifier"; 1327 reference 1328 "RFC6388: Label Distribution Protocol 1329 Extensions for Point-to-Multipoint and 1330 Multipoint-to-Multipoint Label Switched 1331 Paths."; 1332 list fec-label { 1333 key 1334 "lsp-id"; 1335 description 1336 "List of FEC to label bindings."; 1337 leaf lsp-id { 1338 type uint32; 1339 description "ID to identify the LSP."; 1340 } 1341 leaf multipoint-type { 1342 type multipoint-type; 1343 description 1344 "The type of mutipoint, p2mp or mp2mp."; 1345 } 1346 uses mldp-binding-label-state-attributes; 1347 } // fec-label 1348 } // opaque-type-lspid 1349 } // bindings 1350 } // list root 1351 } // roots 1353 container configured-leaf-lsps { 1354 description 1355 "Configured multicast LSPs."; 1356 container opaque-type-lspid { 1357 description 1358 "The type of opaque value element is 1359 the generic LSP identifier"; 1360 reference 1361 "RFC6388: Label Distribution Protocol 1362 Extensions for Point-to-Multipoint and 1363 Multipoint-to-Multipoint Label Switched 1364 Paths."; 1365 list fec-label { 1366 key 1367 "root-address lsp-id"; 1368 description 1369 "List of FEC to label bindings."; 1370 leaf root-address { 1371 type inet:ipv4-address; 1372 description 1373 "Root address."; 1374 } 1375 leaf lsp-id { 1376 type uint32; 1377 description "ID to identify the LSP."; 1378 } 1379 leaf multipoint-type { 1380 type multipoint-type; 1381 description 1382 "The type of mutipoint, p2mp or mp2mp."; 1383 } 1385 } // fec-label 1386 } // opaque-type-lspid 1387 } // configured-leaf-lsps 1388 } // ipv4 1389 } // list address-family 1390 } // mldp 1391 } 1393 /* 1394 * Notifications 1395 */ 1396 notification mpls-mldp-fec-event { 1397 description 1398 "Notification event for a change of FEC status."; 1399 leaf event-type { 1400 type ldp:oper-status-event-type; 1401 description "Event type."; 1402 } 1403 uses mldp-fec-event; 1404 } 1405 } 1407 1409 Figure 14 1411 9.2. Extended 1413 file "ietf-mpls-mldp-extended@2017-10-19.yang" 1415 module ietf-mpls-mldp-extended { 1416 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended"; 1417 prefix "mldp-ext"; 1419 import ietf-inet-types { 1420 prefix "inet"; 1421 } 1423 import ietf-interfaces { 1424 prefix "if"; 1425 } 1427 import ietf-routing { 1428 prefix "rt"; 1429 } 1430 import ietf-mpls-ldp { 1431 prefix "ldp"; 1432 } 1434 import ietf-mpls-ldp-extended { 1435 prefix "ldp-ext"; 1436 } 1438 import ietf-mpls-mldp { 1439 prefix "mldp"; 1440 } 1442 organization 1443 "IETF MPLS Working Group"; 1444 contact 1445 "WG Web: 1446 WG List: 1448 WG Chair: Loa Andersson 1449 1451 WG Chair: Ross Callon 1452 1454 WG Chair: George Swallow 1455 1457 Editor: Kamran Raza 1458 1460 Editor: Rajiv Asati 1461 1463 Editor: Xufeng Liu 1464 1466 Editor: Santosh Esale 1467 1469 Editor: Xia Chen 1470 1472 Editor: Himanshu Shah 1473 "; 1475 description 1476 "This YANG module defines the essential components for the 1477 management of Multi-Protocol Label Switching (MPLS) Multipoint 1478 LDP (mLDP)."; 1480 revision 2017-10-19 { 1481 description 1482 "Initial revision."; 1483 reference 1484 "RFC XXXX: YANG Data Model for MPLS mLDP."; 1485 } 1487 /* 1488 * Features 1489 */ 1490 feature capability-mldp-hsmp { 1491 description 1492 "This feature indicates that the system allows to configure 1493 mLDP hub-and-spoke-multipoint capability."; 1494 } 1496 feature capability-mldp-node-protection { 1497 description 1498 "This feature indicates that the system allows to configure 1499 mLDP node-protection capability."; 1500 } 1502 feature mldp-mofrr { 1503 description 1504 "This feature indicates that the system supports mLDP 1505 Multicast only FRR (MoFRR)."; 1506 } 1508 feature per-peer-capability { 1509 description 1510 "This feature indicates that the system allows to configure 1511 mLDP capabilities at the per peer level."; 1512 } 1514 /* 1515 * Typedefs 1516 */ 1517 typedef route-distinguisher { 1518 type string { 1519 } 1520 description 1521 "Type definition for route distinguisher."; 1522 reference 1523 "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; 1524 } 1525 typedef mofrr-role { 1526 type enumeration { 1527 enum none { 1528 description "MOFRR is not enabled."; 1529 } 1530 enum primary { 1531 description "This LSP is primary."; 1532 } 1533 enum backup { 1534 description "This LSP is backup."; 1535 } 1536 } 1537 description 1538 "This type represents the MOFRR (Multicast only FRR) role 1539 status of a LSP."; 1540 } 1542 /* 1543 * Groupings 1544 */ 1545 grouping mldp-ext-binding-label-state-attributes { 1546 description 1547 "mLDP label binding attributes."; 1549 list peer { 1550 key "direction peer advertisement-type"; 1551 description 1552 "List of advertised and received peers."; 1553 uses mldp:mldp-binding-label-peer-state-attributes; 1555 leaf mofrr-role { 1556 when "../direction = 'upstream'" { 1557 description 1558 "For upstream."; 1559 } 1560 type mofrr-role; 1561 description 1562 "The MOFRR status of this LSP."; 1563 } 1564 } // peer 1565 } // mldp-ext-binding-label-state-attributes 1567 grouping mldp-ext-capabilities { 1568 description 1569 "mLDP extended capabilities."; 1570 container hub-and-spoke { 1571 if-feature capability-mldp-hsmp; 1572 description 1573 "Configure hub-and-spoke-multipoint capability."; 1574 reference 1575 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1576 Label Switched Path"; 1577 leaf enable { 1578 type boolean; 1579 description 1580 "Enable hub-and-spoke-multipoint."; 1581 } 1582 } 1583 container node-protection { 1584 if-feature capability-mldp-node-protection; 1585 description 1586 "Configure node-protection capability."; 1587 reference 1588 "RFC7715: mLDP Node Protection."; 1589 leaf plr { 1590 type boolean; 1591 description 1592 "Point of Local Repair capable for MP LSP node 1593 protection."; 1594 } 1595 container merge-point { 1596 description 1597 "Merge Point capable for MP LSP node protection."; 1598 leaf enable { 1599 type boolean; 1600 description 1601 "Enable merge point capability."; 1602 } 1603 leaf targeted-session-teardown-delay { 1604 type uint16; 1605 units seconds; 1606 description 1607 "Targeted session teardown delay."; 1608 } 1609 } // merge-point 1610 } 1611 } // mldp-ext-capabilities 1613 grouping mldp-ipv6-configured-lsp-roots { 1614 description 1615 "mLDP IPv6 roots containers."; 1617 container roots { 1618 description 1619 "Configured IPv6 multicast LSPs."; 1621 list root { 1622 key "root-address"; 1623 description 1624 "List of roots for configured multicast LSPs."; 1626 leaf root-address { 1627 type inet:ipv6-address; 1628 description 1629 "Root address."; 1630 } 1632 choice lsp-key-type { 1633 description 1634 "LSP ID based or source-group based ."; 1635 case lsp-id { 1636 container opaque-type-lspid { 1637 description 1638 "The type of opaque value element is 1639 the generic LSP identifier"; 1640 list lsp { 1641 key "lsp-id"; 1642 description 1643 "List of LSPs."; 1644 leaf lsp-id { 1645 type uint16; 1646 description "ID to identify the LSP."; 1647 } 1648 } // list lsp 1649 } // opaque-type-lspid 1650 } // case lsp-id 1652 case source-group { 1653 container opaque-type-transit { 1654 description 1655 "The type of opaque value element is the transit IPv6 1656 source."; 1657 list lsp { 1658 key "source-address group-address"; 1659 description 1660 "List of LSPs."; 1661 leaf source-address { 1662 type inet:ipv6-address; 1663 description 1664 "Source address."; 1665 } 1666 leaf group-address { 1667 type inet:ipv6-address-no-zone; 1668 description 1669 "Group address."; 1670 } 1671 } 1672 } 1673 } // case source-group 1674 } // choice lsp-key-type 1675 } // list root 1676 } // roots 1677 } // mldp-ipv6-configured-lsp-roots 1679 grouping mldp-ext-per-af-config-attibutes { 1680 description 1681 "mLDP per address family configuration attibutes."; 1682 container multicast-only-frr { 1683 if-feature mldp-mofrr; 1684 description 1685 "Multicast only FRR (MoFRR) policy."; 1686 leaf prefix-list { 1687 type ldp-ext:prefix-list-ref; 1688 description 1689 "Enables MoFRR for the specified access list."; 1690 } 1691 } // multicast-only-frr 1692 container recursive-fec { 1693 description 1694 "Recursive FEC policy."; 1695 leaf prefix-list { 1696 type ldp-ext:prefix-list-ref; 1697 description 1698 "Enables recursive FEC for the specified access list."; 1699 } 1700 } // recursive-for 1701 } // mldp-ext-per-af-config-attibutes 1703 grouping recursive-fec-attibutes { 1704 description 1705 "mLDP recursive FEC attibutes."; 1706 leaf recur-root-address { 1707 type inet:ip-address; 1708 description 1709 "Recursive root address."; 1710 reference 1711 "RFC6512: Using Multipoint LDP When the 1712 Backbone Has No Route to the Root"; 1713 } 1714 leaf recur-rd { 1715 type route-distinguisher; 1716 description 1717 "Route Distinguisher in the VPN-Recursive 1718 Opaque Value."; 1719 reference 1720 "RFC6512: Using Multipoint LDP When the 1721 Backbone Has No Route to the Root"; 1722 } 1723 leaf multipoint-type { 1724 type mldp:multipoint-type; 1725 description 1726 "The type of mutipoint, p2mp or mp2mp."; 1727 } 1728 } // recursive-fec-attibutes 1730 /* 1731 * Configuration data and operational state data nodes 1732 */ 1733 // Global capability 1734 augment "/rt:routing/rt:control-plane-protocols/" 1735 + "ldp:mpls-ldp/ldp:global/ldp:capability/mldp:mldp" { 1736 description "Augmentation for MLDP global capability."; 1738 uses mldp-ext-capabilities; 1739 } 1741 // Peer capability 1742 augment "/rt:routing/rt:control-plane-protocols/" 1743 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability" { 1744 description "Augmentation for MLDP peer capability."; 1745 container mldp { 1746 if-feature per-peer-capability; 1747 description 1748 "mLDP capabilities."; 1749 uses mldp:mldp-capabilities; 1750 } 1751 } 1753 // IPv4 config 1754 augment "/rt:routing/rt:control-plane-protocols/" 1755 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1756 + "mldp:ipv4" { 1757 description "Augmentation for MLDP IPv4 configuration."; 1758 uses mldp-ext-per-af-config-attibutes; 1759 } 1761 // IPv4 configured-leaf-lsps config 1762 augment "/rt:routing/rt:control-plane-protocols/" 1763 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1764 + "mldp:ipv4/mldp:configured-leaf-lsps/mldp:opaque-type-lspid/" 1765 + "mldp:fec-label" { 1766 description 1767 "Augmentation for MLDP IPv4 configured-leaf-lsps 1768 configuration for opaque-type-lspid."; 1769 list recursive-fec { 1770 key 1771 "recur-root-address recur-rd"; 1772 description 1773 "List of recursive opaque values."; 1774 uses recursive-fec-attibutes; 1775 } // fec-label 1776 } 1778 augment "/rt:routing/rt:control-plane-protocols/" 1779 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1780 + "mldp:ipv4/mldp:configured-leaf-lsps" { 1781 description 1782 "Augmentation for MLDP IPv4 configured-leaf-lsps 1783 configuration."; 1785 container opaque-type-transit { 1786 description 1787 "The type of opaque value element is the transit IPv4 1788 source."; 1789 reference 1790 "RFC6826: Multipoint LDP In-Band Signaling for 1791 Point-to-Multipoint and 1792 Multipoint-to-Multipoint Label Switched Paths."; 1793 list fec-label { 1794 key 1795 "root-address source-address group-address " 1796 + "rd recur-root-address recur-rd"; 1797 description 1798 "List of FEC to label bindings."; 1799 leaf root-address { 1800 type inet:ipv4-address; 1801 description 1802 "Root address."; 1803 } 1804 leaf source-address { 1805 type inet:ip-address; 1806 description 1807 "Source address."; 1808 } 1809 leaf group-address { 1810 type inet:ip-address-no-zone; 1811 description 1812 "Group address."; 1813 } 1814 leaf rd { 1815 type route-distinguisher; 1816 description 1817 "Route Distinguisher."; 1818 reference 1819 "RFC7246: Multipoint Label Distribution 1820 Protocol In-Band Signaling in a Virtual 1821 Routing and Forwarding (VRF) Table 1822 Context."; 1823 } 1824 uses recursive-fec-attibutes; 1825 } // fec-label 1826 } // opaque-type-transit 1828 container opaque-type-bidir { 1829 description 1830 "The type of opaque value element is 1831 the generic LSP identifier"; 1832 reference 1833 "RFC6826: Multipoint LDP In-Band Signaling for 1834 Point-to-Multipoint and 1835 Multipoint-to-Multipoint Label Switched 1836 Paths."; 1837 list fec-label { 1838 key 1839 "root-address rp group-address rd recur-root-address " 1840 + "recur-rd"; 1841 description 1842 "List of FEC to label bindings."; 1843 leaf root-address { 1844 type inet:ipv4-address; 1845 description 1846 "Root address."; 1847 } 1848 leaf rp { 1849 type inet:ip-address; 1850 description 1851 "RP address."; 1852 } 1853 leaf group-address { 1854 type inet:ip-address-no-zone; 1855 description 1856 "Group address."; 1857 } 1858 leaf rd { 1859 type route-distinguisher; 1860 description 1861 "Route Distinguisher."; 1862 reference 1863 "RFC7246: Multipoint Label Distribution 1864 Protocol In-Band Signaling in a Virtual 1865 Routing and Forwarding (VRF) Table 1866 Context."; 1867 } 1868 uses recursive-fec-attibutes; 1869 } // fec-label 1870 } // opaque-type-bidir 1871 } 1873 // IPv6 config 1874 augment "/rt:routing/rt:control-plane-protocols/" 1875 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1876 + "ipv6" { 1877 description "Augmentation for MLDP IPv4 configuration."; 1878 uses mldp-ext-per-af-config-attibutes; 1879 } 1881 // Global forwarding-nexthop 1882 augment "/rt:routing/rt:control-plane-protocols/" 1883 + "ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/" 1884 + "ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family" { 1885 description 1886 "Augmentation for MLDP nexthop forwarding interface."; 1887 leaf mldp-disable { 1888 type boolean; 1889 description 1890 "Disable mLDP forwarding on the interface."; 1891 } 1892 } 1894 /* 1895 * Operational state data nodes 1896 */ 1897 // IPv4 state for per peer bindings 1898 augment "/rt:routing/rt:control-plane-protocols/" 1899 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1900 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" 1901 + "mldp:opaque-type-lspid/mldp:fec-label/mldp:peer" { 1902 description "Augmentation for MLDP IPv4 state."; 1904 leaf mofrr-role { 1905 when "../mldp:direction = 'upstream'" { 1906 description 1907 "For upstream."; 1909 } 1910 type mofrr-role; 1911 description 1912 "The MOFRR status of this LSP."; 1913 } 1914 } 1916 // Peer capability state 1917 augment "/rt:routing/rt:control-plane-protocols/" 1918 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" 1919 + "ldp:capability/mldp:mldp" { 1920 description 1921 "Augmentation for MLDP received peer state capability."; 1922 container hub-and-spoke { 1923 description 1924 "Configure hub-and-spoke-multipoint capability."; 1925 reference 1926 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1927 Label Switched Path"; 1928 leaf enable { 1929 type boolean; 1930 description 1931 "Enable hub-and-spoke-multipoint."; 1932 } 1933 } 1934 container node-protection { 1935 description 1936 "Configure node-protection capability."; 1937 reference 1938 "RFC7715: mLDP Node Protection."; 1939 leaf plr { 1940 type boolean; 1941 description 1942 "Point of Local Repair capable for MP LSP node 1943 protection."; 1944 } 1945 leaf merge-point { 1946 type boolean; 1947 description 1948 "Merge Point capable for MP LSP node protection."; 1949 } // merge-point 1950 } // node-protection 1951 } 1953 // IPv4 bindings state 1954 augment "/rt:routing/rt:control-plane-protocols/" 1955 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1956 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings" { 1957 description "Augmentation for MLDP IPv4 bindings."; 1958 container opaque-type-transit { 1959 description 1960 "The type of opaque value element is the transit IPv4 1961 source."; 1962 reference 1963 "RFC6826: Multipoint LDP In-Band Signaling for 1964 Point-to-Multipoint and 1965 Multipoint-to-Multipoint Label Switched Paths."; 1966 list fec-label { 1967 key 1968 "source-address group-address " 1969 + "rd recur-root-address recur-rd"; 1970 description 1971 "List of FEC to label bindings."; 1972 leaf source-address { 1973 type inet:ip-address; 1974 description 1975 "Source address."; 1976 } 1977 leaf group-address { 1978 type inet:ip-address-no-zone; 1979 description 1980 "Group address."; 1981 } 1982 leaf rd { 1983 type route-distinguisher; 1984 description 1985 "Route Distinguisher."; 1986 reference 1987 "RFC7246: Multipoint Label Distribution 1988 Protocol In-Band Signaling in a Virtual 1989 Routing and Forwarding (VRF) Table 1990 Context."; 1991 } 1992 uses recursive-fec-attibutes; 1993 uses mldp-ext-binding-label-state-attributes; 1994 } // fec-label 1995 } // opaque-type-transit 1997 container opaque-type-bidir { 1998 description 1999 "The type of opaque value element is 2000 the generic LSP identifier"; 2001 reference 2002 "RFC6826: Multipoint LDP In-Band Signaling for 2003 Point-to-Multipoint and 2004 Multipoint-to-Multipoint Label Switched 2005 Paths."; 2006 list fec-label { 2007 key 2008 "rp group-address rd recur-root-address recur-rd"; 2009 description 2010 "List of FEC to label bindings."; 2011 leaf rp { 2012 type inet:ip-address; 2013 description 2014 "RP address."; 2015 } 2016 leaf group-address { 2017 type inet:ip-address-no-zone; 2018 description 2019 "Group address."; 2020 } 2021 leaf rd { 2022 type route-distinguisher; 2023 description 2024 "Route Distinguisher."; 2025 reference 2026 "RFC7246: Multipoint Label Distribution 2027 Protocol In-Band Signaling in a Virtual 2028 Routing and Forwarding (VRF) Table 2029 Context."; 2030 } 2031 uses recursive-fec-attibutes; 2032 uses mldp-ext-binding-label-state-attributes; 2033 } // fec-label 2034 } // opaque-type-bidir 2035 } 2037 // IPv6 bindings state 2038 augment "/rt:routing/rt:control-plane-protocols/" 2039 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2040 + "ipv6/roots/root/bindings" { 2041 description "Augmentation for MLDP IPv6 bindings."; 2042 container opaque-type-transit { 2043 config false; 2044 description 2045 "The type of opaque value element is the transit IPv6 2046 source."; 2047 reference 2048 "RFC6826: Multipoint LDP In-Band Signaling for 2049 Point-to-Multipoint and 2050 Multipoint-to-Multipoint Label Switched 2051 Paths."; 2052 list fec-label { 2053 key 2054 "source-address group-address " 2055 + "rd recur-root-address recur-rd"; 2056 description 2057 "List of FEC to label bindings."; 2058 leaf source-address { 2059 type inet:ip-address; 2060 description 2061 "Source address."; 2062 } 2063 leaf group-address { 2064 type inet:ip-address-no-zone; 2065 description 2066 "Group address."; 2067 } 2068 leaf rd { 2069 type route-distinguisher; 2070 description 2071 "Route Distinguisher."; 2072 reference 2073 "RFC7246: Multipoint Label Distribution 2074 Protocol In-Band Signaling in a Virtual 2075 Routing and Forwarding (VRF) Table 2076 Context."; 2077 } 2078 uses recursive-fec-attibutes; 2079 uses mldp-ext-binding-label-state-attributes; 2080 } // fec-label 2081 } // opaque-type-transit 2083 container opaque-type-bidir { 2084 config false; 2085 description 2086 "The type of opaque value element is 2087 the generic LSP identifier"; 2088 reference 2089 "RFC6826: Multipoint LDP In-Band Signaling for 2090 Point-to-Multipoint and 2091 Multipoint-to-Multipoint Label Switched 2092 Paths."; 2093 list fec-label { 2094 key 2095 "rp group-address rd recur-root-address recur-rd"; 2096 description 2097 "List of FEC to label bindings."; 2098 leaf rp { 2099 type inet:ip-address; 2100 description 2101 "RP address."; 2102 } 2103 leaf group-address { 2104 type inet:ip-address-no-zone; 2105 description 2106 "Group address."; 2107 } 2108 leaf rd { 2109 type route-distinguisher; 2110 description 2111 "Route Distinguisher."; 2112 reference 2113 "RFC7246: Multipoint Label Distribution 2114 Protocol In-Band Signaling in a Virtual 2115 Routing and Forwarding (VRF) Table 2116 Context."; 2117 } 2118 uses recursive-fec-attibutes; 2119 uses mldp-ext-binding-label-state-attributes; 2120 } // fec-label 2121 } // opaque-type-bidir 2122 } 2124 // IPv4 bindings opaque-type-lspid state 2125 augment "/rt:routing/rt:control-plane-protocols/" 2126 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2127 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" 2128 + "mldp:opaque-type-lspid/mldp:fec-label" { 2129 description 2130 "Augmentation for MLDP IPv4 bindings with opaque type LSP ID."; 2131 list recursive-fec { 2132 key 2133 "recur-root-address recur-rd"; 2134 description 2135 "List of recursive opaque values."; 2136 uses recursive-fec-attibutes; 2137 uses mldp-ext-binding-label-state-attributes; 2138 } // fec-label 2139 } 2141 // IPv6 bindings opaque-type-lspid state 2142 augment "/rt:routing/rt:control-plane-protocols/" 2143 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2144 + "ipv6/roots/root/bindings/opaque-type-lspid/fec-label" { 2145 description 2146 "Augmentation for MLDP IPv6 bindings with opaque type LSP ID."; 2147 list recursive-fec { 2148 key "recur-root-address recur-rd"; 2149 config false; 2150 description 2151 "List of recursive opaque values."; 2152 uses recursive-fec-attibutes; 2153 uses mldp-ext-binding-label-state-attributes; 2154 } // fec-label 2155 } 2157 /* 2158 * Per AF augmentation 2159 */ 2160 // IPv6 augmentation 2161 augment "/rt:routing/rt:control-plane-protocols/" 2162 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families" { 2163 description "Augmentation for MLDP IPv6 address family."; 2164 container ipv6 { 2165 description 2166 "IPv6 information."; 2168 container roots { 2169 config false; 2170 description 2171 "IPv6 multicast LSP roots."; 2172 list root { 2173 key "root-address"; 2174 description 2175 "List of roots for configured multicast LSPs."; 2177 leaf root-address { 2178 type inet:ipv6-address; 2179 description 2180 "Root address."; 2181 } 2183 leaf is-self { 2184 type boolean; 2185 description 2186 "This is the root."; 2187 } 2189 list reachability { 2190 key "address interface"; 2191 description 2192 "A next hop for reachability to root, 2193 as a RIB view."; 2194 leaf address { 2195 type inet:ipv6-address; 2196 description 2197 "The next hop address to reach root."; 2198 } 2199 leaf interface { 2200 type if:interface-ref; 2201 description 2202 "Interface connecting to next-hop."; 2203 } 2204 leaf peer { 2205 type leafref { 2206 path 2207 "../../../../../../../../ldp:peers/" 2208 + "ldp:peer/ldp:lsr-id"; 2209 } 2210 description 2211 "LDP peer from which this next hop can be 2212 reached."; 2213 } 2214 } 2216 container bindings { 2217 description 2218 "mLDP FEC to label bindings."; 2219 container opaque-type-lspid { 2220 description 2221 "The type of opaque value element is 2222 the generic LSP identifier"; 2223 reference 2224 "RFC6388: Label Distribution Protocol 2225 Extensions for Point-to-Multipoint and 2226 Multipoint-to-Multipoint Label Switched 2227 Paths."; 2228 list fec-label { 2229 key 2230 "lsp-id"; 2231 description 2232 "List of FEC to label bindings."; 2233 leaf lsp-id { 2234 type uint32; 2235 description "ID to identify the LSP."; 2236 } 2237 leaf multipoint-type { 2238 type mldp:multipoint-type; 2239 description 2240 "The type of mutipoint, p2mp or mp2mp."; 2241 } 2243 uses mldp-ext-binding-label-state-attributes; 2244 } // fec-label 2246 } // opaque-type-lspid 2247 } // bindings 2248 } // list root 2249 } // roots 2251 container configured-leaf-lsps { 2252 description 2253 "Configured multicast LSPs."; 2255 container opaque-type-lspid { 2256 description 2257 "The type of opaque value element is 2258 the generic LSP identifier"; 2259 reference 2260 "RFC6388: Label Distribution Protocol 2261 Extensions for Point-to-Multipoint and 2262 Multipoint-to-Multipoint Label Switched 2263 Paths."; 2264 list fec-label { 2265 key 2266 "root-address lsp-id"; 2267 description 2268 "List of FEC to label bindings."; 2269 leaf root-address { 2270 type inet:ipv6-address; 2271 description 2272 "Root address."; 2273 } 2274 leaf lsp-id { 2275 type uint32; 2276 description "ID to identify the LSP."; 2277 } 2278 leaf multipoint-type { 2279 type mldp:multipoint-type; 2280 description 2281 "The type of mutipoint, p2mp or mp2mp."; 2282 } 2283 list recursive-fec { 2284 key 2285 "recur-root-address recur-rd"; 2286 description 2287 "List of recursive opaque values."; 2288 uses recursive-fec-attibutes; 2289 } // fec-label 2290 } // fec-label 2291 } // opaque-type-lspid 2293 container opaque-type-transit { 2294 description 2295 "The type of opaque value element is the transit IPv4 2296 source."; 2297 reference 2298 "RFC6826: Multipoint LDP In-Band Signaling for 2299 Point-to-Multipoint and 2300 Multipoint-to-Multipoint Label Switched Paths."; 2301 list fec-label { 2302 key 2303 "root-address source-address group-address " 2304 + "rd recur-root-address recur-rd"; 2305 description 2306 "List of FEC to label bindings."; 2307 leaf root-address { 2308 type inet:ipv6-address; 2309 description 2310 "Root address."; 2311 } 2312 leaf source-address { 2313 type inet:ip-address; 2314 description 2315 "Source address."; 2316 } 2317 leaf group-address { 2318 type inet:ip-address-no-zone; 2319 description 2320 "Group address."; 2321 } 2322 leaf rd { 2323 type route-distinguisher; 2324 description 2325 "Route Distinguisher."; 2326 reference 2327 "RFC7246: Multipoint Label Distribution 2328 Protocol In-Band Signaling in a Virtual 2329 Routing and Forwarding (VRF) Table 2330 Context."; 2331 } 2332 uses recursive-fec-attibutes; 2333 } // fec-label 2334 } // opaque-type-transit 2336 container opaque-type-bidir { 2337 description 2338 "The type of opaque value element is 2339 the generic LSP identifier"; 2340 reference 2341 "RFC6826: Multipoint LDP In-Band Signaling for 2342 Point-to-Multipoint and 2343 Multipoint-to-Multipoint Label Switched 2344 Paths."; 2345 list fec-label { 2346 key 2347 "root-address rp group-address rd recur-root-address " 2348 + "recur-rd"; 2349 description 2350 "List of FEC to label bindings."; 2351 leaf root-address { 2352 type inet:ipv6-address; 2353 description 2354 "Root address."; 2355 } 2356 leaf rp { 2357 type inet:ip-address; 2358 description 2359 "RP address."; 2360 } 2361 leaf group-address { 2362 type inet:ip-address-no-zone; 2363 description 2364 "Group address."; 2365 } 2366 leaf rd { 2367 type route-distinguisher; 2368 description 2369 "Route Distinguisher."; 2370 reference 2371 "RFC7246: Multipoint Label Distribution 2372 Protocol In-Band Signaling in a Virtual 2373 Routing and Forwarding (VRF) Table 2374 Context."; 2375 } 2376 uses recursive-fec-attibutes; 2377 } // fec-label 2378 } // opaque-type-bidir 2379 } // configured-leaf-lsps 2380 } // ipv6 2381 } 2383 /* 2384 * Global augmentation 2385 */ 2387 /* 2388 * Notifications 2389 */ 2391 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type/" 2392 + "mldp:opaque-type-lspid/mldp:opaque-type-lspid" { 2393 description 2394 "Augmentation for MLDP notification for opaque-type-lspid."; 2395 container recursive-fec { 2396 description 2397 "Container of recursive opaque values."; 2398 uses recursive-fec-attibutes; 2399 } // fec-label 2400 } 2402 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type" { 2403 description 2404 "Augmentation for MLDP notification."; 2405 case opaque-type-transit { 2406 container opaque-type-transit { 2407 description 2408 "The type of opaque value element is the transit IPv4 2409 source."; 2410 reference 2411 "RFC6826: Multipoint LDP In-Band Signaling for 2412 Point-to-Multipoint and 2413 Multipoint-to-Multipoint Label Switched Paths."; 2414 leaf root-address { 2415 type inet:ip-address; 2416 description 2417 "Root address."; 2418 } 2419 leaf source-address { 2420 type inet:ip-address; 2421 description 2422 "Source address."; 2423 } 2424 leaf group-address { 2425 type inet:ip-address-no-zone; 2426 description 2427 "Group address."; 2428 } 2429 leaf rd { 2430 type route-distinguisher; 2431 description 2432 "Route Distinguisher."; 2433 reference 2434 "RFC7246: Multipoint Label Distribution 2435 Protocol In-Band Signaling in a Virtual 2436 Routing and Forwarding (VRF) Table 2437 Context."; 2438 } 2439 uses recursive-fec-attibutes; 2440 } // opaque-type-transit 2441 } // opaque-type-transit 2443 case opaque-type-bidir { 2444 container opaque-type-bidir { 2445 description 2446 "The type of opaque value element is 2447 the generic LSP identifier"; 2448 reference 2449 "RFC6826: Multipoint LDP In-Band Signaling for 2450 Point-to-Multipoint and 2451 Multipoint-to-Multipoint Label Switched 2452 Paths."; 2453 leaf root-address { 2454 type inet:ip-address; 2455 description 2456 "Root address."; 2457 } 2458 leaf rp { 2459 type inet:ip-address; 2460 description 2461 "RP address."; 2462 } 2463 leaf group-address { 2464 type inet:ip-address-no-zone; 2465 description 2466 "Group address."; 2467 } 2468 leaf rd { 2469 type route-distinguisher; 2470 description 2471 "Route Distinguisher."; 2472 reference 2473 "RFC7246: Multipoint Label Distribution 2474 Protocol In-Band Signaling in a Virtual 2475 Routing and Forwarding (VRF) Table 2476 Context."; 2477 } 2478 uses recursive-fec-attibutes; 2479 } // opaque-type-bidir 2480 } // opaque-type-bidir 2481 } 2482 } 2484 2485 Figure 15 2487 10. Security Considerations 2489 This mLDP model shares the same security considerations as captured 2490 in LDP Yang model [I-D.ietf-mpls-ldp-yang]. 2492 11. IANA Considerations 2494 This document does not extend mLDP protocol specifiction and hence 2495 there are no IANA considerations. 2497 Note to the RFC Editor: Please remove IANA section before the 2498 publication. 2500 12. Acknowledgments 2502 The authors would like to acknowledge Ladislav Lhotka for his useful 2503 comments as the YANG Doctor. 2505 13. Normative References 2507 [I-D.ietf-mpls-ldp-yang] 2508 Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. 2509 Shah, "YANG Data Model for MPLS LDP", draft-ietf-mpls-ldp- 2510 yang-02 (work in progress), September 2017. 2512 [I-D.ietf-netmod-revised-datastores] 2513 Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 2514 and R. Wilton, "Network Management Datastore 2515 Architecture", draft-ietf-netmod-revised-datastores-06 2516 (work in progress), October 2017. 2518 [I-D.ietf-netmod-rfc6087bis] 2519 Bierman, A., "Guidelines for Authors and Reviewers of YANG 2520 Data Model Documents", draft-ietf-netmod-rfc6087bis-14 2521 (work in progress), September 2017. 2523 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2524 Requirement Levels", BCP 14, RFC 2119, 2525 DOI 10.17487/RFC2119, March 1997, 2526 . 2528 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 2529 Thomas, "Label Distribution Protocol Extensions for Point- 2530 to-Multipoint and Multipoint-to-Multipoint Label Switched 2531 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 2532 . 2534 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 2535 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 2536 November 2011, . 2538 [RFC6512] Wijnands, IJ., Rosen, E., Napierala, M., and N. Leymann, 2539 "Using Multipoint LDP When the Backbone Has No Route to 2540 the Root", RFC 6512, DOI 10.17487/RFC6512, February 2012, 2541 . 2543 [RFC6826] Wijnands, IJ., Ed., Eckert, T., Leymann, N., and M. 2544 Napierala, "Multipoint LDP In-Band Signaling for Point-to- 2545 Multipoint and Multipoint-to-Multipoint Label Switched 2546 Paths", RFC 6826, DOI 10.17487/RFC6826, January 2013, 2547 . 2549 [RFC7060] Napierala, M., Rosen, E., and IJ. Wijnands, "Using LDP 2550 Multipoint Extensions on Targeted LDP Sessions", RFC 7060, 2551 DOI 10.17487/RFC7060, November 2013, 2552 . 2554 [RFC7140] Jin, L., Jounay, F., Wijnands, IJ., and N. Leymann, "LDP 2555 Extensions for Hub and Spoke Multipoint Label Switched 2556 Path", RFC 7140, DOI 10.17487/RFC7140, March 2014, 2557 . 2559 [RFC7246] Wijnands, IJ., Ed., Hitchen, P., Leymann, N., Henderickx, 2560 W., Gulko, A., and J. Tantsura, "Multipoint Label 2561 Distribution Protocol In-Band Signaling in a Virtual 2562 Routing and Forwarding (VRF) Table Context", RFC 7246, 2563 DOI 10.17487/RFC7246, June 2014, 2564 . 2566 [RFC7438] Wijnands, IJ., Ed., Rosen, E., Gulko, A., Joorde, U., and 2567 J. Tantsura, "Multipoint LDP (mLDP) In-Band Signaling with 2568 Wildcards", RFC 7438, DOI 10.17487/RFC7438, January 2015, 2569 . 2571 [RFC7715] Wijnands, IJ., Ed., Raza, K., Atlas, A., Tantsura, J., and 2572 Q. Zhao, "Multipoint LDP (mLDP) Node Protection", 2573 RFC 7715, DOI 10.17487/RFC7715, January 2016, 2574 . 2576 Appendix A. Additional Contributors 2578 Matthew Bocci 2579 Nokia 2580 matthew.bocci@nokia.com 2582 Authors' Addresses 2584 Kamran Raza 2585 Cisco Systems, Inc. 2586 Email: skraza@cisco.com 2588 Rajiv Asati 2589 Cisco Systems, Inc. 2590 Email: rajiva@cisco.com 2592 Sowmya Krishnaswamy 2593 Cisco Systems, Inc. 2594 Email: sowkrish@cisco.com 2596 Xufeng Liu 2597 Jabil 2598 Email: xufeng_liu@jabil.com 2600 Jeff Tantsura 2601 Email: jefftant.ietf@gmail.com 2603 Santosh Esale 2604 Juniper Networks 2605 Email: sesale@juniper.net 2607 Xia Chen 2608 Huawei Technologies 2609 Email: jescia.chenxia@huawei.com 2611 Loa Andersson 2612 Huawei Technologies 2613 Email: loa@pi.nu 2614 Himanshu Shah 2615 Ciena Corporation 2616 Email: hshah@ciena.com