idnits 2.17.1 draft-ietf-mpls-mldp-yang-04.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 466 has weird spacing: '...address ine...' == Line 475 has weird spacing: '...address ine...' == Line 490 has weird spacing: '...address ine...' == Line 499 has weird spacing: '...address ine...' == Line 508 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 (July 16, 2018) is 2111 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: A later version (-09) exists of draft-ietf-mpls-ldp-yang-04 Summary: 1 error (**), 0 flaws (~~), 9 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: January 17, 2019 5 X. Liu 6 Volta Networks 8 S. Esale 9 Juniper Networks 11 L. Andersson 12 Huawei Technologies 14 J. Tantsura 15 Nuage Networks 17 July 16, 2018 19 YANG Data Model for MPLS mLDP 20 draft-ietf-mpls-mldp-yang-04 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 January 17, 2019. 45 Copyright Notice 47 Copyright (c) 2018 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 . . . . . . . . . . . . . . 57 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) [RFC8342]. The operational state data 126 is combined with the associated configuration data in the same 127 hierarchy [I-D.ietf-netmod-rfc6087bis]. When protocol states are 128 retrieved from the NMDA operational state datastore, the returned 129 states cover all "config true" (rw) and "config false" (ro) nodes 130 defined in the schema. 132 This document is organized to define the data model for each of the 133 above constructs in the sequence as listed above. 135 1.1. Base and Extended 137 Like LDP model, the configuration and state items are divided into 138 following two broad categories: 140 o Base 141 o Extended 143 The "base" category contains the basic and fundamental features that 144 are covered in mLDP base specification [RFC6388] alongwith few 145 significant extension like targeted mLDP [RFC7060], constituting the 146 minumum requirements for an mLDP deployment. Whereas, the "extended" 147 category contains all other non-base features (such as recursive FEC 148 support, protection etc.). All the items in a base category are 149 mandatory and hence no "if-feature" is allowed under the "base" 150 category. While "base" model support will suffice for small 151 deployments, large deployments will require not only the "base" 152 module support but also "extended" support for some selected and 153 required features. 155 The base and extended catogories are defined in their own modules 156 ietf-mpls-mldp and ietf-mpls-mldp-extended respectively, each of 157 which augments the LDP base model as defined under ietf-mpls-ldp 158 module [I-D.ietf-mpls-ldp-yang]. 160 Like LDP, mLDP "base" model configuration and state covers ipv4 161 address-family only, with ipv6 address-family related configuration 162 and state be covered in "extended" model. 164 2. Specification of Requirements 166 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 167 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 168 document are to be interpreted as described in [RFC2119]. 170 3. Overview 172 This document defines a new module named "ietf-mpls-mldp" for mLDP 173 YANG base data model that augments /rt:routing/rt:control-plane- 174 protocols/ldp:mpls-ldp defined in [I-D.ietf-mpls-ldp-yang]. The 175 document also defines "ietf-mpls-mldp-extended" module that models 176 the extended mLDP features under YANG. 178 Following diagram depicts high level mLDP yang tree organization and 179 hierarchy with respect to LDP: 181 +-- rw routing 182 +-- rw control-plane-protocols 183 +-- rw mpls-ldp 184 +-- rw some_ldp_container 185 | +-- rw mldp 186 | +-- rw ... // mldp base 187 | | +-- rw ... 188 | | +-- ro ... 189 | | +-- 190 | +-- rw mldp-ext:... // mldp extended 191 | | +-- rw ... 192 | | +-- ro ... 193 | | +-- 194 +-- ro some_ldp_container 195 +-- ro mldp 196 +-- ro ... // mldp base 197 | +-- ro ... 198 | +-- 199 +-- ro mldp-ext:... // mldp extended 200 +-- ro ... 201 +-- 203 notifications: 204 +--- n mpls-mldp-some_event 205 +--- n ... 207 Figure 1 209 3.1. Scope 211 Following are the main mLDP areas and features that are within the 212 scope of this model: 214 o Base: 216 * mLDP Base Specification [RFC6388] 218 * Targeted mLDP [RFC7060] 220 * Configured Leaf LSPs (manually provisioned) 222 o Extended: 224 * mLDP Recursive FEC [RFC6512] 226 * mLDP Fast-Reroute (FRR): 228 + Node Protection [RFC7715] 230 + Multicast-only 232 * In-band Signaling: 234 + mLDP In-band Signaling [RFC6826] 236 + mLDP In-band signaling in a VRF [RFC7246] 238 + mLDP In-band Signaling with Wildcards [RFC7438] 240 * Hub-and-Spoke Multipoint LSPs [RFC7140] 242 [Ed Note: Some of the topics in the above list are to be addressed/ 243 extended in a later revision of this document]. 245 3.2. FEC Types 247 The FEC for Multipoint LSP is presented as (root-address, opaque- 248 type). The following is the table for various type of MP opaque 249 values with their keys, as covered in the configuration and state 250 model: 252 +-------------------------+--------------------+------------+ 253 | Opaque Type | Key | RFC | 254 +-------------------------+--------------------+------------+ 255 | Generic LSP Identifier | LSP Id | [RFC6388] | 256 | Transit IPv4 Source | Source, Group | [RFC6826] | 257 | Transit IPv6 Source | Source, Group | [RFC6826] | 258 | Transit IPv4 Bidir | RP, Group | [RFC6826] | 259 | Transit IPv6 Bidir | RP, Group | [RFC6826] | 260 | Transit VPNv4 Source | Source, Group, RD | [RFC7246] | 261 | Transit VPNv6 Source | Source, Group, RD | [RFC7246] | 262 | Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] | 263 | Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] | 264 | Recursive Opaque | Root | [RFC6512] | 265 | VPN-Recursive Opaque | Root, RD | [RFC6512] | 266 +-------------------------+--------------------+------------+ 268 Table 1: MP Opaque Types and keys 270 It is to be noted that there are three basic types (LSP Id, Source, 271 and Bidir) and then there are variants (VPN, recursive, VPN- 272 recursive) on top of these basic types. 274 The "base" model includes only the "Generic LSP Identifier" opaque 275 type (for ipv4), while rest of the above types are covered by the 276 "extended" model. 278 4. Configuration 280 4.1. Configuration Hierarchy 282 Following is the high-level configuration organization for base and 283 extended mLDP: 285 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 286 +-- mpls-ldp 287 +-- global 288 +-- ... 289 +-- ... 290 +-- mldp 291 | +-- ... 292 | +-- ... 293 | +-- address-families 294 | +-- ipv4 295 | | +-- ... 296 | | +-- mldp-ext: ... 297 | | +-- ... 298 | | +-- configured-leaf-lsps 299 | | +-- ... 300 | | +-- ... 301 | | +-- mldp-ext: ... 302 | | +-- ... 303 | +-- mldp-ext: ipv6 304 | +-- ... 305 | +-- ... 306 | +-- configured-leaf-lsps 307 | +-- ... 308 | +-- ... 309 +-- capability 310 | +-- mldp 311 | +-- ... 312 | +-- mldp-ext: ... 313 | +-- ... 314 +-- forwarding-nexthop 315 +--- interfaces 316 +--- interface* [name] 317 +--- mldp-ext: ... 319 Figure 2 321 From above hierarchy, we can categorize mLDP configuration parameters 322 into two types: 324 o Parameters that are mLDP specific 326 o Parameters that leverage/extend LDP containers and parameters 328 Following subsections first describe mLDP specific configuration 329 parameters, followed by those leveraging LDP. It is to be noted that 330 these parameters are defined under their respective base or extended 331 module as per their categorization. 333 4.2. mldp global container 335 mldp container is an augmentation of LDP global container and holds 336 the configuration related to items that are mLDP specific. The main 337 items under this container are: 339 o mLDP enabling: To enable mLDP under a (VRF) routing instance, mldp 340 container is enabled under LDP. Given that mLDP requires LDP 341 signalling, it is not sensible to allow disabling LDP control 342 plane under a (VRF) network-instance while requiring mLDP to be 343 enabled for the same. However, if a user wants only to allow 344 signalling for multipoint FECs on an LDP/mLDP enabled VRF 345 instance, he/she can use LDP label-policies to disable unicast 346 FECs under the VRF. 348 o mLDP per-AF features: mLDP manages its own list of IP address- 349 families and the features enabled underneath. The per-AF mLDP 350 configuration items include: 352 * Multicast-only FRR: This enables Multicast-only FRR 353 functionality for a given AF under mLDP. The feature allows 354 route-policy to be configured for finer control/applicability 355 of the feature. 357 * Recursive FEC: The recursive-fec feature [RFC6512] can be 358 enabled per AF with a route-policy. 360 * Configured Leaf LSPs: To provision multipoint leaf LSP 361 manually, a container is provided per-AF under LDP. The 362 configuration is flexible and allows a user to specify MP LSPs 363 of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by 364 using either LSP-Id or (S,G). 366 Targeted mLDP feature specification [RFC7060] does not require any 367 mLDP specific configuration. It, however, requires LDP upstream- 368 label-assignment capability [RFC6389] to be enabled. 370 4.3. Leveraging LDP containers 372 mLDP configuration model leverages following configuration areas and 373 containers that are already defined for LDP: 375 o Capabilities: A new container "mldp" is defined that augments 376 LDP's capabilities container. This new container specifies any 377 mLDP specific capabilities and their parameters. Moreover, a new 378 "mldp" container is also added by augmenting LDP per-peer 379 capability container to override/control mLDP specific 380 capabilities on a peer level. In the scope of this document, the 381 most important capabilities related to mLDP are p2mp, mp2mp, make- 382 before-break, hub-and-spoke, and node-protection. 384 o Discovery and Peer: mLDP requires LDP discovery and peer 385 procedures to form mLDP peering. A peer is treated as mLDP peer 386 only when either P2MP or MP2MP capabilities have been successfully 387 exchanged with the peer. If a user wish to selectively enable or 388 disable mLDP with a LDP-enabled peer, he/she may use per-peer mLDP 389 capabilities configuration. [Ed Note: The option to control mLDP 390 enabling/disabling on a peer-list is being explored for future ]. 391 In most common deployments, it is desirable to disable mLDP 392 (capabilities announcements) on a targeted-only LDP peering, where 393 targeted-only peer is the one whose discovery sources are targeted 394 type only. In future revision, a configuration option for this 395 support will also be provided. 397 o Forwarding: By default, mLDP is allowed to select any of the LDP 398 enabled interface as a downstream interface towards a nexthop 399 (LDP/mLDP peer) for MP LSP programming. However, a configuration 400 option is provided to allow mLDP to exclude a given interface from 401 such a selection. Note that such a configuration option will be 402 useful only when there are more than one interfaces available for 403 the downstream selection. 405 4.4. Configuration Tree 407 4.4.1. Base 409 Following is a simplified graphical representation of the data model 410 for mLDP base configuration 412 module: ietf-mpls-mldp 413 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:capability: 414 +--rw mldp 415 +--rw p2mp 416 | +--rw enable? boolean 417 +--rw mp2mp 418 | +--rw enable? boolean 419 +--rw make-before-break 420 +--rw enable? boolean 421 +--rw switchover-delay? uint16 422 +--rw timeout? uint16 424 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 425 +--rw mldp 426 +--rw enable? boolean 427 +--rw address-families 428 +--rw ipv4 429 +--rw configured-leaf-lsps 430 +--rw opaque-type-lspid 431 +--rw fec-label* [root-address lsp-id] 432 +--rw root-address inet:ipv4-address 433 +--rw lsp-id uint32 434 +--rw multipoint-type? multipoint-type 436 Figure 3 438 4.4.2. Extended 440 Following is a simplified graphical representation of the data model 441 for mLDP extended configuration 443 module: ietf-mpls-mldp 444 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:capability: 445 +--rw mldp 446 +--rw mldp-ext:hub-and-spoke {capability-mldp-hsmp}? 447 | +--rw mldp-ext:enable? boolean 448 +--rw mldp-ext:node-protection {capability-mldp-node-protection}? 449 +--rw mldp-ext:plr? boolean 450 +--rw mldp-ext:merge-point 451 +--rw mldp-ext:enable? boolean 452 +--rw mldp-ext:targeted-session-teardown-delay? uint16 454 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 455 +--rw mldp 456 +--rw enable? boolean 457 +--rw address-families 458 +--rw ipv4 459 | +--rw configured-leaf-lsps 460 | | +--rw mldp-ext:opaque-type-transit 461 | | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 462 | | | +--rw mldp-ext:root-address inet:ipv4-address 463 | | | +--rw mldp-ext:source-address inet:ip-address 464 | | | +--rw mldp-ext:group-address inet:ip-address-no-zone 465 | | | +--rw mldp-ext:rd route-distinguisher 466 | | | +--rw mldp-ext:recur-root-address inet:ip-address 467 | | | +--rw mldp-ext:recur-rd route-distinguisher 468 | | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 469 | | +--rw mldp-ext:opaque-type-bidir 470 | | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] 471 | | +--rw mldp-ext:root-address inet:ipv4-address 472 | | +--rw mldp-ext:rp inet:ip-address 473 | | +--rw mldp-ext:group-address inet:ip-address-no-zone 474 | | +--rw mldp-ext:rd route-distinguisher 475 | | +--rw mldp-ext:recur-root-address inet:ip-address 476 | | +--rw mldp-ext:recur-rd route-distinguisher 477 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 478 | +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 479 | | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 480 | +--rw mldp-ext:recursive-fec 481 | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 482 +--rw mldp-ext:ipv6 483 +--rw mldp-ext:configured-leaf-lsps 484 | +--rw mldp-ext:opaque-type-lspid 485 | | +--rw mldp-ext:fec-label* [root-address lsp-id] 486 | | +--rw mldp-ext:root-address inet:ipv6-address 487 | | +--rw mldp-ext:lsp-id uint32 488 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 489 | | +--rw mldp-ext:recursive-fec* [recur-root-address recur-rd] 490 | | +--rw mldp-ext:recur-root-address inet:ip-address 491 | | +--rw mldp-ext:recur-rd route-distinguisher 492 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 493 | +--rw mldp-ext:opaque-type-transit 494 | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 495 | | +--rw mldp-ext:root-address inet:ipv6-address 496 | | +--rw mldp-ext:source-address inet:ip-address 497 | | +--rw mldp-ext:group-address inet:ip-address-no-zone 498 | | +--rw mldp-ext:rd route-distinguisher 499 | | +--rw mldp-ext:recur-root-address inet:ip-address 500 | | +--rw mldp-ext:recur-rd route-distinguisher 501 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 502 | +--rw mldp-ext:opaque-type-bidir 503 | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] 504 | +--rw mldp-ext:root-address inet:ipv6-address 505 | +--rw mldp-ext:rp inet:ip-address 506 | +--rw mldp-ext:group-address inet:ip-address-no-zone 507 | +--rw mldp-ext:rd route-distinguisher 508 | +--rw mldp-ext:recur-root-address inet:ip-address 509 | +--rw mldp-ext:recur-rd route-distinguisher 510 | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 511 +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 512 | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 513 +--rw mldp-ext:recursive-fec 514 +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 516 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability: 517 +--rw mldp {per-peer-capability}? 518 +--rw p2mp 519 | +--rw enable? boolean 520 +--rw mp2mp 521 | +--rw enable? boolean 522 +--rw make-before-break 523 +--rw enable? boolean 524 +--rw switchover-delay? uint16 525 +--rw timeout? uint16 527 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: 528 +--rw mldp-disable? boolean 530 Figure 4 532 5. Operational State 534 Operational state of mLDP can be queried and obtained from various 535 read-only mdlp "state" containers that augment ldp containers. 537 5.1. Base 539 Following is a simplified graphical representation of the data model 540 for mLDP base operational state: 542 module: ietf-mpls-mldp 543 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: 544 +--ro mldp 545 +--ro p2mp 546 | +--ro enable? boolean 547 +--ro mp2mp 548 | +--ro enable? boolean 549 +--ro make-before-break 550 +--ro enable? boolean 552 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 553 +--rw mldp 554 +--rw enable? boolean 555 +--rw address-families 556 +--rw ipv4 557 +--ro roots 558 +--ro root* [root-address] 559 +--ro root-address inet:ipv4-address 560 +--ro is-self? boolean 561 +--ro reachability* [address interface] 562 | +--ro address inet:ipv4-address 563 | +--ro interface if:interface-ref 564 | +--ro peer? -> ../../../../../../../../ldp:peers/peer/lsr-id 565 +--ro bindings 566 +--ro opaque-type-lspid 567 +--ro fec-label* [lsp-id] 568 +--ro lsp-id uint32 569 +--ro multipoint-type? multipoint-type 570 +--ro peer* [direction peer advertisement-type] 571 +--ro direction ldp:downstream-upstream 572 +--ro peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 573 +--ro advertisement-type ldp:advertised-received 574 +--ro label? rt-types:mpls-label 575 +--ro mbb-role? enumeration 576 +--ro mldp-ext:mofrr-role? mofrr-role 578 Figure 5 580 5.2. Extended 582 Following is a simplified graphical representation of the data model 583 for mLDP extended operational state: 585 module: ietf-mpls-mldp 587 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: 589 +--ro mldp 590 +--ro mldp-ext:hub-and-spoke 591 | +--ro mldp-ext:enable? boolean 592 +--ro mldp-ext:node-protection 593 +--ro mldp-ext:plr? boolean 594 +--ro mldp-ext:merge-point? boolean 596 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 597 +--rw mldp 598 +--rw enable? boolean 599 +--rw address-families 600 +--rw ipv4 601 | +--ro roots 602 | +--ro root* [root-address] 603 | +--ro root-address inet:ipv4-address 604 | +--ro bindings 605 | +--ro opaque-type-lspid 606 | | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] 607 | | +--ro mldp-ext:recur-root-address inet:ip-address 608 | | +--ro mldp-ext:recur-rd route-distinguisher 609 | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 610 | | +--ro mldp-ext:peer* [direction peer advertisement-type] 611 | | +--ro mldp-ext:direction ldp:downstream-upstream 612 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 613 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 614 | | +--ro mldp-ext:label? rt-types:mpls-label 615 | | +--ro mldp-ext:mbb-role? enumeration 616 | | +--ro mldp-ext:mofrr-role? mofrr-role 617 | +--ro mldp-ext:opaque-type-transit 618 | | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] 619 | | +--ro mldp-ext:source-address inet:ip-address 620 | | +--ro mldp-ext:group-address inet:ip-address-no-zone 621 | | +--ro mldp-ext:rd route-distinguisher 622 | | +--ro mldp-ext:recur-root-address inet:ip-address 623 | | +--ro mldp-ext:recur-rd route-distinguisher 624 | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 625 | | +--ro mldp-ext:peer* [direction peer advertisement-type] 626 | | +--ro mldp-ext:direction ldp:downstream-upstream 627 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 628 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 629 | | +--ro mldp-ext:label? rt-types:mpls-label 630 | | +--ro mldp-ext:mbb-role? enumeration 631 | | +--ro mldp-ext:mofrr-role? mofrr-role 632 | +--ro mldp-ext:opaque-type-bidir 633 | +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] 634 | +--ro mldp-ext:rp inet:ip-address 635 | +--ro mldp-ext:group-address inet:ip-address-no-zone 636 | +--ro mldp-ext:rd route-distinguisher 637 | +--ro mldp-ext:recur-root-address inet:ip-address 638 | +--ro mldp-ext:recur-rd route-distinguisher 639 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 640 | +--ro mldp-ext:peer* [direction peer advertisement-type] 641 | +--ro mldp-ext:direction ldp:downstream-upstream 642 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 643 | +--ro mldp-ext:advertisement-type ldp:advertised-received 644 | +--ro mldp-ext:label? rt-types:mpls-label 645 | +--ro mldp-ext:mbb-role? enumeration 646 | +--ro mldp-ext:mofrr-role? mofrr-role 647 +--rw mldp-ext:ipv6 648 +--ro mldp-ext:roots 649 +--ro mldp-ext:root* [root-address] 650 +--ro mldp-ext:root-address inet:ipv6-address 651 +--ro mldp-ext:is-self? boolean 652 +--ro mldp-ext:reachability* [address interface] 653 | +--ro mldp-ext:address inet:ipv6-address 654 | +--ro mldp-ext:interface if:interface-ref 655 | +--ro mldp-ext:peer? -> ../../../../../../../../ldp:peers/peer/lsr-id 656 +--ro mldp-ext:bindings 657 +--ro mldp-ext:opaque-type-lspid 658 | +--ro mldp-ext:fec-label* [lsp-id] 659 | +--ro mldp-ext:lsp-id uint32 660 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 661 | +--ro mldp-ext:peer* [direction peer advertisement-type] 662 | | +--ro mldp-ext:direction ldp:downstream-upstream 663 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 664 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 665 | | +--ro mldp-ext:label? rt-types:mpls-label 666 | | +--ro mldp-ext:mbb-role? enumeration 667 | | +--ro mldp-ext:mofrr-role? mofrr-role 668 | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] 669 | +--ro mldp-ext:recur-root-address inet:ip-address 670 | +--ro mldp-ext:recur-rd route-distinguisher 671 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 672 | +--ro mldp-ext:peer* [direction peer advertisement-type] 673 | +--ro mldp-ext:direction ldp:downstream-upstream 674 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 675 | +--ro mldp-ext:advertisement-type ldp:advertised-received 676 | +--ro mldp-ext:label? rt-types:mpls-label 677 | +--ro mldp-ext:mbb-role? enumeration 678 | +--ro mldp-ext:mofrr-role? mofrr-role 679 +--ro mldp-ext:opaque-type-transit 680 | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] 681 | +--ro mldp-ext:source-address inet:ip-address 682 | +--ro mldp-ext:group-address inet:ip-address-no-zone 683 | +--ro mldp-ext:rd route-distinguisher 684 | +--ro mldp-ext:recur-root-address inet:ip-address 685 | +--ro mldp-ext:recur-rd route-distinguisher 686 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 687 | +--ro mldp-ext:peer* [direction peer advertisement-type] 688 | +--ro mldp-ext:direction ldp:downstream-upstream 689 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 690 | +--ro mldp-ext:advertisement-type ldp:advertised-received 691 | +--ro mldp-ext:label? rt-types:mpls-label 692 | +--ro mldp-ext:mbb-role? enumeration 693 | +--ro mldp-ext:mofrr-role? mofrr-role 694 +--ro mldp-ext:opaque-type-bidir 695 +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] 696 +--ro mldp-ext:rp inet:ip-address 697 +--ro mldp-ext:group-address inet:ip-address-no-zone 698 +--ro mldp-ext:rd route-distinguisher 699 +--ro mldp-ext:recur-root-address inet:ip-address 700 +--ro mldp-ext:recur-rd route-distinguisher 701 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 702 +--ro mldp-ext:peer* [direction peer advertisement-type] 703 +--ro mldp-ext:direction ldp:downstream-upstream 704 +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 705 +--ro mldp-ext:advertisement-type ldp:advertised-received 706 +--ro mldp-ext:label? rt-types:mpls-label 707 +--ro mldp-ext:mbb-role? enumeration 708 +--ro mldp-ext:mofrr-role? mofrr-role 710 Figure 6 712 5.3. Derived states 714 Following are main areas for which mLDP operational derived state is 715 defined: 717 o Root 719 o Bindings (FEC-label) 721 o Capabilities 723 5.3.1. Root state 725 Root address is a fundamental construct for MP FEC bindings and LSPs. 726 The root state provides information on all the known roots in a given 727 address-familty, and their information on the root reachability (as 728 learnt from RIB). In case of multi-path reachability to a root, the 729 selection of upstream path is done on per-LSP basis at the time of 730 LSP setup. Similarly, when protection mechanisms like MBB or MoFRR 731 are in place, the path designation as active/standby or primary/ 732 backup is also done on per LSP basis. It is to be noted that a given 733 root can be shared amongst multiple P2MP and/or MP2MP LSPs. 734 Moreover, an LSP can be signaled to more than one root for RNR 735 purposes. 737 The following diagram illustrates a root database on a branch/transit 738 LSR: 740 root 203.0.113.1: 741 path1: 742 RIB: GigEthernet 1/0, 198.51.100.1; 743 LDP: peer 192.0.2.1:0 744 path2: 745 RIB: GigEthernet 2/0, 198.51.100.16; 746 LDP: peer 192.0.2.2:0 748 root 203.0.113.2: 749 path1: 750 RIB: 198.51.100.100; (NOTE: This is a recursive path) 751 LDP: peer 192.0.2.100:0 (NOTE: T-mLDP peer) 753 root . . . . 755 Figure 7 757 A root entry on a root LSR itself will be presented as follows: 759 root 203.0.113.10: 760 is-self 762 Figure 8 764 5.3.2. Bindings state 766 Binding state provides information on mLDP FEC-label bindings for 767 both P2MP and MP2MP FEC types. Like LDP, the FEC-label binding 768 derived state is presented in a FEC-centric view per address-family, 769 and provides information on both inbound (received) and outbound 770 (advertised) bindings. The FEC is presented as (root-address, 771 opaque-type-data) as described earlier in section Section 3.2, and 772 the direction (upstream or downstream) is picked with respect to root 773 reachability. In case of MBB or/and MoFRR, the role of a given peer 774 binding is also provided with respect to MBB (active or standby) or/ 775 and MoFRR (primary or backup). 777 Following captures a high level tree hierarchy for mLDP bindings 778 state: 780 +--rw mpls-ldp! 781 +--rw global 782 +--rw mldp 783 +--rw address-families 784 +--rw ipv4 (or ipv6) 785 +--ro state 786 +--ro roots 787 +--ro root* [root-address] 788 +--ro .... 789 +--ro bindings 790 +--ro opaque-type-xxx 791 | +--ro fec-label* [type-specific-key] 792 | +--ro some_key_1 ... 793 | +--ro some_key_2 ... 794 | +--ro multipoint-type? multipoint-type 795 | +--ro peer* [direction peer advertisement-type] 796 | | +--ro direction ldp:downstream-upstream 797 | | +--ro peer leafref 798 | | +--ro advertisement-type ldp:advertised-received 799 | | +--ro label? mpls:mpls-label 800 | | +--ro mbb-role? enumeration 801 | | +--ro mldp-ext:mofrr-role? mofrr-role 802 +--ro opaque-type-yyy 803 | +--ro fec-label* [type-specific-key] 804 | +--ro some_key_1 ... 805 ... 807 Figure 9 809 mLDP binding state is organized and presented per root address, and 810 hence the bindings container hang off a root node in the model. The 811 bindings state is made available for FECs pertaining to different 812 types of opaque types, with some state avaiable under "base" tree and 813 the rest under "extended". 815 In the above tree, the various opaque types alongwith their type 816 specific key(s) refer to the table Table 1 captured earlier in the 817 document. For example, if the opaque type is Generic LSP Identifier, 818 then the type-specific-key will be a uint32 LSP-Id key. Please see 819 the complete model for all other types. 821 It is important to take note of the following: 823 o The address-family ipv4/ipv4 applies to "root" address in the mLDP 824 binding tree. The other addresses (source, group, RP etc) do not 825 have to be of the same address family type as the root. 827 o The "recur-root-address" field applies to Recursive opaque type, 828 and (recur-root-address, recur-rd) fields applies to VPN-Recursive 829 opaque types as defined in [RFC6512] 831 o In case of a recursive FEC, the address-family of the recur-root- 832 address could be different than the address-family of the root 833 address of original encapsulated MP FEC 835 The following diagram illustrates the FEC-label binding information 836 structure for a P2MP (Transit IPv4 Source type) LSP on a branch/ 837 transit LSR: 839 FEC (root 203.0.113.1, S=198.51.100.1, G=224.1.1.1): 840 type: p2mp 841 upstream: 842 advertised: 843 peer 192.0.2.1:0, label 16000 (local) 844 downstream: 845 received: 846 peer 192.0.2.2:0, label 17000 (remote) 847 peer 192.0.2.3:0, label 18000 (remote) 849 Figure 10 851 The following diagram illustrates the FEC-label binding information 852 structure for a similar MP2MP LSP on a branch/transit LSR: 854 FEC (root 203.0.113.2, RP=198.51.100.2, G=224.1.1.1): 855 type: mp2mp 856 upstream: 857 advertised: 858 peer 192.0.2.1:0, label 16000 (local) 859 received: 860 peer 192.0.2.1:0, label 17000 (remote) 861 downstream: 862 advertised: 863 peer 192.0.2.2:0, label 16001 (local), MBB role=active 864 peer 192.0.2.3:0, label 16002 (local), MBB role=standby 865 received: 866 peer 192.0.2.2:0, label 17001 (remote) 867 peer 192.0.2.3:0, label 18001 (remote) 869 Figure 11 871 5.3.3. Capabilities state 873 Like LDP, mLDP capabilities state comprise two types of information: 875 o global: augments ldp:global/ldp:state/ldp:capability. 877 o per-peer: augments ldp:peers/ldp:peer/ldp:state/ldp:capability 879 6. Notifications 881 mLDP notification module consists of notification related to changes 882 in the operational state of an mLDP FEC. 884 6.1. Base 886 Following is a simplified graphical representation of the base data 887 model for mLDP notifications: 889 module: ietf-mpls-mldp 890 notifications: 891 +---n mpls-mldp-fec-event 892 +--ro event-type? ldp:oper-status-event-type 893 +--ro (opaque-type)? 894 +--:(opaque-type-lspid) 895 +--ro opaque-type-lspid 896 +--ro root-address? inet:ip-address 897 +--ro lsp-id? uint32 898 +--ro multipoint-type? multipoint-type 899 +--ro mldp-ext:recursive-fec 900 +--ro mldp-ext:recur-root-address? inet:ip-address 901 +--ro mldp-ext:recur-rd? route-distinguisher 902 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 904 Figure 12 906 6.2. Extended 908 Following is a simplified graphical representation of the extended 909 data model for mLDP notifications: 911 module: ietf-mpls-mldp 912 notifications: 913 +---n mpls-mldp-fec-event 914 +--ro event-type? ldp:oper-status-event-type 915 +--ro (opaque-type)? 916 +--:(mldp-ext:opaque-type-transit) 917 | +--ro mldp-ext:opaque-type-transit 918 | +--ro mldp-ext:root-address? inet:ip-address 919 | +--ro mldp-ext:source-address? inet:ip-address 920 | +--ro mldp-ext:group-address? inet:ip-address-no-zone 921 | +--ro mldp-ext:rd? route-distinguisher 922 | +--ro mldp-ext:recur-root-address? inet:ip-address 923 | +--ro mldp-ext:recur-rd? route-distinguisher 924 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 925 +--:(mldp-ext:opaque-type-bidir) 926 +--ro mldp-ext:opaque-type-bidir 927 +--ro mldp-ext:root-address? inet:ip-address 928 +--ro mldp-ext:rp? inet:ip-address 929 +--ro mldp-ext:group-address? inet:ip-address-no-zone 930 +--ro mldp-ext:rd? route-distinguisher 931 +--ro mldp-ext:recur-root-address? inet:ip-address 932 +--ro mldp-ext:recur-rd? route-distinguisher 933 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 935 Figure 13 937 7. Actions 939 Currently, no RPCs/actions are defined for mLDP. 941 8. Open Items 943 Following is a list of open items that are to be discussed and 944 addressed in future revisions of this document: 946 o Specify default values for configuration parameters 948 o Extend the "Configured Leaf LSPs" for various type of opaque-types 950 o Extend mLDP notifications for other types of opaque values as well 952 o Make MP LSP configuration and state model consistent 954 9. YANG Specification 956 Following is the actual YANG definition (module) for mLDP constructs 957 defined earlier in the document. 959 9.1. Base 961 file "ietf-mpls-mldp@2017-10-19.yang" 963 module ietf-mpls-mldp { 964 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp"; 965 prefix "mldp"; 967 import ietf-inet-types { 968 prefix "inet"; 969 } 971 import ietf-interfaces { 972 prefix "if"; 973 } 975 import ietf-mpls-ldp { 976 prefix "ldp"; 977 } 979 import ietf-routing { 980 prefix "rt"; 981 } 983 import ietf-routing-types { 984 prefix "rt-types"; 985 } 987 organization 988 "IETF MPLS Working Group"; 989 contact 990 "WG Web: 991 WG List: 993 WG Chair: Loa Andersson 994 996 WG Chair: Ross Callon 997 999 WG Chair: George Swallow 1000 1002 Editor: Kamran Raza 1003 1005 Editor: Rajiv Asati 1006 1008 Editor: Xufeng Liu 1009 1011 Editor: Santosh Esale 1012 1014 Editor: Xia Chen 1015 1017 Editor: Himanshu Shah 1018 "; 1020 description 1021 "This YANG module defines the essential components for the 1022 management of Multi-Protocol Label Switching (MPLS) Multipoint 1023 LDP (mLDP)."; 1025 revision 2017-10-19 { 1026 description 1027 "Initial revision."; 1028 reference 1029 "RFC XXXX: YANG Data Model for MPLS mLDP."; 1030 } 1032 /* 1033 * Typedefs 1034 */ 1035 typedef multipoint-type { 1036 type enumeration { 1037 enum p2mp { 1038 description "Point to multipoint."; 1039 } 1040 enum mp2mp { 1041 description "Multipoint to multipoint."; 1042 } 1043 } 1044 description 1045 "p2mp or mp2mp."; 1046 } 1047 /* 1048 * Groupings 1049 */ 1051 grouping mldp-capabilities { 1052 description 1053 "mLDP capabilities."; 1054 container p2mp { 1055 description 1056 "Configure point-to-multipoint capability."; 1057 leaf enable { 1058 type boolean; 1059 description 1060 "Enable point-to-multipoint."; 1061 } 1062 } 1063 container mp2mp { 1064 description 1065 "Configure multipoint-to-multipoint capability."; 1066 leaf enable { 1067 type boolean; 1068 description 1069 "Enable multipoint-to-multipoint."; 1070 } 1071 } 1072 container make-before-break { 1073 description 1074 "Configure make-before-break capability."; 1075 leaf enable { 1076 type boolean; 1077 description 1078 "Enable make-before-break."; 1079 } 1080 leaf switchover-delay { 1081 type uint16; 1082 units seconds; 1083 description 1084 "Switchover delay in seconds."; 1085 } 1086 leaf timeout { 1087 type uint16; 1088 units seconds; 1089 description 1090 "Timeout in seconds."; 1091 } 1092 } 1093 } // mldp-capabilities 1094 grouping mldp-fec-event { 1095 description 1096 "A mLDP FEC event."; 1097 choice opaque-type { 1098 description 1099 "The type of opaque value element."; 1100 case opaque-type-lspid { 1101 container opaque-type-lspid { 1102 description 1103 "The type of opaque value element is 1104 the generic LSP identifier"; 1105 reference 1106 "RFC6388: Label Distribution Protocol 1107 Extensions for Point-to-Multipoint and 1108 Multipoint-to-Multipoint Label Switched 1109 Paths."; 1110 leaf root-address { 1111 type inet:ip-address; 1112 description 1113 "Root address."; 1114 } 1115 leaf lsp-id { 1116 type uint32; 1117 description "ID to identify the LSP."; 1118 } 1119 leaf multipoint-type { 1120 type multipoint-type; 1121 description 1122 "The type of mutipoint, p2mp or mp2mp."; 1123 } 1124 } // container opaque-type-lspid 1125 } 1126 } 1127 } // mldp-fec-event 1129 grouping mldp-binding-label-peer-state-attributes { 1130 description 1131 "mLDP label binding per peer attributes."; 1132 leaf direction { 1133 type ldp:downstream-upstream; 1134 description 1135 "Downstream or upstream."; 1136 } 1137 leaf peer { 1138 type leafref { 1139 path 1140 "/rt:routing/rt:control-plane-protocols/" 1141 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:lsr-id"; 1143 } 1144 description 1145 "LDP peer from which this binding is received, 1146 or to which this binding is advertised."; 1147 } 1148 leaf advertisement-type { 1149 type ldp:advertised-received; 1150 description 1151 "Advertised or received."; 1152 } 1153 leaf label { 1154 type rt-types:mpls-label; 1155 description 1156 "Advertised (outbound) or received (inbound) label."; 1157 } 1158 leaf mbb-role { 1159 when "../direction = 'upstream'" { 1160 description 1161 "For upstream."; 1162 } 1163 type enumeration { 1164 enum none { 1165 description "MBB is not enabled."; 1166 } 1167 enum active { 1168 description "This LSP is active."; 1169 } 1170 enum inactive { 1171 description "This LSP is inactive."; 1172 } 1173 } 1174 description 1175 "The MBB status of this LSP."; 1176 } 1177 } // mldp-binding-label-peer-state-attributes 1179 grouping mldp-binding-label-state-attributes { 1180 description 1181 "mLDP label binding attributes."; 1182 list peer { 1183 key "direction peer advertisement-type"; 1184 description 1185 "List of advertised and received peers."; 1186 uses mldp-binding-label-peer-state-attributes; 1187 } // peer 1188 } // mldp-binding-label-state-attributes 1190 /* 1191 * Configuration data and operational state data nodes 1192 */ 1193 augment "/rt:routing/rt:control-plane-protocols/" 1194 + "ldp:mpls-ldp/ldp:global/ldp:capability" { 1195 description "Augmentation for MLDP global capability."; 1196 container mldp { 1197 description 1198 "Multipoint capabilities."; 1199 uses mldp-capabilities; 1200 } 1201 } 1203 /* 1204 * Operational state data nodes 1205 */ 1206 augment "/rt:routing/rt:control-plane-protocols/" 1207 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" 1208 + "ldp:capability" { 1209 description 1210 "Augmentation for MLDP received peer state capability."; 1211 container mldp { 1212 description 1213 "Multipoint capabilities."; 1215 container p2mp { 1216 description 1217 "Configure point-to-multipoint capability."; 1218 leaf enable { 1219 type boolean; 1220 description 1221 "Enable point-to-multipoint."; 1222 } 1223 } 1224 container mp2mp { 1225 description 1226 "Configure multipoint-to-multipoint capability."; 1227 leaf enable { 1228 type boolean; 1229 description 1230 "Enable multipoint-to-multipoint."; 1231 } 1232 } 1233 container make-before-break { 1234 description 1235 "Configure make-before-break capability."; 1236 leaf enable { 1237 type boolean; 1238 description 1239 "Enable make-before-break."; 1240 } 1241 } 1242 } // mldp 1243 } 1245 /* 1246 * Global augmentation 1247 */ 1248 augment "/rt:routing/rt:control-plane-protocols/" 1249 + "ldp:mpls-ldp/ldp:global" { 1250 description "MLDP global augmentation."; 1251 container mldp { 1252 description 1253 "mLDP attributes at per instance level. Defining 1254 attributes here does not enable any MP capabilities. 1255 MP capabilities need to be explicitly enabled under 1256 container capability."; 1258 leaf enable { 1259 type boolean; 1260 description 1261 "Enable mLDP."; 1262 } 1264 container address-families { 1265 description 1266 "Per-af params."; 1268 container ipv4 { 1269 description 1270 "IPv4 information."; 1271 container roots { 1272 config false; 1273 description 1274 "IPv4 multicast LSP roots."; 1275 list root { 1276 key "root-address"; 1277 description 1278 "List of roots for configured multicast LSPs."; 1280 leaf root-address { 1281 type inet:ipv4-address; 1282 description 1283 "Root address."; 1284 } 1286 leaf is-self { 1287 type boolean; 1288 description 1289 "This is the root."; 1290 } 1292 list reachability { 1293 key "address interface"; 1294 description 1295 "A next hop for reachability to root, 1296 as a RIB view."; 1297 leaf address { 1298 type inet:ipv4-address; 1299 description 1300 "The next hop address to reach root."; 1301 } 1302 leaf interface { 1303 type if:interface-ref; 1304 description 1305 "Interface connecting to next-hop."; 1306 } 1307 leaf peer { 1308 type leafref { 1309 path 1310 "../../../../../../../../ldp:peers/" 1311 + "ldp:peer/ldp:lsr-id"; 1312 } 1313 description 1314 "LDP peer from which this next hop can be 1315 reached."; 1316 } 1317 } 1319 container bindings { 1320 description 1321 "mLDP FEC to label bindings."; 1322 container opaque-type-lspid { 1323 description 1324 "The type of opaque value element is 1325 the generic LSP identifier"; 1326 reference 1327 "RFC6388: Label Distribution Protocol 1328 Extensions for Point-to-Multipoint and 1329 Multipoint-to-Multipoint Label Switched 1330 Paths."; 1331 list fec-label { 1332 key 1333 "lsp-id"; 1334 description 1335 "List of FEC to label bindings."; 1336 leaf lsp-id { 1337 type uint32; 1338 description "ID to identify the LSP."; 1339 } 1340 leaf multipoint-type { 1341 type multipoint-type; 1342 description 1343 "The type of mutipoint, p2mp or mp2mp."; 1344 } 1345 uses mldp-binding-label-state-attributes; 1346 } // fec-label 1347 } // opaque-type-lspid 1348 } // bindings 1349 } // list root 1350 } // roots 1352 container configured-leaf-lsps { 1353 description 1354 "Configured multicast LSPs."; 1355 container opaque-type-lspid { 1356 description 1357 "The type of opaque value element is 1358 the generic LSP identifier"; 1359 reference 1360 "RFC6388: Label Distribution Protocol 1361 Extensions for Point-to-Multipoint and 1362 Multipoint-to-Multipoint Label Switched 1363 Paths."; 1364 list fec-label { 1365 key 1366 "root-address lsp-id"; 1367 description 1368 "List of FEC to label bindings."; 1369 leaf root-address { 1370 type inet:ipv4-address; 1371 description 1372 "Root address."; 1373 } 1374 leaf lsp-id { 1375 type uint32; 1376 description "ID to identify the LSP."; 1377 } 1378 leaf multipoint-type { 1379 type multipoint-type; 1380 description 1381 "The type of mutipoint, p2mp or mp2mp."; 1382 } 1384 } // fec-label 1385 } // opaque-type-lspid 1386 } // configured-leaf-lsps 1387 } // ipv4 1388 } // list address-family 1389 } // mldp 1390 } 1392 /* 1393 * Notifications 1394 */ 1395 notification mpls-mldp-fec-event { 1396 description 1397 "Notification event for a change of FEC status."; 1398 leaf event-type { 1399 type ldp:oper-status-event-type; 1400 description "Event type."; 1401 } 1402 uses mldp-fec-event; 1403 } 1404 } 1406 1408 Figure 14 1410 9.2. Extended 1412 file "ietf-mpls-mldp-extended@2017-10-19.yang" 1414 module ietf-mpls-mldp-extended { 1415 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended"; 1416 prefix "mldp-ext"; 1418 import ietf-inet-types { 1419 prefix "inet"; 1420 } 1422 import ietf-interfaces { 1423 prefix "if"; 1424 } 1426 import ietf-routing { 1427 prefix "rt"; 1428 } 1429 import ietf-mpls-ldp { 1430 prefix "ldp"; 1431 } 1433 import ietf-mpls-ldp-extended { 1434 prefix "ldp-ext"; 1435 } 1437 import ietf-mpls-mldp { 1438 prefix "mldp"; 1439 } 1441 organization 1442 "IETF MPLS Working Group"; 1443 contact 1444 "WG Web: 1445 WG List: 1447 WG Chair: Loa Andersson 1448 1450 WG Chair: Ross Callon 1451 1453 WG Chair: George Swallow 1454 1456 Editor: Kamran Raza 1457 1459 Editor: Rajiv Asati 1460 1462 Editor: Xufeng Liu 1463 1465 Editor: Santosh Esale 1466 1468 Editor: Xia Chen 1469 1471 Editor: Himanshu Shah 1472 "; 1474 description 1475 "This YANG module defines the essential components for the 1476 management of Multi-Protocol Label Switching (MPLS) Multipoint 1477 LDP (mLDP)."; 1479 revision 2017-10-19 { 1480 description 1481 "Initial revision."; 1482 reference 1483 "RFC XXXX: YANG Data Model for MPLS mLDP."; 1484 } 1486 /* 1487 * Features 1488 */ 1489 feature capability-mldp-hsmp { 1490 description 1491 "This feature indicates that the system allows to configure 1492 mLDP hub-and-spoke-multipoint capability."; 1493 } 1495 feature capability-mldp-node-protection { 1496 description 1497 "This feature indicates that the system allows to configure 1498 mLDP node-protection capability."; 1499 } 1501 feature mldp-mofrr { 1502 description 1503 "This feature indicates that the system supports mLDP 1504 Multicast only FRR (MoFRR)."; 1505 } 1507 feature per-peer-capability { 1508 description 1509 "This feature indicates that the system allows to configure 1510 mLDP capabilities at the per peer level."; 1511 } 1513 /* 1514 * Typedefs 1515 */ 1516 typedef route-distinguisher { 1517 type string { 1518 } 1519 description 1520 "Type definition for route distinguisher."; 1521 reference 1522 "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; 1523 } 1524 typedef mofrr-role { 1525 type enumeration { 1526 enum none { 1527 description "MOFRR is not enabled."; 1528 } 1529 enum primary { 1530 description "This LSP is primary."; 1531 } 1532 enum backup { 1533 description "This LSP is backup."; 1534 } 1535 } 1536 description 1537 "This type represents the MOFRR (Multicast only FRR) role 1538 status of a LSP."; 1539 } 1541 /* 1542 * Groupings 1543 */ 1544 grouping mldp-ext-binding-label-state-attributes { 1545 description 1546 "mLDP label binding attributes."; 1548 list peer { 1549 key "direction peer advertisement-type"; 1550 description 1551 "List of advertised and received peers."; 1552 uses mldp:mldp-binding-label-peer-state-attributes; 1554 leaf mofrr-role { 1555 when "../direction = 'upstream'" { 1556 description 1557 "For upstream."; 1558 } 1559 type mofrr-role; 1560 description 1561 "The MOFRR status of this LSP."; 1562 } 1563 } // peer 1564 } // mldp-ext-binding-label-state-attributes 1566 grouping mldp-ext-capabilities { 1567 description 1568 "mLDP extended capabilities."; 1569 container hub-and-spoke { 1570 if-feature capability-mldp-hsmp; 1571 description 1572 "Configure hub-and-spoke-multipoint capability."; 1573 reference 1574 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1575 Label Switched Path"; 1576 leaf enable { 1577 type boolean; 1578 description 1579 "Enable hub-and-spoke-multipoint."; 1580 } 1581 } 1582 container node-protection { 1583 if-feature capability-mldp-node-protection; 1584 description 1585 "Configure node-protection capability."; 1586 reference 1587 "RFC7715: mLDP Node Protection."; 1588 leaf plr { 1589 type boolean; 1590 description 1591 "Point of Local Repair capable for MP LSP node 1592 protection."; 1593 } 1594 container merge-point { 1595 description 1596 "Merge Point capable for MP LSP node protection."; 1597 leaf enable { 1598 type boolean; 1599 description 1600 "Enable merge point capability."; 1601 } 1602 leaf targeted-session-teardown-delay { 1603 type uint16; 1604 units seconds; 1605 description 1606 "Targeted session teardown delay."; 1607 } 1608 } // merge-point 1609 } 1610 } // mldp-ext-capabilities 1612 grouping mldp-ipv6-configured-lsp-roots { 1613 description 1614 "mLDP IPv6 roots containers."; 1616 container roots { 1617 description 1618 "Configured IPv6 multicast LSPs."; 1620 list root { 1621 key "root-address"; 1622 description 1623 "List of roots for configured multicast LSPs."; 1625 leaf root-address { 1626 type inet:ipv6-address; 1627 description 1628 "Root address."; 1629 } 1631 choice lsp-key-type { 1632 description 1633 "LSP ID based or source-group based ."; 1634 case lsp-id { 1635 container opaque-type-lspid { 1636 description 1637 "The type of opaque value element is 1638 the generic LSP identifier"; 1639 list lsp { 1640 key "lsp-id"; 1641 description 1642 "List of LSPs."; 1643 leaf lsp-id { 1644 type uint16; 1645 description "ID to identify the LSP."; 1646 } 1647 } // list lsp 1648 } // opaque-type-lspid 1649 } // case lsp-id 1651 case source-group { 1652 container opaque-type-transit { 1653 description 1654 "The type of opaque value element is the transit IPv6 1655 source."; 1656 list lsp { 1657 key "source-address group-address"; 1658 description 1659 "List of LSPs."; 1660 leaf source-address { 1661 type inet:ipv6-address; 1662 description 1663 "Source address."; 1664 } 1665 leaf group-address { 1666 type inet:ipv6-address-no-zone; 1667 description 1668 "Group address."; 1669 } 1670 } 1671 } 1672 } // case source-group 1673 } // choice lsp-key-type 1674 } // list root 1675 } // roots 1676 } // mldp-ipv6-configured-lsp-roots 1678 grouping mldp-ext-per-af-config-attibutes { 1679 description 1680 "mLDP per address family configuration attibutes."; 1681 container multicast-only-frr { 1682 if-feature mldp-mofrr; 1683 description 1684 "Multicast only FRR (MoFRR) policy."; 1685 leaf prefix-list { 1686 type ldp-ext:prefix-list-ref; 1687 description 1688 "Enables MoFRR for the specified access list."; 1689 } 1690 } // multicast-only-frr 1691 container recursive-fec { 1692 description 1693 "Recursive FEC policy."; 1694 leaf prefix-list { 1695 type ldp-ext:prefix-list-ref; 1696 description 1697 "Enables recursive FEC for the specified access list."; 1698 } 1699 } // recursive-for 1700 } // mldp-ext-per-af-config-attibutes 1702 grouping recursive-fec-attibutes { 1703 description 1704 "mLDP recursive FEC attibutes."; 1705 leaf recur-root-address { 1706 type inet:ip-address; 1707 description 1708 "Recursive root address."; 1709 reference 1710 "RFC6512: Using Multipoint LDP When the 1711 Backbone Has No Route to the Root"; 1712 } 1713 leaf recur-rd { 1714 type route-distinguisher; 1715 description 1716 "Route Distinguisher in the VPN-Recursive 1717 Opaque Value."; 1718 reference 1719 "RFC6512: Using Multipoint LDP When the 1720 Backbone Has No Route to the Root"; 1721 } 1722 leaf multipoint-type { 1723 type mldp:multipoint-type; 1724 description 1725 "The type of mutipoint, p2mp or mp2mp."; 1726 } 1727 } // recursive-fec-attibutes 1729 /* 1730 * Configuration data and operational state data nodes 1731 */ 1732 // Global capability 1733 augment "/rt:routing/rt:control-plane-protocols/" 1734 + "ldp:mpls-ldp/ldp:global/ldp:capability/mldp:mldp" { 1735 description "Augmentation for MLDP global capability."; 1737 uses mldp-ext-capabilities; 1738 } 1740 // Peer capability 1741 augment "/rt:routing/rt:control-plane-protocols/" 1742 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability" { 1743 description "Augmentation for MLDP peer capability."; 1744 container mldp { 1745 if-feature per-peer-capability; 1746 description 1747 "mLDP capabilities."; 1748 uses mldp:mldp-capabilities; 1749 } 1750 } 1752 // IPv4 config 1753 augment "/rt:routing/rt:control-plane-protocols/" 1754 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1755 + "mldp:ipv4" { 1756 description "Augmentation for MLDP IPv4 configuration."; 1757 uses mldp-ext-per-af-config-attibutes; 1758 } 1760 // IPv4 configured-leaf-lsps config 1761 augment "/rt:routing/rt:control-plane-protocols/" 1762 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1763 + "mldp:ipv4/mldp:configured-leaf-lsps/mldp:opaque-type-lspid/" 1764 + "mldp:fec-label" { 1765 description 1766 "Augmentation for MLDP IPv4 configured-leaf-lsps 1767 configuration for opaque-type-lspid."; 1768 list recursive-fec { 1769 key 1770 "recur-root-address recur-rd"; 1771 description 1772 "List of recursive opaque values."; 1773 uses recursive-fec-attibutes; 1774 } // fec-label 1775 } 1777 augment "/rt:routing/rt:control-plane-protocols/" 1778 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1779 + "mldp:ipv4/mldp:configured-leaf-lsps" { 1780 description 1781 "Augmentation for MLDP IPv4 configured-leaf-lsps 1782 configuration."; 1784 container opaque-type-transit { 1785 description 1786 "The type of opaque value element is the transit IPv4 1787 source."; 1788 reference 1789 "RFC6826: Multipoint LDP In-Band Signaling for 1790 Point-to-Multipoint and 1791 Multipoint-to-Multipoint Label Switched Paths."; 1792 list fec-label { 1793 key 1794 "root-address source-address group-address " 1795 + "rd recur-root-address recur-rd"; 1796 description 1797 "List of FEC to label bindings."; 1798 leaf root-address { 1799 type inet:ipv4-address; 1800 description 1801 "Root address."; 1802 } 1803 leaf source-address { 1804 type inet:ip-address; 1805 description 1806 "Source address."; 1807 } 1808 leaf group-address { 1809 type inet:ip-address-no-zone; 1810 description 1811 "Group address."; 1812 } 1813 leaf rd { 1814 type route-distinguisher; 1815 description 1816 "Route Distinguisher."; 1817 reference 1818 "RFC7246: Multipoint Label Distribution 1819 Protocol In-Band Signaling in a Virtual 1820 Routing and Forwarding (VRF) Table 1821 Context."; 1822 } 1823 uses recursive-fec-attibutes; 1824 } // fec-label 1825 } // opaque-type-transit 1827 container opaque-type-bidir { 1828 description 1829 "The type of opaque value element is 1830 the generic LSP identifier"; 1831 reference 1832 "RFC6826: Multipoint LDP In-Band Signaling for 1833 Point-to-Multipoint and 1834 Multipoint-to-Multipoint Label Switched 1835 Paths."; 1836 list fec-label { 1837 key 1838 "root-address rp group-address rd recur-root-address " 1839 + "recur-rd"; 1840 description 1841 "List of FEC to label bindings."; 1842 leaf root-address { 1843 type inet:ipv4-address; 1844 description 1845 "Root address."; 1846 } 1847 leaf rp { 1848 type inet:ip-address; 1849 description 1850 "RP address."; 1851 } 1852 leaf group-address { 1853 type inet:ip-address-no-zone; 1854 description 1855 "Group address."; 1856 } 1857 leaf rd { 1858 type route-distinguisher; 1859 description 1860 "Route Distinguisher."; 1861 reference 1862 "RFC7246: Multipoint Label Distribution 1863 Protocol In-Band Signaling in a Virtual 1864 Routing and Forwarding (VRF) Table 1865 Context."; 1866 } 1867 uses recursive-fec-attibutes; 1868 } // fec-label 1869 } // opaque-type-bidir 1870 } 1872 // IPv6 config 1873 augment "/rt:routing/rt:control-plane-protocols/" 1874 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1875 + "ipv6" { 1876 description "Augmentation for MLDP IPv4 configuration."; 1877 uses mldp-ext-per-af-config-attibutes; 1878 } 1880 // Global forwarding-nexthop 1881 augment "/rt:routing/rt:control-plane-protocols/" 1882 + "ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/" 1883 + "ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family" { 1884 description 1885 "Augmentation for MLDP nexthop forwarding interface."; 1886 leaf mldp-disable { 1887 type boolean; 1888 description 1889 "Disable mLDP forwarding on the interface."; 1890 } 1891 } 1893 /* 1894 * Operational state data nodes 1895 */ 1896 // IPv4 state for per peer bindings 1897 augment "/rt:routing/rt:control-plane-protocols/" 1898 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1899 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" 1900 + "mldp:opaque-type-lspid/mldp:fec-label/mldp:peer" { 1901 description "Augmentation for MLDP IPv4 state."; 1903 leaf mofrr-role { 1904 when "../mldp:direction = 'upstream'" { 1905 description 1906 "For upstream."; 1908 } 1909 type mofrr-role; 1910 description 1911 "The MOFRR status of this LSP."; 1912 } 1913 } 1915 // Peer capability state 1916 augment "/rt:routing/rt:control-plane-protocols/" 1917 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" 1918 + "ldp:capability/mldp:mldp" { 1919 description 1920 "Augmentation for MLDP received peer state capability."; 1921 container hub-and-spoke { 1922 description 1923 "Configure hub-and-spoke-multipoint capability."; 1924 reference 1925 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1926 Label Switched Path"; 1927 leaf enable { 1928 type boolean; 1929 description 1930 "Enable hub-and-spoke-multipoint."; 1931 } 1932 } 1933 container node-protection { 1934 description 1935 "Configure node-protection capability."; 1936 reference 1937 "RFC7715: mLDP Node Protection."; 1938 leaf plr { 1939 type boolean; 1940 description 1941 "Point of Local Repair capable for MP LSP node 1942 protection."; 1943 } 1944 leaf merge-point { 1945 type boolean; 1946 description 1947 "Merge Point capable for MP LSP node protection."; 1948 } // merge-point 1949 } // node-protection 1950 } 1952 // IPv4 bindings state 1953 augment "/rt:routing/rt:control-plane-protocols/" 1954 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1955 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings" { 1956 description "Augmentation for MLDP IPv4 bindings."; 1957 container opaque-type-transit { 1958 description 1959 "The type of opaque value element is the transit IPv4 1960 source."; 1961 reference 1962 "RFC6826: Multipoint LDP In-Band Signaling for 1963 Point-to-Multipoint and 1964 Multipoint-to-Multipoint Label Switched Paths."; 1965 list fec-label { 1966 key 1967 "source-address group-address " 1968 + "rd recur-root-address recur-rd"; 1969 description 1970 "List of FEC to label bindings."; 1971 leaf source-address { 1972 type inet:ip-address; 1973 description 1974 "Source address."; 1975 } 1976 leaf group-address { 1977 type inet:ip-address-no-zone; 1978 description 1979 "Group address."; 1980 } 1981 leaf rd { 1982 type route-distinguisher; 1983 description 1984 "Route Distinguisher."; 1985 reference 1986 "RFC7246: Multipoint Label Distribution 1987 Protocol In-Band Signaling in a Virtual 1988 Routing and Forwarding (VRF) Table 1989 Context."; 1990 } 1991 uses recursive-fec-attibutes; 1992 uses mldp-ext-binding-label-state-attributes; 1993 } // fec-label 1994 } // opaque-type-transit 1996 container opaque-type-bidir { 1997 description 1998 "The type of opaque value element is 1999 the generic LSP identifier"; 2000 reference 2001 "RFC6826: Multipoint LDP In-Band Signaling for 2002 Point-to-Multipoint and 2003 Multipoint-to-Multipoint Label Switched 2004 Paths."; 2005 list fec-label { 2006 key 2007 "rp group-address rd recur-root-address recur-rd"; 2008 description 2009 "List of FEC to label bindings."; 2010 leaf rp { 2011 type inet:ip-address; 2012 description 2013 "RP address."; 2014 } 2015 leaf group-address { 2016 type inet:ip-address-no-zone; 2017 description 2018 "Group address."; 2019 } 2020 leaf rd { 2021 type route-distinguisher; 2022 description 2023 "Route Distinguisher."; 2024 reference 2025 "RFC7246: Multipoint Label Distribution 2026 Protocol In-Band Signaling in a Virtual 2027 Routing and Forwarding (VRF) Table 2028 Context."; 2029 } 2030 uses recursive-fec-attibutes; 2031 uses mldp-ext-binding-label-state-attributes; 2032 } // fec-label 2033 } // opaque-type-bidir 2034 } 2036 // IPv6 bindings state 2037 augment "/rt:routing/rt:control-plane-protocols/" 2038 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2039 + "ipv6/roots/root/bindings" { 2040 description "Augmentation for MLDP IPv6 bindings."; 2041 container opaque-type-transit { 2042 config false; 2043 description 2044 "The type of opaque value element is the transit IPv6 2045 source."; 2046 reference 2047 "RFC6826: Multipoint LDP In-Band Signaling for 2048 Point-to-Multipoint and 2049 Multipoint-to-Multipoint Label Switched 2050 Paths."; 2051 list fec-label { 2052 key 2053 "source-address group-address " 2054 + "rd recur-root-address recur-rd"; 2055 description 2056 "List of FEC to label bindings."; 2057 leaf source-address { 2058 type inet:ip-address; 2059 description 2060 "Source address."; 2061 } 2062 leaf group-address { 2063 type inet:ip-address-no-zone; 2064 description 2065 "Group address."; 2066 } 2067 leaf rd { 2068 type route-distinguisher; 2069 description 2070 "Route Distinguisher."; 2071 reference 2072 "RFC7246: Multipoint Label Distribution 2073 Protocol In-Band Signaling in a Virtual 2074 Routing and Forwarding (VRF) Table 2075 Context."; 2076 } 2077 uses recursive-fec-attibutes; 2078 uses mldp-ext-binding-label-state-attributes; 2079 } // fec-label 2080 } // opaque-type-transit 2082 container opaque-type-bidir { 2083 config false; 2084 description 2085 "The type of opaque value element is 2086 the generic LSP identifier"; 2087 reference 2088 "RFC6826: Multipoint LDP In-Band Signaling for 2089 Point-to-Multipoint and 2090 Multipoint-to-Multipoint Label Switched 2091 Paths."; 2092 list fec-label { 2093 key 2094 "rp group-address rd recur-root-address recur-rd"; 2095 description 2096 "List of FEC to label bindings."; 2097 leaf rp { 2098 type inet:ip-address; 2099 description 2100 "RP address."; 2101 } 2102 leaf group-address { 2103 type inet:ip-address-no-zone; 2104 description 2105 "Group address."; 2106 } 2107 leaf rd { 2108 type route-distinguisher; 2109 description 2110 "Route Distinguisher."; 2111 reference 2112 "RFC7246: Multipoint Label Distribution 2113 Protocol In-Band Signaling in a Virtual 2114 Routing and Forwarding (VRF) Table 2115 Context."; 2116 } 2117 uses recursive-fec-attibutes; 2118 uses mldp-ext-binding-label-state-attributes; 2119 } // fec-label 2120 } // opaque-type-bidir 2121 } 2123 // IPv4 bindings opaque-type-lspid state 2124 augment "/rt:routing/rt:control-plane-protocols/" 2125 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2126 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" 2127 + "mldp:opaque-type-lspid/mldp:fec-label" { 2128 description 2129 "Augmentation for MLDP IPv4 bindings with opaque type LSP ID."; 2130 list recursive-fec { 2131 key 2132 "recur-root-address recur-rd"; 2133 description 2134 "List of recursive opaque values."; 2135 uses recursive-fec-attibutes; 2136 uses mldp-ext-binding-label-state-attributes; 2137 } // fec-label 2138 } 2140 // IPv6 bindings opaque-type-lspid state 2141 augment "/rt:routing/rt:control-plane-protocols/" 2142 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2143 + "ipv6/roots/root/bindings/opaque-type-lspid/fec-label" { 2144 description 2145 "Augmentation for MLDP IPv6 bindings with opaque type LSP ID."; 2146 list recursive-fec { 2147 key "recur-root-address recur-rd"; 2148 config false; 2149 description 2150 "List of recursive opaque values."; 2151 uses recursive-fec-attibutes; 2152 uses mldp-ext-binding-label-state-attributes; 2153 } // fec-label 2154 } 2156 /* 2157 * Per AF augmentation 2158 */ 2159 // IPv6 augmentation 2160 augment "/rt:routing/rt:control-plane-protocols/" 2161 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families" { 2162 description "Augmentation for MLDP IPv6 address family."; 2163 container ipv6 { 2164 description 2165 "IPv6 information."; 2167 container roots { 2168 config false; 2169 description 2170 "IPv6 multicast LSP roots."; 2171 list root { 2172 key "root-address"; 2173 description 2174 "List of roots for configured multicast LSPs."; 2176 leaf root-address { 2177 type inet:ipv6-address; 2178 description 2179 "Root address."; 2180 } 2182 leaf is-self { 2183 type boolean; 2184 description 2185 "This is the root."; 2186 } 2188 list reachability { 2189 key "address interface"; 2190 description 2191 "A next hop for reachability to root, 2192 as a RIB view."; 2193 leaf address { 2194 type inet:ipv6-address; 2195 description 2196 "The next hop address to reach root."; 2197 } 2198 leaf interface { 2199 type if:interface-ref; 2200 description 2201 "Interface connecting to next-hop."; 2202 } 2203 leaf peer { 2204 type leafref { 2205 path 2206 "../../../../../../../../ldp:peers/" 2207 + "ldp:peer/ldp:lsr-id"; 2208 } 2209 description 2210 "LDP peer from which this next hop can be 2211 reached."; 2212 } 2213 } 2215 container bindings { 2216 description 2217 "mLDP FEC to label bindings."; 2218 container opaque-type-lspid { 2219 description 2220 "The type of opaque value element is 2221 the generic LSP identifier"; 2222 reference 2223 "RFC6388: Label Distribution Protocol 2224 Extensions for Point-to-Multipoint and 2225 Multipoint-to-Multipoint Label Switched 2226 Paths."; 2227 list fec-label { 2228 key 2229 "lsp-id"; 2230 description 2231 "List of FEC to label bindings."; 2232 leaf lsp-id { 2233 type uint32; 2234 description "ID to identify the LSP."; 2235 } 2236 leaf multipoint-type { 2237 type mldp:multipoint-type; 2238 description 2239 "The type of mutipoint, p2mp or mp2mp."; 2240 } 2242 uses mldp-ext-binding-label-state-attributes; 2243 } // fec-label 2245 } // opaque-type-lspid 2246 } // bindings 2247 } // list root 2248 } // roots 2250 container configured-leaf-lsps { 2251 description 2252 "Configured multicast LSPs."; 2254 container opaque-type-lspid { 2255 description 2256 "The type of opaque value element is 2257 the generic LSP identifier"; 2258 reference 2259 "RFC6388: Label Distribution Protocol 2260 Extensions for Point-to-Multipoint and 2261 Multipoint-to-Multipoint Label Switched 2262 Paths."; 2263 list fec-label { 2264 key 2265 "root-address lsp-id"; 2266 description 2267 "List of FEC to label bindings."; 2268 leaf root-address { 2269 type inet:ipv6-address; 2270 description 2271 "Root address."; 2272 } 2273 leaf lsp-id { 2274 type uint32; 2275 description "ID to identify the LSP."; 2276 } 2277 leaf multipoint-type { 2278 type mldp:multipoint-type; 2279 description 2280 "The type of mutipoint, p2mp or mp2mp."; 2281 } 2282 list recursive-fec { 2283 key 2284 "recur-root-address recur-rd"; 2285 description 2286 "List of recursive opaque values."; 2287 uses recursive-fec-attibutes; 2288 } // fec-label 2289 } // fec-label 2290 } // opaque-type-lspid 2292 container opaque-type-transit { 2293 description 2294 "The type of opaque value element is the transit IPv4 2295 source."; 2296 reference 2297 "RFC6826: Multipoint LDP In-Band Signaling for 2298 Point-to-Multipoint and 2299 Multipoint-to-Multipoint Label Switched Paths."; 2300 list fec-label { 2301 key 2302 "root-address source-address group-address " 2303 + "rd recur-root-address recur-rd"; 2304 description 2305 "List of FEC to label bindings."; 2306 leaf root-address { 2307 type inet:ipv6-address; 2308 description 2309 "Root address."; 2310 } 2311 leaf source-address { 2312 type inet:ip-address; 2313 description 2314 "Source address."; 2315 } 2316 leaf group-address { 2317 type inet:ip-address-no-zone; 2318 description 2319 "Group address."; 2320 } 2321 leaf rd { 2322 type route-distinguisher; 2323 description 2324 "Route Distinguisher."; 2325 reference 2326 "RFC7246: Multipoint Label Distribution 2327 Protocol In-Band Signaling in a Virtual 2328 Routing and Forwarding (VRF) Table 2329 Context."; 2330 } 2331 uses recursive-fec-attibutes; 2332 } // fec-label 2333 } // opaque-type-transit 2335 container opaque-type-bidir { 2336 description 2337 "The type of opaque value element is 2338 the generic LSP identifier"; 2339 reference 2340 "RFC6826: Multipoint LDP In-Band Signaling for 2341 Point-to-Multipoint and 2342 Multipoint-to-Multipoint Label Switched 2343 Paths."; 2344 list fec-label { 2345 key 2346 "root-address rp group-address rd recur-root-address " 2347 + "recur-rd"; 2348 description 2349 "List of FEC to label bindings."; 2350 leaf root-address { 2351 type inet:ipv6-address; 2352 description 2353 "Root address."; 2354 } 2355 leaf rp { 2356 type inet:ip-address; 2357 description 2358 "RP address."; 2359 } 2360 leaf group-address { 2361 type inet:ip-address-no-zone; 2362 description 2363 "Group address."; 2364 } 2365 leaf rd { 2366 type route-distinguisher; 2367 description 2368 "Route Distinguisher."; 2369 reference 2370 "RFC7246: Multipoint Label Distribution 2371 Protocol In-Band Signaling in a Virtual 2372 Routing and Forwarding (VRF) Table 2373 Context."; 2374 } 2375 uses recursive-fec-attibutes; 2376 } // fec-label 2377 } // opaque-type-bidir 2378 } // configured-leaf-lsps 2379 } // ipv6 2380 } 2382 /* 2383 * Global augmentation 2384 */ 2386 /* 2387 * Notifications 2388 */ 2390 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type/" 2391 + "mldp:opaque-type-lspid/mldp:opaque-type-lspid" { 2392 description 2393 "Augmentation for MLDP notification for opaque-type-lspid."; 2394 container recursive-fec { 2395 description 2396 "Container of recursive opaque values."; 2397 uses recursive-fec-attibutes; 2398 } // fec-label 2399 } 2401 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-type" { 2402 description 2403 "Augmentation for MLDP notification."; 2404 case opaque-type-transit { 2405 container opaque-type-transit { 2406 description 2407 "The type of opaque value element is the transit IPv4 2408 source."; 2409 reference 2410 "RFC6826: Multipoint LDP In-Band Signaling for 2411 Point-to-Multipoint and 2412 Multipoint-to-Multipoint Label Switched Paths."; 2413 leaf root-address { 2414 type inet:ip-address; 2415 description 2416 "Root address."; 2417 } 2418 leaf source-address { 2419 type inet:ip-address; 2420 description 2421 "Source address."; 2422 } 2423 leaf group-address { 2424 type inet:ip-address-no-zone; 2425 description 2426 "Group address."; 2427 } 2428 leaf rd { 2429 type route-distinguisher; 2430 description 2431 "Route Distinguisher."; 2432 reference 2433 "RFC7246: Multipoint Label Distribution 2434 Protocol In-Band Signaling in a Virtual 2435 Routing and Forwarding (VRF) Table 2436 Context."; 2437 } 2438 uses recursive-fec-attibutes; 2439 } // opaque-type-transit 2440 } // opaque-type-transit 2442 case opaque-type-bidir { 2443 container opaque-type-bidir { 2444 description 2445 "The type of opaque value element is 2446 the generic LSP identifier"; 2447 reference 2448 "RFC6826: Multipoint LDP In-Band Signaling for 2449 Point-to-Multipoint and 2450 Multipoint-to-Multipoint Label Switched 2451 Paths."; 2452 leaf root-address { 2453 type inet:ip-address; 2454 description 2455 "Root address."; 2456 } 2457 leaf rp { 2458 type inet:ip-address; 2459 description 2460 "RP address."; 2461 } 2462 leaf group-address { 2463 type inet:ip-address-no-zone; 2464 description 2465 "Group address."; 2466 } 2467 leaf rd { 2468 type route-distinguisher; 2469 description 2470 "Route Distinguisher."; 2471 reference 2472 "RFC7246: Multipoint Label Distribution 2473 Protocol In-Band Signaling in a Virtual 2474 Routing and Forwarding (VRF) Table 2475 Context."; 2476 } 2477 uses recursive-fec-attibutes; 2478 } // opaque-type-bidir 2479 } // opaque-type-bidir 2480 } 2481 } 2483 2484 Figure 15 2486 10. Security Considerations 2488 This mLDP model shares the same security considerations as captured 2489 in LDP Yang model [I-D.ietf-mpls-ldp-yang]. 2491 11. IANA Considerations 2493 This document requests the registration of the following URIs in the 2494 IETF "XML registry" [RFC3688]: 2496 +------------------------------------------------+------------+-----+ 2497 | URI | Registrant | XML | 2498 +------------------------------------------------+------------+-----+ 2499 | urn:ietf:params:xml:ns:yang:ietf-mpls-mldp | The IESG | N/A | 2500 | | | | 2501 | urn:ietf:params:xml:ns:yang:ietf-mpls-mldp- | The IESG | N/A | 2502 | extended | | | 2503 +------------------------------------------------+------------+-----+ 2505 This document requests the registration of the following YANG modules 2506 in the "YANG Module Names" registry [RFC6020]: 2508 +----------------+--------------------------------+--------+--------+ 2509 | Name | Namespace | Prefix | Refere | 2510 | | | | nce | 2511 +----------------+--------------------------------+--------+--------+ 2512 | ietf-mpls-mldp | urn:ietf:params:xml:ns:yang | mldp | This d | 2513 | | :ietf-mpls-mldp | | ocumen | 2514 | | | | t | 2515 | | | | | 2516 | ietf-mpls- | urn:ietf:params:xml:ns:yang | mldp- | This d | 2517 | mldp-extended | :ietf-mpls-mldp-extended | ext | ocumen | 2518 | | | | t | 2519 +----------------+--------------------------------+--------+--------+ 2521 12. Acknowledgments 2523 The authors would like to acknowledge Ladislav Lhotka for his useful 2524 comments as the YANG Doctor. 2526 13. Normative References 2528 [I-D.ietf-mpls-ldp-yang] 2529 Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. 2530 Shah, "YANG Data Model for MPLS LDP", draft-ietf-mpls-ldp- 2531 yang-04 (work in progress), March 2018. 2533 [I-D.ietf-netmod-rfc6087bis] 2534 Bierman, A., "Guidelines for Authors and Reviewers of YANG 2535 Data Model Documents", draft-ietf-netmod-rfc6087bis-20 2536 (work in progress), March 2018. 2538 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2539 Requirement Levels", BCP 14, RFC 2119, 2540 DOI 10.17487/RFC2119, March 1997, 2541 . 2543 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 2544 DOI 10.17487/RFC3688, January 2004, 2545 . 2547 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2548 the Network Configuration Protocol (NETCONF)", RFC 6020, 2549 DOI 10.17487/RFC6020, October 2010, 2550 . 2552 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 2553 Thomas, "Label Distribution Protocol Extensions for Point- 2554 to-Multipoint and Multipoint-to-Multipoint Label Switched 2555 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 2556 . 2558 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 2559 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 2560 November 2011, . 2562 [RFC6512] Wijnands, IJ., Rosen, E., Napierala, M., and N. Leymann, 2563 "Using Multipoint LDP When the Backbone Has No Route to 2564 the Root", RFC 6512, DOI 10.17487/RFC6512, February 2012, 2565 . 2567 [RFC6826] Wijnands, IJ., Ed., Eckert, T., Leymann, N., and M. 2568 Napierala, "Multipoint LDP In-Band Signaling for Point-to- 2569 Multipoint and Multipoint-to-Multipoint Label Switched 2570 Paths", RFC 6826, DOI 10.17487/RFC6826, January 2013, 2571 . 2573 [RFC7060] Napierala, M., Rosen, E., and IJ. Wijnands, "Using LDP 2574 Multipoint Extensions on Targeted LDP Sessions", RFC 7060, 2575 DOI 10.17487/RFC7060, November 2013, 2576 . 2578 [RFC7140] Jin, L., Jounay, F., Wijnands, IJ., and N. Leymann, "LDP 2579 Extensions for Hub and Spoke Multipoint Label Switched 2580 Path", RFC 7140, DOI 10.17487/RFC7140, March 2014, 2581 . 2583 [RFC7246] Wijnands, IJ., Ed., Hitchen, P., Leymann, N., Henderickx, 2584 W., Gulko, A., and J. Tantsura, "Multipoint Label 2585 Distribution Protocol In-Band Signaling in a Virtual 2586 Routing and Forwarding (VRF) Table Context", RFC 7246, 2587 DOI 10.17487/RFC7246, June 2014, 2588 . 2590 [RFC7438] Wijnands, IJ., Ed., Rosen, E., Gulko, A., Joorde, U., and 2591 J. Tantsura, "Multipoint LDP (mLDP) In-Band Signaling with 2592 Wildcards", RFC 7438, DOI 10.17487/RFC7438, January 2015, 2593 . 2595 [RFC7715] Wijnands, IJ., Ed., Raza, K., Atlas, A., Tantsura, J., and 2596 Q. Zhao, "Multipoint LDP (mLDP) Node Protection", 2597 RFC 7715, DOI 10.17487/RFC7715, January 2016, 2598 . 2600 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 2601 and R. Wilton, "Network Management Datastore Architecture 2602 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 2603 . 2605 Appendix A. Additional Contributors 2607 Matthew Bocci 2608 Nokia 2609 Email: matthew.bocci@nokia.com 2611 Authors' Addresses 2613 Kamran Raza 2614 Cisco Systems, Inc. 2615 2000 Innovation Drive 2616 Kanata, ON K2K-3E8 2617 CA 2618 Email: skraza@cisco.com 2620 Rajiv Asati 2621 Cisco Systems, Inc. 2622 Email: rajiva@cisco.com 2623 Sowmya Krishnaswamy 2624 Cisco Systems, Inc. 2625 Email: sowkrish@cisco.com 2627 Xufeng Liu 2628 Volta Networks 2629 Email: xufeng.liu.ietf@gmail.com 2631 Jeff Tantsura 2632 Nuage Networks 2633 Email: jefftant.ietf@gmail.com 2635 Santosh Esale 2636 Juniper Networks 2637 Email: sesale@juniper.net 2639 Xia Chen 2640 Huawei Technologies 2641 Email: jescia.chenxia@huawei.com 2643 Loa Andersson 2644 Huawei Technologies 2645 Email: loa@pi.nu 2647 Himanshu Shah 2648 Ciena Corporation 2649 Email: hshah@ciena.com