idnits 2.17.1 draft-ietf-mpls-mldp-yang-08.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 173 instances of too long lines in the document, the longest one being 114 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 479 has weird spacing: '...address ine...' == Line 488 has weird spacing: '...address ine...' == Line 503 has weird spacing: '...address ine...' == Line 512 has weird spacing: '...address ine...' == Line 521 has weird spacing: '...address ine...' == (21 more instances...) == The document doesn't use any RFC 2119 keywords, yet has text resembling RFC 2119 boilerplate text. -- The document date (March 7, 2021) is 1145 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) ** Downref: Normative reference to an Informational RFC: RFC 7431 Summary: 2 errors (**), 0 flaws (~~), 8 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 MPLS Working Group K. Raza 2 Internet-Draft Cisco Systems 3 Intended status: Standards Track 4 Expires: September 8, 2021 X. Liu 5 Volta Networks 7 S. Esale 8 Juniper Networks 10 L. Andersson 11 Huawei Technologies 13 J. Tantsura 14 Nuage Networks 16 S. Krishnaswamy 17 Individual 19 March 7, 2021 21 YANG Data Model for MPLS mLDP 22 draft-ietf-mpls-mldp-yang-08 24 Abstract 26 This document describes a YANG data model for Multi-Protocol Label 27 Switching (MPLS) Multipoint Label Distribution Protocol (mLDP). The 28 mLDP data model augments the LDP data model. 30 The YANG modules in this document conform to the Network Management 31 Datastore Architecture (NMDA). 33 Status of This Memo 35 This Internet-Draft is submitted in full conformance with the 36 provisions of BCP 78 and BCP 79. 38 Internet-Drafts are working documents of the Internet Engineering 39 Task Force (IETF). Note that other groups may also distribute 40 working documents as Internet-Drafts. The list of current Internet- 41 Drafts is at https://datatracker.ietf.org/drafts/current/. 43 Internet-Drafts are draft documents valid for a maximum of six months 44 and may be updated, replaced, or obsoleted by other documents at any 45 time. It is inappropriate to use Internet-Drafts as reference 46 material or to cite them other than as "work in progress." 47 This Internet-Draft will expire on September 8, 2021. 49 Copyright Notice 51 Copyright (c) 2021 IETF Trust and the persons identified as the 52 document authors. All rights reserved. 54 This document is subject to BCP 78 and the IETF Trust's Legal 55 Provisions Relating to IETF Documents 56 (https://trustee.ietf.org/license-info) in effect on the date of 57 publication of this document. Please review these documents 58 carefully, as they describe your rights and restrictions with respect 59 to this document. Code Components extracted from this document must 60 include Simplified BSD License text as described in Section 4.e of 61 the Trust Legal Provisions and are provided without warranty as 62 described in the Simplified BSD License. 64 Table of Contents 66 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 67 1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 4 68 2. Specification of Requirements . . . . . . . . . . . . . . . . 4 69 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 70 3.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 5 71 3.2. FEC Types . . . . . . . . . . . . . . . . . . . . . . . . 6 72 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 7 73 4.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 7 74 4.2. mldp global container . . . . . . . . . . . . . . . . . . 9 75 4.3. Leveraging LDP containers . . . . . . . . . . . . . . . . 9 76 4.4. Configuration Tree . . . . . . . . . . . . . . . . . . . 10 77 4.4.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 10 78 4.4.2. Extended . . . . . . . . . . . . . . . . . . . . . . 11 79 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 13 80 5.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 13 81 5.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 14 82 5.3. Derived states . . . . . . . . . . . . . . . . . . . . . 17 83 5.3.1. Root state . . . . . . . . . . . . . . . . . . . . . 17 84 5.3.2. Bindings state . . . . . . . . . . . . . . . . . . . 18 85 5.3.3. Capabilities state . . . . . . . . . . . . . . . . . 21 86 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 21 87 6.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 21 88 6.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 22 89 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 90 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 23 91 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 23 92 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 23 93 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 34 94 10. Security Considerations . . . . . . . . . . . . . . . . . . . 55 95 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 56 96 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 57 97 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 57 98 13.1. Normative References . . . . . . . . . . . . . . . . . . 57 99 13.2. Informative References . . . . . . . . . . . . . . . . . 60 100 Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 60 101 Appendix B. Additional Contributors . . . . . . . . . . . . . . 68 102 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 68 104 1. Introduction 106 This document introduces a YANG data model for MPLS Multipoint Label 107 Distribution Protocol (mLDP). The mLDP model being defined here is 108 dependent on the LDP YANG data model [I-D.ietf-mpls-ldp-yang]. This 109 implies that an operator will need to use the base LDP module to 110 configure and manage the control plane for mLDP. For example, an 111 operator would enable LDP discovery on MPLS interface to establish 112 LDP/mLDP peering on which mLDP bindings could be exchanged. 113 Similarly, an operator could query state information for an LDP peer 114 in order to verify peering attributes, etc. 116 Moreover, it is important to note here that any assumptions made in 117 the LDP model also hold true in this document, unless otherwise 118 explicitly stated. 120 Like its parent LDP data model, this mLDP model also defines the 121 following constructs for managing the mLDP protocol: 123 o Configuration 125 o Operational State 127 o Executables (Actions) 129 o Notifications 131 The modeling in this document complies with the Network Management 132 Datastore Architecture (NMDA) [RFC8342]. The operational state data 133 is combined with the associated configuration data in the same 134 hierarchy [RFC8407]. When protocol states are retrieved from the 135 NMDA operational state datastore, the returned states cover all 136 "config true" (rw) and "config false" (ro) nodes defined in the 137 schema. 139 This document is organized to define the data model for each of the 140 above constructs in the sequence as listed above. 142 1.1. Base and Extended 144 Like the LDP model, the configuration and state items are divided 145 into the following two broad categories: 147 o Base 149 o Extended 151 The "base" category contains the basic and fundamental features that 152 are covered in the mLDP base specification [RFC6388] alongwith few 153 significant extension like targeted mLDP [RFC7060], constituting the 154 minumum requirements for an mLDP deployment. Whereas, the "extended" 155 category contains all other non-base features (such as recursive FEC 156 support, protection etc.). All the items in the base category are 157 mandatory and hence no "if-feature" is allowed under the "base" 158 category. While "base" model support will suffice for small 159 deployments, large deployments will require not only the "base" 160 module support but also "extended" support for some selected and 161 required features. 163 The base and extended categories are defined in their own modules 164 ietf-mpls-mldp and ietf-mpls-mldp-extended respectively, each of 165 which augments the LDP base model as defined within the ietf-mpls-ldp 166 module [I-D.ietf-mpls-ldp-yang]. 168 Like LDP, the mLDP "base" model configuration and state covers ipv4 169 address-family only, with ipv6 address-family related configuration 170 and state be covered in the "extended" model. 172 In this document, when a simplified graphical representation of YANG 173 model is presented in a tree diagrams, the meaning of the symbols in 174 these tree diagrams is defined in [RFC8340]. 176 2. Specification of Requirements 178 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 179 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 180 document are to be interpreted as described in BCP 14 [RFC2119] 181 [RFC8174] when, and only when, they appear in all capitals, as shown 182 here. 184 3. Overview 186 This document defines a YANG module named "ietf-mpls-mldp" for the 187 mLDP YANG base data model that augments /rt:routing/rt:control-plane- 188 protocols/rt:control-plane-protocol/ldp:mpls-ldp defined in 190 [I-D.ietf-mpls-ldp-yang]. The document also defines the "ietf-mpls- 191 mldp-extended" YANG module that models the extended mLDP features. 193 The following diagram depicts high level mLDP yang tree organization 194 and hierarchy with respect to LDP: 196 +-- rw routing 197 +-- rw control-plane-protocols 198 +-- rw mpls-ldp 199 +-- rw some_ldp_container 200 | +-- rw mldp 201 | +-- rw ... // mldp base 202 | | +-- rw ... 203 | | +-- ro ... 204 | | +-- 205 | +-- rw mldp-ext:... // mldp extended 206 | | +-- rw ... 207 | | +-- ro ... 208 | | +-- 209 +-- ro some_ldp_container 210 +-- ro mldp 211 +-- ro ... // mldp base 212 | +-- ro ... 213 | +-- 214 +-- ro mldp-ext:... // mldp extended 215 +-- ro ... 216 +-- 218 notifications: 219 +--- n mpls-mldp-some_event 220 +--- n ... 222 Figure 1 224 3.1. Scope 226 The main mLDP areas and features that are within the scope of this 227 model are as follows: 229 o Base: 231 * mLDP Base Specification [RFC6388] 233 * Targeted mLDP [RFC7060] 235 * Configured Leaf LSPs (manually provisioned) 237 o Extended: 239 * mLDP Recursive FEC [RFC6512] 241 * mLDP Fast-Reroute (FRR): 243 + Node Protection [RFC7715] 245 + Multicast-only [RFC7431] 247 * In-band Signaling: 249 + mLDP In-band Signaling [RFC6826] 251 + mLDP In-band signaling in a VRF [RFC7246] 253 + mLDP In-band Signaling with Wildcards [RFC7438] 255 * Hub-and-Spoke Multipoint LSPs [RFC7140] 257 [Ed Note: Some of the topics in the above list are to be addressed/ 258 extended in a later revision of this document]. 260 3.2. FEC Types 262 The FEC for Multipoint LSP is presented as (root-address, opaque- 263 element). The following table lists various type of MP opaque 264 elements with their keys, as covered in the configuration and state 265 model: 267 +-------------------------+--------------------+------------+ 268 | Opaque Type | Key | RFC | 269 +-------------------------+--------------------+------------+ 270 | Generic LSP Identifier | LSP Id | [RFC6388] | 271 | Transit IPv4 Source | Source, Group | [RFC6826] | 272 | Transit IPv6 Source | Source, Group | [RFC6826] | 273 | Transit IPv4 Bidir | RP, Group | [RFC6826] | 274 | Transit IPv6 Bidir | RP, Group | [RFC6826] | 275 | Transit VPNv4 Source | Source, Group, RD | [RFC7246] | 276 | Transit VPNv6 Source | Source, Group, RD | [RFC7246] | 277 | Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] | 278 | Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] | 279 | Recursive Opaque | Root | [RFC6512] | 280 | VPN-Recursive Opaque | Root, RD | [RFC6512] | 281 +-------------------------+--------------------+------------+ 283 Table 1: MP Opaque Types and keys 285 It should be noted that there are three basic types (LSP Id, Source, 286 and Bidir) and then there are variants (VPN, recursive, VPN- 287 recursive) on top of these basic types. 289 The "base" model includes only the "Generic LSP Identifier" opaque 290 type (for ipv4), while rest of the above types are covered by the 291 "extended" model. 293 4. Configuration 295 4.1. Configuration Hierarchy 297 The high-level configuration organization for the base and extended 298 mLDP follows: 300 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 301 +-- mpls-ldp 302 +-- global 303 +-- ... 304 +-- ... 305 +-- mldp 306 | +-- ... 307 | +-- ... 308 | +-- address-families 309 | +-- ipv4 310 | | +-- ... 311 | | +-- mldp-ext: ... 312 | | +-- ... 313 | | +-- configured-leaf-lsps 314 | | +-- ... 315 | | +-- ... 316 | | +-- mldp-ext: ... 317 | | +-- ... 318 | +-- mldp-ext: ipv6 319 | +-- ... 320 | +-- ... 321 | +-- configured-leaf-lsps 322 | +-- ... 323 | +-- ... 324 +-- capability 325 | +-- mldp 326 | +-- ... 327 | +-- mldp-ext: ... 328 | +-- ... 329 +-- forwarding-nexthop 330 +--- interfaces 331 +--- interface* [name] 332 +--- mldp-ext: ... 334 Figure 2 336 From above hierarchy, we can categorize mLDP configuration parameters 337 into two types: 339 o Parameters that are mLDP specific 341 o Parameters that leverage/extend LDP containers and parameters 343 The following subsections first describe the mLDP specific 344 configuration parameters, followed by those leveraging LDP. It 345 should be noted that these parameters are defined under their 346 respective base or extended module as per their categorization. 348 4.2. mldp global container 350 mldp container is an augmentation of LDP global container and holds 351 the configuration related to items that are mLDP specific. The main 352 items under this container are: 354 o mLDP enablement: To enable mLDP under a (VRF) routing instance, 355 mldp is enabled in the mldp container under LDP. Given that mLDP 356 requires LDP signaling, it is not sensible to allow disabling the 357 LDP control plane under a (VRF) network-instance while requiring 358 mLDP to be enabled for the same. However, if a user wants to only 359 allow signaling for multipoint FECs on an LDP/mLDP enabled VRF 360 instance, he/she can use LDP label-policies to disable unicast 361 FECs under the VRF. 363 o mLDP per-AF features: mLDP manages its own list of IP address- 364 families and the features enabled underneath. The per-AF mLDP 365 configuration items include: 367 * Multicast-only FRR: This enables Multicast-only FRR 368 functionality for a given AF under mLDP. The feature allows 369 route-policy to be configured for finer control/applicability 370 of the feature. 372 * Recursive FEC: The recursive-fec feature [RFC6512] can be 373 enabled per-AF with a route-policy. 375 * Configured Leaf LSPs: To provision multipoint leaf LSPs 376 manually, a per-AF container is provided under LDP. The 377 configuration is flexible and allows a user to specify MP LSPs 378 of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by 379 using either LSP-Id or (S,G). 381 Targeted mLDP feature specification [RFC7060] does not require any 382 mLDP specific configuration. It, however, requires LDP upstream- 383 label-assignment capability [RFC6389] to be enabled. 385 4.3. Leveraging LDP containers 387 The mLDP configuration model leverages following configuration areas 388 and containers that are already defined for LDP: 390 o Capabilities: A new container "mldp" is defined that augments 391 LDP's capabilities container. This new container specifies any 392 mLDP specific capabilities and their parameters. Moreover, a new 393 container "mldp" is also added by augmenting LDP per-peer 394 capability container to override/control mLDP specific 395 capabilities on a peer level. In the scope of this document, the 396 most important capabilities related to mLDP are p2mp, mp2mp, make- 397 before-break, hub-and-spoke, and node-protection. 399 o Discovery and Peering: mLDP requires LDP discovery and peer 400 procedures to form mLDP peering. A peer is treated as an mLDP 401 peer only when either P2MP or MP2MP capabilities have been 402 successfully exchanged with the peer. If a user wish to 403 selectively enable or disable mLDP with a LDP-enabled peer, he/she 404 may use per-peer mLDP capabilities configuration. In most common 405 deployments, it is desirable to disable mLDP (capabilities 406 announcements) on a targeted-only LDP peering, where targeted-only 407 peer is the one whose discovery sources are the targeted type 408 only. 410 o Forwarding: By default, mLDP is allowed to select any of the LDP 411 enabled interface as a downstream interface towards a next-hop 412 (LDP/mLDP peer) for MP LSP programming. However, a configuration 413 option is provided to allow mLDP to exclude a given interface from 414 such a selection. Note that such a configuration option will be 415 useful only when there are more than one interface available for 416 the downstream selection. 418 4.4. Configuration Tree 420 4.4.1. Base 422 A simplified graphical representation of the data model for mLDP base 423 configuration follows: 425 module: ietf-mpls-mldp 426 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/ldp:capability: 427 +--rw mldp 428 +--rw p2mp 429 | +--rw enable? boolean 430 +--rw mp2mp 431 | +--rw enable? boolean 432 +--rw make-before-break 433 +--rw enable? boolean 434 +--rw switchover-delay? uint16 435 +--rw timeout? uint16 437 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:global: 438 +--rw mldp 439 +--rw enable? boolean 440 +--rw address-families 441 +--rw ipv4 442 +--rw configured-leaf-lsps 443 +--rw opaque-element-lspid 444 +--rw fec-label* [root-address lsp-id] 445 +--rw root-address inet:ipv4-address 446 +--rw lsp-id uint32 447 +--rw multipoint-type? multipoint-type 449 Figure 3 451 4.4.2. Extended 453 A simplified graphical representation of the data model for mLDP 454 extended configuration follows: 456 module: ietf-mpls-mldp 457 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/ldp:capability: 458 +--rw mldp 459 +--rw mldp-ext:hub-and-spoke {capability-mldp-hsmp}? 460 | +--rw mldp-ext:enable? boolean 461 +--rw mldp-ext:node-protection {capability-mldp-node-protection}? 462 +--rw mldp-ext:plr? boolean 463 +--rw mldp-ext:merge-point 464 +--rw mldp-ext:enable? boolean 465 +--rw mldp-ext:targeted-session-teardown-delay? uint16 467 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:global: 468 +--rw mldp 469 +--rw enable? boolean 470 +--rw address-families 471 +--rw ipv4 472 | +--rw configured-leaf-lsps 473 | | +--rw mldp-ext:opaque-element-transit 474 | | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 475 | | | +--rw mldp-ext:root-address inet:ipv4-address 476 | | | +--rw mldp-ext:source-address inet:ip-address 477 | | | +--rw mldp-ext:group-address inet:ip-address-no-zone 478 | | | +--rw mldp-ext:rd route-distinguisher 479 | | | +--rw mldp-ext:recur-root-address inet:ip-address 480 | | | +--rw mldp-ext:recur-rd route-distinguisher 481 | | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 482 | | +--rw mldp-ext:opaque-element-bidir 483 | | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] 484 | | +--rw mldp-ext:root-address inet:ipv4-address 485 | | +--rw mldp-ext:rp inet:ip-address 486 | | +--rw mldp-ext:group-address inet:ip-address-no-zone 487 | | +--rw mldp-ext:rd route-distinguisher 488 | | +--rw mldp-ext:recur-root-address inet:ip-address 489 | | +--rw mldp-ext:recur-rd route-distinguisher 490 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 491 | +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 492 | | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 493 | +--rw mldp-ext:recursive-fec 494 | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 495 +--rw mldp-ext:ipv6 496 +--rw mldp-ext:configured-leaf-lsps 497 | +--rw mldp-ext:opaque-element-lspid 498 | | +--rw mldp-ext:fec-label* [root-address lsp-id] 499 | | +--rw mldp-ext:root-address inet:ipv6-address 500 | | +--rw mldp-ext:lsp-id uint32 501 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 502 | | +--rw mldp-ext:recursive-fec* [recur-root-address recur-rd] 503 | | +--rw mldp-ext:recur-root-address inet:ip-address 504 | | +--rw mldp-ext:recur-rd route-distinguisher 505 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 506 | +--rw mldp-ext:opaque-element-transit 507 | | +--rw mldp-ext:fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 508 | | +--rw mldp-ext:root-address inet:ipv6-address 509 | | +--rw mldp-ext:source-address inet:ip-address 510 | | +--rw mldp-ext:group-address inet:ip-address-no-zone 511 | | +--rw mldp-ext:rd route-distinguisher 512 | | +--rw mldp-ext:recur-root-address inet:ip-address 513 | | +--rw mldp-ext:recur-rd route-distinguisher 514 | | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 515 | +--rw mldp-ext:opaque-element-bidir 516 | +--rw mldp-ext:fec-label* [root-address rp group-address rd recur-root-address recur-rd] 517 | +--rw mldp-ext:root-address inet:ipv6-address 518 | +--rw mldp-ext:rp inet:ip-address 519 | +--rw mldp-ext:group-address inet:ip-address-no-zone 520 | +--rw mldp-ext:rd route-distinguisher 521 | +--rw mldp-ext:recur-root-address inet:ip-address 522 | +--rw mldp-ext:recur-rd route-distinguisher 523 | +--rw mldp-ext:multipoint-type? mldp:multipoint-type 524 +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 525 | +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 526 +--rw mldp-ext:recursive-fec 527 +--rw mldp-ext:prefix-list? ldp-ext:prefix-list-ref 529 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/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 The operational state of mLDP can be queried and obtained from 537 various read-only mdlp "state" containers that augment ldp 538 containers. 540 5.1. Base 542 A simplified graphical representation of the data model for mLDP base 543 operational state follows: 545 module: ietf-mpls-mldp 546 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: 547 +--ro mldp 548 +--ro p2mp 549 | +--ro enable? boolean 550 +--ro mp2mp 551 | +--ro enable? boolean 552 +--ro make-before-break 553 +--ro enable? boolean 555 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:global: 556 +--rw mldp 557 +--rw enable? boolean 558 +--rw address-families 559 +--rw ipv4 560 +--ro roots 561 +--ro root* [root-address] 562 +--ro root-address inet:ipv4-address 563 +--ro is-self? boolean 564 +--ro reachability* [address interface] 565 | +--ro address inet:ipv4-address 566 | +--ro interface if:interface-ref 567 | +--ro peer? -> ../../../../../../../../ldp:peers/peer/lsr-id 568 +--ro bindings 569 +--ro opaque-element-lspid 570 +--ro fec-label* [lsp-id] 571 +--ro lsp-id uint32 572 +--ro multipoint-type? multipoint-type 573 +--ro peer* [direction peer advertisement-type] 574 +--ro direction ldp:downstream-upstream 575 +--ro peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 576 +--ro advertisement-type ldp:advertised-received 577 +--ro label? rt-types:mpls-label 578 +--ro mbb-role? enumeration 579 +--ro mldp-ext:mofrr-role? mofrr-role 581 Figure 5 583 5.2. Extended 585 A simplified graphical representation of the data model for mLDP 586 extended operational state follows: 588 module: ietf-mpls-mldp 590 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/ldp:capability: 592 +--ro mldp 593 +--ro mldp-ext:hub-and-spoke 594 | +--ro mldp-ext:enable? boolean 595 +--ro mldp-ext:node-protection 596 +--ro mldp-ext:plr? boolean 597 +--ro mldp-ext:merge-point? boolean 599 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ldp:mpls-ldp/ldp:global: 600 +--rw mldp 601 +--rw enable? boolean 602 +--rw address-families 603 +--rw ipv4 604 | +--ro roots 605 | +--ro root* [root-address] 606 | +--ro root-address inet:ipv4-address 607 | +--ro bindings 608 | +--ro opaque-element-lspid 609 | | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] 610 | | +--ro mldp-ext:recur-root-address inet:ip-address 611 | | +--ro mldp-ext:recur-rd route-distinguisher 612 | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 613 | | +--ro mldp-ext:peer* [direction peer advertisement-type] 614 | | +--ro mldp-ext:direction ldp:downstream-upstream 615 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 616 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 617 | | +--ro mldp-ext:label? rt-types:mpls-label 618 | | +--ro mldp-ext:mbb-role? enumeration 619 | | +--ro mldp-ext:mofrr-role? mofrr-role 620 | +--ro mldp-ext:opaque-element-transit 621 | | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] 622 | | +--ro mldp-ext:source-address inet:ip-address 623 | | +--ro mldp-ext:group-address inet:ip-address-no-zone 624 | | +--ro mldp-ext:rd route-distinguisher 625 | | +--ro mldp-ext:recur-root-address inet:ip-address 626 | | +--ro mldp-ext:recur-rd route-distinguisher 627 | | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 628 | | +--ro mldp-ext:peer* [direction peer advertisement-type] 629 | | +--ro mldp-ext:direction ldp:downstream-upstream 630 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 631 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 632 | | +--ro mldp-ext:label? rt-types:mpls-label 633 | | +--ro mldp-ext:mbb-role? enumeration 634 | | +--ro mldp-ext:mofrr-role? mofrr-role 635 | +--ro mldp-ext:opaque-element-bidir 636 | +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] 637 | +--ro mldp-ext:rp inet:ip-address 638 | +--ro mldp-ext:group-address inet:ip-address-no-zone 639 | +--ro mldp-ext:rd route-distinguisher 640 | +--ro mldp-ext:recur-root-address inet:ip-address 641 | +--ro mldp-ext:recur-rd route-distinguisher 642 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 643 | +--ro mldp-ext:peer* [direction peer advertisement-type] 644 | +--ro mldp-ext:direction ldp:downstream-upstream 645 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 646 | +--ro mldp-ext:advertisement-type ldp:advertised-received 647 | +--ro mldp-ext:label? rt-types:mpls-label 648 | +--ro mldp-ext:mbb-role? enumeration 649 | +--ro mldp-ext:mofrr-role? mofrr-role 650 +--rw mldp-ext:ipv6 651 +--ro mldp-ext:roots 652 +--ro mldp-ext:root* [root-address] 653 +--ro mldp-ext:root-address inet:ipv6-address 654 +--ro mldp-ext:is-self? boolean 655 +--ro mldp-ext:reachability* [address interface] 656 | +--ro mldp-ext:address inet:ipv6-address 657 | +--ro mldp-ext:interface if:interface-ref 658 | +--ro mldp-ext:peer? -> ../../../../../../../../ldp:peers/peer/lsr-id 659 +--ro mldp-ext:bindings 660 +--ro mldp-ext:opaque-element-lspid 661 | +--ro mldp-ext:fec-label* [lsp-id] 662 | +--ro mldp-ext:lsp-id uint32 663 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 664 | +--ro mldp-ext:peer* [direction peer advertisement-type] 665 | | +--ro mldp-ext:direction ldp:downstream-upstream 666 | | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 667 | | +--ro mldp-ext:advertisement-type ldp:advertised-received 668 | | +--ro mldp-ext:label? rt-types:mpls-label 669 | | +--ro mldp-ext:mbb-role? enumeration 670 | | +--ro mldp-ext:mofrr-role? mofrr-role 671 | +--ro mldp-ext:recursive-fec* [recur-root-address recur-rd] 672 | +--ro mldp-ext:recur-root-address inet:ip-address 673 | +--ro mldp-ext:recur-rd route-distinguisher 674 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 675 | +--ro mldp-ext:peer* [direction peer advertisement-type] 676 | +--ro mldp-ext:direction ldp:downstream-upstream 677 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 678 | +--ro mldp-ext:advertisement-type ldp:advertised-received 679 | +--ro mldp-ext:label? rt-types:mpls-label 680 | +--ro mldp-ext:mbb-role? enumeration 681 | +--ro mldp-ext:mofrr-role? mofrr-role 682 +--ro mldp-ext:opaque-element-transit 683 | +--ro mldp-ext:fec-label* [source-address group-address rd recur-root-address recur-rd] 684 | +--ro mldp-ext:source-address inet:ip-address 685 | +--ro mldp-ext:group-address inet:ip-address-no-zone 686 | +--ro mldp-ext:rd route-distinguisher 687 | +--ro mldp-ext:recur-root-address inet:ip-address 688 | +--ro mldp-ext:recur-rd route-distinguisher 689 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 690 | +--ro mldp-ext:peer* [direction peer advertisement-type] 691 | +--ro mldp-ext:direction ldp:downstream-upstream 692 | +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 693 | +--ro mldp-ext:advertisement-type ldp:advertised-received 694 | +--ro mldp-ext:label? rt-types:mpls-label 695 | +--ro mldp-ext:mbb-role? enumeration 696 | +--ro mldp-ext:mofrr-role? mofrr-role 697 +--ro mldp-ext:opaque-element-bidir 698 +--ro mldp-ext:fec-label* [rp group-address rd recur-root-address recur-rd] 699 +--ro mldp-ext:rp inet:ip-address 700 +--ro mldp-ext:group-address inet:ip-address-no-zone 701 +--ro mldp-ext:rd route-distinguisher 702 +--ro mldp-ext:recur-root-address inet:ip-address 703 +--ro mldp-ext:recur-rd route-distinguisher 704 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 705 +--ro mldp-ext:peer* [direction peer advertisement-type] 706 +--ro mldp-ext:direction ldp:downstream-upstream 707 +--ro mldp-ext:peer -> /rt:routing/control-plane-protocols/ldp:mpls-ldp/peers/peer/lsr-id 708 +--ro mldp-ext:advertisement-type ldp:advertised-received 709 +--ro mldp-ext:label? rt-types:mpls-label 710 +--ro mldp-ext:mbb-role? enumeration 711 +--ro mldp-ext:mofrr-role? mofrr-role 713 Figure 6 715 5.3. Derived states 717 The main areas for which mLDP operational derived state is defined 718 are: 720 o Root 722 o Bindings (FEC-label) 724 o Capabilities 726 5.3.1. Root state 728 The root address is a fundamental construct for MP FEC bindings and 729 LSPs. The root state provides information on all the known roots in 730 a given address-familty and their root reachability information (as 731 learnt from RIB). In case of multi-path reachability to a root, the 732 selection of the upstream path is done on per-LSP basis at the time 733 of LSP setup. Similarly, when protection mechanisms like Make- 734 before-break (MBB) or Multicast-only FRR (MoFRR) are in place, the 735 path designation as active/standby or primary/backup is also done on 736 per-LSP basis. It should be noted that a given root can be shared 737 amongst multiple P2MP and/or MP2MP LSPs. Moreover, an LSP can be 738 signaled to more than one root for Root Node Redundancy (RNR) 739 purposes. 741 The following diagram illustrates a root database on a branch/transit 742 LSR: 744 root 203.0.113.1: 745 path1: 746 RIB: GigEthernet 1/0, 198.51.100.1; 747 LDP: peer 192.0.2.1:0 748 path2: 749 RIB: GigEthernet 2/0, 198.51.100.16; 750 LDP: peer 192.0.2.2:0 752 root 203.0.113.2: 753 path1: 754 RIB: 198.51.100.100; (NOTE: This is a recursive path) 755 LDP: peer 192.0.2.100:0 (NOTE: T-mLDP peer) 757 root . . . . 759 Figure 7 761 A root entry on a root LSR itself will be presented as follows: 763 root 203.0.113.10: 764 is-self 766 Figure 8 768 5.3.2. Bindings state 770 Binding state provides information on mLDP FEC-label bindings for 771 both the P2MP and MP2MP FEC types. Like LDP, the FEC-label binding 772 derived state is presented in a FEC-centric view per address-family, 773 and provides information on both inbound (received) and outbound 774 (advertised) bindings. The FEC is presented as (root-address, 775 opaque-element-data) as described earlier in section Section 3.2, and 776 the direction (upstream or downstream) is picked with respect to root 777 reachability. In case of MBB or/and MoFRR, the role of a given peer 778 binding is also provided with respect to MBB (active or standby) or/ 779 and MoFRR (primary or backup). 781 A high-level tree hierarchy for mLDP bindings state follows: 783 +--rw mpls-ldp! 784 +--rw global 785 +--rw mldp 786 +--rw address-families 787 +--rw ipv4 (or ipv6) 788 +--ro state 789 +--ro roots 790 +--ro root* [root-address] 791 +--ro .... 792 +--ro bindings 793 +--ro opaque-element-xxx 794 | +--ro fec-label* [type-specific-key] 795 | +--ro some_key_1 ... 796 | +--ro some_key_2 ... 797 | +--ro multipoint-type? multipoint-type 798 | +--ro peer* [direction peer advertisement-type] 799 | | +--ro direction ldp:downstream-upstream 800 | | +--ro peer leafref 801 | | +--ro advertisement-type ldp:advertised-received 802 | | +--ro label? mpls:mpls-label 803 | | +--ro mbb-role? enumeration 804 | | +--ro mldp-ext:mofrr-role? mofrr-role 805 +--ro opaque-element-yyy 806 | +--ro fec-label* [type-specific-key] 807 | +--ro some_key_1 ... 808 ... 810 Figure 9 812 mLDP binding state is organized and presented per root address, and 813 hence the bindings container in under a root node in the model. The 814 bindings state is made available for FECs pertaining to different 815 types of opaque elements, with some state avaiable under the "base" 816 tree and the rest under the "extended" tree. 818 In the above tree, the various opaque types along with their type 819 specific key(s) refer to the table Table 1, as captured earlier in 820 the document. For example, if the opaque type is a Generic LSP 821 Identifier, then the type-specific-key will be a uint32 LSP-Id key. 822 Please see the complete model for all other types. 824 It is important to note the following: 826 o The address-family ipv4/ipv6 applies to "root" address in the mLDP 827 binding tree. The other addresses (source, group, Rendezvous- 828 Point etc.) do not have to be of the same address family type as 829 the root. 831 o The "recur-root-address" field applies to the Recursive opaque 832 type, and the (recur-root-address, recur-rd) fields applies to the 833 VPN-Recursive opaque types as defined in [RFC6512]. 835 o In case of a recursive FEC, the address-family of the recur-root- 836 address could be different than the address-family of the root 837 address of the original encapsulated MP FEC. 839 The following diagram illustrates the FEC-label binding information 840 structure for a P2MP (Transit IPv4 Source type) LSP on a branch/ 841 transit LSR: 843 FEC (root 203.0.113.1, S=198.51.100.1, G=224.1.1.1): 844 type: p2mp 845 upstream: 846 advertised: 847 peer 192.0.2.1:0, label 16000 (local) 848 downstream: 849 received: 850 peer 192.0.2.2:0, label 17000 (remote) 851 peer 192.0.2.3:0, label 18000 (remote) 853 Figure 10 855 The following diagram illustrates the FEC-label binding information 856 structure for a similar MP2MP LSP on a branch/transit LSR: 858 FEC (root 203.0.113.2, RP=198.51.100.2, G=224.1.1.1): 859 type: mp2mp 860 upstream: 861 advertised: 862 peer 192.0.2.1:0, label 16000 (local) 863 received: 864 peer 192.0.2.1:0, label 17000 (remote) 865 downstream: 866 advertised: 867 peer 192.0.2.2:0, label 16001 (local), MBB role=active 868 peer 192.0.2.3:0, label 16002 (local), MBB role=standby 869 received: 870 peer 192.0.2.2:0, label 17001 (remote) 871 peer 192.0.2.3:0, label 18001 (remote) 873 Figure 11 875 5.3.3. Capabilities state 877 Like LDP, mLDP capabilities state comprise two types of information: 879 o global: augments ldp:global/ldp:state/ldp:capability. 881 o per-peer: augments ldp:peers/ldp:peer/ldp:state/ldp:capability 883 6. Notifications 885 The mLDP notification module consists of notifications related to 886 changes in the operational state of an mLDP FEC. 888 6.1. Base 890 A simplified graphical representation of the base data model for mLDP 891 notifications follows: 893 module: ietf-mpls-mldp 894 notifications: 895 +---n mpls-mldp-fec-event 896 +--ro event-type? ldp:oper-status-event-type 897 +--ro (opaque-element)? 898 +--:(opaque-element-lspid) 899 +--ro opaque-element-lspid 900 +--ro root-address? inet:ip-address 901 +--ro lsp-id? uint32 902 +--ro multipoint-type? multipoint-type 903 +--ro mldp-ext:recursive-fec 904 +--ro mldp-ext:recur-root-address? inet:ip-address 905 +--ro mldp-ext:recur-rd? route-distinguisher 906 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 908 Figure 12 910 6.2. Extended 912 A simplified graphical representation of the extended data model for 913 mLDP notifications follows: 915 module: ietf-mpls-mldp 916 notifications: 917 +---n mpls-mldp-fec-event 918 +--ro event-type? ldp:oper-status-event-type 919 +--ro (opaque-element)? 920 +--:(mldp-ext:opaque-element-transit) 921 | +--ro mldp-ext:opaque-element-transit 922 | +--ro mldp-ext:root-address? inet:ip-address 923 | +--ro mldp-ext:source-address? inet:ip-address 924 | +--ro mldp-ext:group-address? inet:ip-address-no-zone 925 | +--ro mldp-ext:rd? route-distinguisher 926 | +--ro mldp-ext:recur-root-address? inet:ip-address 927 | +--ro mldp-ext:recur-rd? route-distinguisher 928 | +--ro mldp-ext:multipoint-type? mldp:multipoint-type 929 +--:(mldp-ext:opaque-element-bidir) 930 +--ro mldp-ext:opaque-element-bidir 931 +--ro mldp-ext:root-address? inet:ip-address 932 +--ro mldp-ext:rp? inet:ip-address 933 +--ro mldp-ext:group-address? inet:ip-address-no-zone 934 +--ro mldp-ext:rd? route-distinguisher 935 +--ro mldp-ext:recur-root-address? inet:ip-address 936 +--ro mldp-ext:recur-rd? route-distinguisher 937 +--ro mldp-ext:multipoint-type? mldp:multipoint-type 939 Figure 13 941 7. Actions 943 Currently, no RPCs/actions are defined for mLDP. 945 8. Open Items 947 A list of open items that are to be addressed in future revisions of 948 this document follows: 950 o Specify default values for configuration parameters 952 9. YANG Specification 954 The YANG definition, i.e., the modules, for mLDP constructs defined 955 earlier in this document are includind the subsections below. 957 9.1. Base 959 This YANG module imports types defined in [RFC6991], [RFC8343], 960 [RFC8349], [I-D.ietf-mpls-ldp-yang], and [RFC8294]. 962 file "ietf-mpls-mldp@2021-03-07.yang" 963 // RFC Editor: replace the above date with the date of 964 // publication and remove this note. 966 module ietf-mpls-mldp { 967 yang-version 1.1; 969 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp"; 970 prefix "mldp"; 972 import ietf-inet-types { 973 prefix "inet"; 974 reference "RFC 6991: Common YANG Data Types"; 975 } 977 import ietf-interfaces { 978 prefix "if"; 979 reference "RFC 8343: A YANG Data Model for Interface Management"; 980 } 982 import ietf-mpls-ldp { 983 prefix "ldp"; 984 reference "RFC XXXX: A YANG Data Model for MPLS LDP"; 985 // RFC Editor: replace the XXXX with actual LDP YANG RFC number at 986 // time of publication and remove this note. 987 } 989 import ietf-routing { 990 prefix "rt"; 991 reference 992 "RFC 8349: A YANG Data Model for Routing Management (NMDA 993 version)"; 994 } 996 import ietf-routing-types { 997 prefix "rt-types"; 998 reference 999 "RFC 8294: Common YANG Data Types for the Routing Area"; 1000 } 1002 organization 1003 "IETF MPLS Working Group"; 1004 contact 1005 "WG Web: 1006 WG List: 1008 Editor: Kamran Raza 1009 1011 Editor: Sowmya Krishnaswamy 1012 1014 Editor: Xufeng Liu 1015 1017 Editor: Santosh Esale 1018 1020 Editor: Loa Andersson 1021 1023 Editor: Jeff Tantsura 1024 "; 1026 description 1027 "This YANG module defines the essential components for the 1028 management of Multi-Protocol Label Switching (MPLS) Multipoint 1029 LDP (mLDP). 1031 Copyright (c) 2018 IETF Trust and the persons identified as 1032 authors of the code. All rights reserved. 1034 Redistribution and use in source and binary forms, with or 1035 without modification, is permitted pursuant to, and subject to 1036 the license terms contained in, the Simplified BSD License set 1037 forth in Section 4.c of the IETF Trust's Legal Provisions 1038 Relating to IETF Documents 1039 (http://trustee.ietf.org/license-info). 1041 This version of this YANG module is part of RFC XXXX; see the 1042 RFC itself for full legal notices."; 1044 // RFC Editor: replace XXXX with actual RFC number and remove 1045 // this note 1047 revision 2021-03-07 { 1048 // RFC Editor: replace the above date 2021-03-07 with the date of 1049 // publication and remove this note. 1051 description 1052 "Initial revision."; 1053 reference 1054 "RFC XXXX: Base YANG Data Model for MPLS mLDP"; 1055 // RFC Editor: replace XXXX with actual RFC number and remove 1056 // this note 1057 } 1058 /* 1059 * Typedefs 1060 */ 1061 typedef multipoint-type { 1062 type enumeration { 1063 enum p2mp { 1064 description "Point to multipoint"; 1065 } 1066 enum mp2mp { 1067 description "Multipoint to multipoint"; 1068 } 1069 } 1070 description 1071 "The type of a multipoint LSP: either Point to multipoint 1072 (p2mp) or Multipoint to multipoint (mp2mp)"; 1073 } 1075 /* 1076 * Groupings 1077 */ 1078 grouping mldp-capabilities { 1079 description 1080 "A grouping describing the protocol capabilities of mLDP"; 1081 container p2mp { 1082 description 1083 "Configuration and state information for the 1084 point-to-multipoint capability"; 1085 leaf enable { 1086 type boolean; 1087 description 1088 "'true' to enable the point-to-multipoint capability"; 1089 } 1090 } 1091 container mp2mp { 1092 description 1093 "Configuration and state information for the 1094 multipoint-to-multipoint capability"; 1095 leaf enable { 1096 type boolean; 1097 description 1098 "'true' to enable the multipoint-to-multipoint capability"; 1099 } 1100 } 1101 container make-before-break { 1102 description 1103 "Configuration and state information for the 1104 make-before-break capability."; 1105 leaf enable { 1106 type boolean; 1107 description 1108 "'true' to enable the make-before-break capability"; 1109 } 1110 leaf switchover-delay { 1111 type uint16; 1112 units seconds; 1113 description 1114 "Switchover delay in seconds"; 1115 } 1116 leaf timeout { 1117 type uint16; 1118 units seconds; 1119 description 1120 "Timeout in seconds"; 1121 } 1122 } 1123 } // mldp-capabilities 1125 grouping mldp-binding-label-peer-state-attributes { 1126 description 1127 "mLDP label binding per peer attributes"; 1128 leaf direction { 1129 type ldp:downstream-upstream; 1130 description 1131 "Downstream or upstream"; 1132 } 1133 leaf peer { 1134 type leafref { 1135 path 1136 "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1137 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:lsr-id"; 1138 } 1139 description 1140 "LDP peer from which this binding is received, 1141 or to which this binding is advertised."; 1142 } 1143 leaf advertisement-type { 1144 type ldp:advertised-received; 1145 description 1146 "Advertised or received"; 1147 } 1148 leaf label { 1149 type rt-types:mpls-label; 1150 description 1151 "Advertised (outbound) or received (inbound) label"; 1152 } 1153 leaf mbb-role { 1154 when "../direction = 'upstream'" { 1155 description 1156 "This leaf is used for upstream only."; 1157 } 1158 type enumeration { 1159 enum none { 1160 description "Make-Before-Break (MBB) is not enabled"; 1161 } 1162 enum active { 1163 description "This LSP is active."; 1164 } 1165 enum inactive { 1166 description "This LSP is inactive."; 1167 } 1168 } 1169 description 1170 "The MBB status of this LSP"; 1171 } 1172 } // mldp-binding-label-peer-state-attributes 1174 grouping mldp-binding-label-state-attributes { 1175 description 1176 "mLDP label binding attributes"; 1177 list peer { 1178 key "direction peer advertisement-type"; 1179 description 1180 "List of advertised and received peers"; 1181 uses mldp-binding-label-peer-state-attributes; 1182 } // peer 1183 } // mldp-binding-label-state-attributes 1185 /* 1186 * Configuration data and operational state data nodes 1187 */ 1188 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1189 + "ldp:mpls-ldp/ldp:global/ldp:capability" { 1190 description "Augmentation for MLDP global capability"; 1191 container mldp { 1192 description 1193 "This container contains the configruation and state 1194 information for multipoint LDP capabilities."; 1195 uses mldp-capabilities; 1196 } 1197 } 1199 /* 1200 * Operational state data nodes 1201 */ 1203 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1204 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" 1205 + "ldp:capability" { 1206 description 1207 "Augmentation for MLDP received peer state capability"; 1208 container mldp { 1209 description 1210 "Operational state information for the protocol capabilities 1211 of mLDP"; 1213 container p2mp { 1214 description 1215 "Operational state information for the point-to-multipoint 1216 capability"; 1217 leaf enable { 1218 type boolean; 1219 description 1220 "'true' to enable the point-to-multipoint capability"; 1221 } 1222 } 1223 container mp2mp { 1224 description 1225 "Operational state information for the 1226 multipoint-to-multipoint capability"; 1227 leaf enable { 1228 type boolean; 1229 description 1230 "'true' to enable the multipoint-to-multipoint 1231 capability"; 1232 } 1233 } 1234 container make-before-break { 1235 description 1236 "Operational state information for the make-before-break 1237 capability"; 1238 leaf enable { 1239 type boolean; 1240 description 1241 "'true' to enable the make-before-break capability"; 1242 } 1243 } 1244 } // mldp 1245 } 1247 /* 1248 * Global augmentation 1249 */ 1250 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1251 + "ldp:mpls-ldp/ldp:global" { 1252 description "MLDP global augmentation."; 1253 container mldp { 1254 description 1255 "mLDP attributes at per instance level. Defining 1256 attributes here does not enable any MP capabilities. 1257 MP capabilities need to be explicitly enabled under 1258 container capability."; 1260 leaf enable { 1261 type boolean; 1262 description 1263 "'true' to enable mLDP"; 1264 } 1266 container address-families { 1267 description 1268 "Per address family parameters"; 1270 container ipv4 { 1271 description 1272 "IPv4 information"; 1273 container roots { 1274 config false; 1275 description 1276 "IPv4 multicast LSP roots"; 1277 list root { 1278 key "root-address"; 1279 description 1280 "List of roots for configured multicast LSPs"; 1282 leaf root-address { 1283 type inet:ipv4-address; 1284 description 1285 "Root address."; 1286 } 1288 leaf is-self { 1289 type boolean; 1290 description 1291 "I am the root node."; 1292 } 1294 list reachability { 1295 key "address interface"; 1296 description 1297 "A next-hop for reachability to root, 1298 as a RIB view"; 1300 leaf address { 1301 type inet:ipv4-address; 1302 description 1303 "The next-hop address to reach root"; 1304 } 1305 leaf interface { 1306 type if:interface-ref; 1307 description 1308 "Interface connecting to next-hop"; 1309 } 1310 leaf peer { 1311 type leafref { 1312 path 1313 "../../../../../../../../ldp:peers/" 1314 + "ldp:peer/ldp:lsr-id"; 1315 } 1316 description 1317 "LDP peer from which this next-hop can be 1318 reached"; 1319 } 1320 } 1322 container bindings { 1323 description 1324 "mLDP FEC to label bindings"; 1325 container opaque-element-lspid { 1326 description 1327 "The type of opaque value element is the generic 1328 LSP identifier"; 1329 reference 1330 "RFC6388: Label Distribution Protocol 1331 Extensions for Point-to-Multipoint and 1332 Multipoint-to-Multipoint Label Switched 1333 Paths."; 1334 list fec-label { 1335 key 1336 "lsp-id"; 1337 description 1338 "List of FEC to label bindings"; 1339 leaf lsp-id { 1340 type uint32; 1341 description "ID to identify the LSP"; 1342 } 1343 leaf multipoint-type { 1344 type multipoint-type; 1345 description 1346 "The type of mutipoint: p2mp or mp2mp"; 1347 } 1348 uses mldp-binding-label-state-attributes; 1349 } // fec-label 1350 } // opaque-element-lspid 1351 } // bindings 1352 } // list root 1353 } // roots 1355 container configured-leaf-lsps { 1356 description 1357 "Configured multicast LSPs."; 1358 container opaque-element-lspid { 1359 description 1360 "The type of opaque value element is 1361 the generic LSP identifier"; 1362 reference 1363 "RFC6388: Label Distribution Protocol 1364 Extensions for Point-to-Multipoint and 1365 Multipoint-to-Multipoint Label Switched 1366 Paths."; 1367 list fec-label { 1368 key 1369 "root-address lsp-id"; 1370 description 1371 "List of FEC to label bindings."; 1372 leaf root-address { 1373 type inet:ipv4-address; 1374 description 1375 "Root address"; 1376 } 1377 leaf lsp-id { 1378 type uint32; 1379 description "ID to identify the LSP"; 1380 } 1381 leaf multipoint-type { 1382 type multipoint-type; 1383 description 1384 "The type of mutipoint: p2mp or mp2mp"; 1385 } 1386 } // fec-label 1387 } // opaque-element-lspid 1388 } // configured-leaf-lsps 1389 } // ipv4 1390 } // list address-family 1391 } // mldp 1392 } 1394 /* 1395 * Notifications 1396 */ 1397 notification mpls-mldp-fec-event { 1398 description 1399 "Notification event for a change of FEC status"; 1400 leaf event-type { 1401 type ldp:oper-status-event-type; 1402 description "Event type"; 1403 } 1404 choice opaque-element { 1405 description 1406 "The type of opaque value element"; 1407 case opaque-element-lspid { 1408 container opaque-element-lspid { 1409 description 1410 "The type of opaque value element is 1411 the generic LSP identifier"; 1412 reference 1413 "RFC6388: Label Distribution Protocol 1414 Extensions for Point-to-Multipoint and 1415 Multipoint-to-Multipoint Label Switched 1416 Paths."; 1417 leaf root-address { 1418 type inet:ip-address; 1419 description 1420 "Root address."; 1421 } 1422 leaf lsp-id { 1423 type uint32; 1424 description "ID to identify the LSP"; 1425 } 1426 leaf multipoint-type { 1427 type multipoint-type; 1428 description 1429 "The type of mutipoint: p2mp or mp2mp"; 1430 } 1431 } // container opaque-element-lspid 1432 } 1433 } 1434 } 1435 } 1437 1439 Figure 14 1441 9.2. Extended 1443 This YANG module imports types defined in [RFC6991], [RFC8343], 1444 [RFC8349], [I-D.ietf-mpls-ldp-yang], and [RFC8294]. 1446 file "ietf-mpls-mldp-extended@2021-03-07.yang" 1447 // RFC Editor: replace the above date with the date of 1448 // publication and remove this note. 1450 module ietf-mpls-mldp-extended { 1451 yang-version 1.1; 1453 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended"; 1454 prefix "mldp-ext"; 1456 import ietf-inet-types { 1457 prefix "inet"; 1458 reference "RFC 6991: Common YANG Data Types"; 1459 } 1461 import ietf-interfaces { 1462 prefix "if"; 1463 reference "RFC 8343: A YANG Data Model for Interface Management"; 1464 } 1466 import ietf-routing { 1467 prefix "rt"; 1468 reference 1469 "RFC 8349: A YANG Data Model for Routing Management (NMDA 1470 version)"; 1471 } 1473 import ietf-routing-types { 1474 prefix "rt-types"; 1475 reference 1476 "RFC 8294: Common YANG Data Types for the Routing Area"; 1477 } 1479 import ietf-mpls-ldp { 1480 prefix "ldp"; 1481 reference "RFC XXXX: A YANG Data Model for MPLS LDP"; 1482 // RFC Editor: replace the XXXX with actual LDP YANG RFC number at 1483 // time of publication and remove this note. 1484 } 1486 import ietf-mpls-ldp-extended { 1487 prefix "ldp-ext"; 1488 reference "RFC XXXX: A YANG Data Model for MPLS LDP"; 1489 // RFC Editor: replace the XXXX with actual LDP YANG RFC number at 1490 // time of publication and remove this note. 1491 } 1492 import ietf-mpls-mldp { 1493 prefix "mldp"; 1494 reference "RFC XXXX: Base YANG Data Model for MPLS mLDP"; 1495 // RFC Editor: replace the XXXX with actual mLDP YANG RFC number at 1496 // time of publication and remove this note. 1497 } 1499 organization 1500 "IETF MPLS Working Group"; 1501 contact 1502 "WG Web: 1503 WG List: 1505 Editor: Kamran Raza 1506 1508 Editor: Sowmya Krishnaswamy 1509 1511 Editor: Xufeng Liu 1512 1514 Editor: Santosh Esale 1515 1517 Editor: Loa Andersson 1518 1520 Editor: Jeff Tantsura 1521 "; 1523 description 1524 "This YANG module defines the extended components for the 1525 management of Multi-Protocol Label Switching (MPLS) Multipoint 1526 LDP (mLDP). 1528 Copyright (c) 2018 IETF Trust and the persons identified as 1529 authors of the code. All rights reserved. 1531 Redistribution and use in source and binary forms, with or 1532 without modification, is permitted pursuant to, and subject to 1533 the license terms contained in, the Simplified BSD License set 1534 forth in Section 4.c of the IETF Trust's Legal Provisions 1535 Relating to IETF Documents 1536 (http://trustee.ietf.org/license-info). 1538 This version of this YANG module is part of RFC XXXX; see the 1539 RFC itself for full legal notices."; 1541 // RFC Editor: replace XXXX with actual RFC number and remove 1542 // this note 1544 revision 2021-03-07 { 1545 // RFC Editor: replace the above date 2021-03-07 with the date of 1546 // publication and remove this note. 1548 description 1549 "Initial revision."; 1550 reference 1551 "RFC XXXX: Extended YANG Data Model for MPLS mLDP"; 1552 // RFC Editor: replace XXXX with actual RFC number and remove 1553 // this note 1554 } 1556 /* 1557 * Features 1558 */ 1559 feature capability-mldp-hsmp { 1560 description 1561 "This feature indicates that the system allows to configure 1562 mLDP hub-and-spoke-multipoint capability."; 1563 } 1565 feature capability-mldp-node-protection { 1566 description 1567 "This feature indicates that the system allows to configure 1568 mLDP node-protection capability."; 1569 } 1571 feature mldp-mofrr { 1572 description 1573 "This feature indicates that the system supports mLDP 1574 Multicast only FRR (MoFRR)."; 1575 } 1577 feature per-peer-capability { 1578 description 1579 "This feature indicates that the system allows to configure 1580 mLDP capabilities at the per peer level."; 1581 } 1582 /* 1583 * Typedefs 1584 */ 1585 typedef mofrr-role { 1586 type enumeration { 1587 enum none { 1588 description "MOFRR is not enabled."; 1589 } 1590 enum primary { 1591 description "This LSP is primary."; 1592 } 1593 enum backup { 1594 description "This LSP is backup."; 1595 } 1596 } 1597 description 1598 "This type represents the MOFRR (Multicast only FRR) role 1599 status of a LSP."; 1600 } 1602 /* 1603 * Groupings 1604 */ 1605 grouping mldp-ext-binding-label-state-attributes { 1606 description 1607 "mLDP label binding attributes"; 1609 list peer { 1610 key "direction peer advertisement-type"; 1611 description 1612 "List of advertised and received peers"; 1613 uses mldp:mldp-binding-label-peer-state-attributes; 1615 leaf mofrr-role { 1616 when "../direction = 'upstream'" { 1617 description 1618 "For upstream."; 1619 } 1620 type mofrr-role; 1621 description 1622 "The MOFRR status of this LSP"; 1623 } 1624 } // peer 1625 } // mldp-ext-binding-label-state-attributes 1627 grouping mldp-ext-capabilities { 1628 description 1629 "mLDP extended capabilities"; 1631 container hub-and-spoke { 1632 if-feature capability-mldp-hsmp; 1633 description 1634 "Configure hub-and-spoke-multipoint capability"; 1635 reference 1636 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1637 Label Switched Path"; 1638 leaf enable { 1639 type boolean; 1640 description 1641 "Enable hub-and-spoke-multipoint"; 1642 } 1643 } 1644 container node-protection { 1645 if-feature capability-mldp-node-protection; 1646 description 1647 "Configure node-protection capability."; 1648 reference 1649 "RFC7715: mLDP Node Protection."; 1650 leaf plr { 1651 type boolean; 1652 description 1653 "Point of Local Repair (PLR) capable for Multipoimt LSP 1654 node protection"; 1655 } 1656 container merge-point { 1657 description 1658 "Merge Point capable for Multipoint LSP node protection"; 1659 leaf enable { 1660 type boolean; 1661 description 1662 "Enable merge point capability"; 1663 } 1664 leaf targeted-session-teardown-delay { 1665 type uint16; 1666 units seconds; 1667 description 1668 "Targeted session teardown delay"; 1669 } 1670 } // merge-point 1671 } 1672 } // mldp-ext-capabilities 1674 grouping mldp-ext-per-af-config-attibutes { 1675 description 1676 "mLDP per address family configuration attibutes"; 1677 container multicast-only-frr { 1678 if-feature mldp-mofrr; 1679 description 1680 "Multicast-only FRR (MoFRR) policy"; 1681 leaf prefix-list { 1682 type ldp-ext:prefix-list-ref; 1683 description 1684 "Enables Multicast-only FRR (MoFRR) for the specified 1685 access list"; 1686 } 1687 } // multicast-only-frr 1688 container recursive-fec { 1689 description 1690 "Recursive FEC policy"; 1691 leaf prefix-list { 1692 type ldp-ext:prefix-list-ref; 1693 description 1694 "Enables recursive FEC for the specified prefix-list"; 1695 } 1696 } // recursive-fec 1697 } // mldp-ext-per-af-config-attibutes 1699 grouping recursive-fec-attibutes { 1700 description 1701 "mLDP recursive FEC attibutes."; 1702 leaf recur-root-address { 1703 type inet:ip-address; 1704 description 1705 "Recursive root address"; 1706 reference 1707 "RFC6512: Using Multipoint LDP When the 1708 Backbone Has No Route to the Root"; 1709 } 1710 leaf recur-rd { 1711 type rt-types:route-distinguisher; 1712 description 1713 "Route Distinguisher in the VPN-Recursive 1714 Opaque Value"; 1715 reference 1716 "RFC6512: Using Multipoint LDP When the 1717 Backbone Has No Route to the Root"; 1718 } 1719 leaf multipoint-type { 1720 type mldp:multipoint-type; 1721 description 1722 "The type of mutipoint: p2mp or mp2mp"; 1723 } 1724 } // recursive-fec-attibutes 1726 /* 1727 * Configuration data and operational state data nodes 1728 */ 1729 // Global capability 1730 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1731 + "ldp:mpls-ldp/ldp:global/ldp:capability/mldp:mldp" { 1732 description "Augmentation for MLDP global capability."; 1734 uses mldp-ext-capabilities; 1735 } 1737 /* TODO: FIXME 1738 // Peer capability 1739 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1740 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:capability" { 1741 description "Augmentation for MLDP peer capability."; 1742 container mldp { 1743 if-feature per-peer-capability; 1744 description 1745 "mLDP capabilities"; 1746 uses mldp:mldp-capabilities; 1747 } 1748 } */ 1750 // IPv4 config 1751 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1752 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1753 + "mldp:ipv4" { 1754 description "Augmentation for MLDP IPv4 configuration"; 1755 uses mldp-ext-per-af-config-attibutes; 1756 } 1758 // IPv4 configured-leaf-lsps config 1759 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1760 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1761 + "mldp:ipv4/mldp:configured-leaf-lsps/" 1762 + "mldp:opaque-element-lspid/mldp:fec-label" { 1763 description 1764 "Augmentation for MLDP IPv4 configured-leaf-lsps 1765 configuration for opaque-element-lspid"; 1766 list recursive-fec { 1767 key 1768 "recur-root-address recur-rd"; 1769 description 1770 "List of recursive opaque values"; 1771 uses recursive-fec-attibutes; 1772 } // fec-label 1773 } 1774 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1775 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1776 + "mldp:ipv4/mldp:configured-leaf-lsps" { 1777 description 1778 "Augmentation for MLDP IPv4 configured-leaf-lsps 1779 configuration"; 1781 container opaque-element-transit { 1782 description 1783 "The type of opaque value element is the transit IPv4 1784 source."; 1785 reference 1786 "RFC6826: Multipoint LDP In-Band Signaling for 1787 Point-to-Multipoint and 1788 Multipoint-to-Multipoint Label Switched Paths."; 1789 list fec-label { 1790 key 1791 "root-address source-address group-address " + 1792 "rd recur-root-address recur-rd"; 1793 description 1794 "List of FEC to label bindings"; 1795 leaf root-address { 1796 type inet:ipv4-address; 1797 description 1798 "Root address"; 1799 } 1800 leaf source-address { 1801 type inet:ip-address; 1802 description 1803 "Source address"; 1804 } 1805 leaf group-address { 1806 type inet:ip-address-no-zone; 1807 description 1808 "Group address"; 1809 } 1810 leaf rd { 1811 type rt-types:route-distinguisher; 1812 description 1813 "Route Distinguisher"; 1814 reference 1815 "RFC7246: Multipoint Label Distribution 1816 Protocol In-Band Signaling in a Virtual 1817 Routing and Forwarding (VRF) Table 1818 Context."; 1819 } 1820 uses recursive-fec-attibutes; 1821 } // fec-label 1823 } // opaque-element-transit 1825 container opaque-element-bidir { 1826 description 1827 "The type of opaque value element is 1828 the generic LSP identifier"; 1829 reference 1830 "RFC6826: Multipoint LDP In-Band Signaling for 1831 Point-to-Multipoint and 1832 Multipoint-to-Multipoint Label Switched 1833 Paths."; 1834 list fec-label { 1835 key 1836 "root-address rp group-address rd recur-root-address " 1837 + "recur-rd"; 1838 description 1839 "List of FEC to label bindings"; 1840 leaf root-address { 1841 type inet:ipv4-address; 1842 description 1843 "Root address"; 1844 } 1845 leaf rp { 1846 type inet:ip-address; 1847 description 1848 "Rendezvous-Point (RP) address"; 1849 } 1850 leaf group-address { 1851 type inet:ip-address-no-zone; 1852 description 1853 "Group address"; 1854 } 1855 leaf rd { 1856 type rt-types:route-distinguisher; 1857 description 1858 "Route Distinguisher"; 1859 reference 1860 "RFC7246: Multipoint Label Distribution 1861 Protocol In-Band Signaling in a Virtual 1862 Routing and Forwarding (VRF) Table 1863 Context."; 1864 } 1865 uses recursive-fec-attibutes; 1866 } // fec-label 1867 } // opaque-element-bidir 1868 } 1870 // IPv6 config 1871 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1872 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1873 + "ipv6" { 1874 description "Augmentation for MLDP IPv4 configuration"; 1875 uses mldp-ext-per-af-config-attibutes; 1876 } 1878 // Global forwarding-nexthop 1879 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1880 + "ldp:mpls-ldp/ldp:global/ldp-ext:forwarding-nexthop/" 1881 + "ldp-ext:interfaces/ldp-ext:interface/ldp-ext:address-family" { 1882 description 1883 "Augmentation for MLDP nexthop forwarding interface"; 1884 leaf mldp-disable { 1885 type boolean; 1886 description 1887 "Disable mLDP forwarding on this interface"; 1888 } 1889 } 1891 /* 1892 * Operational state data nodes 1893 */ 1894 // IPv4 state for per peer bindings 1895 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1896 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1897 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" 1898 + "mldp:opaque-element-lspid/mldp:fec-label/mldp:peer" { 1899 description "Augmentation for MLDP IPv4 state"; 1901 leaf mofrr-role { 1902 when "../mldp:direction = 'upstream'" { 1903 description 1904 "For upstream"; 1905 } 1906 type mofrr-role; 1907 description 1908 "The MOFRR status of this LSP"; 1909 } 1910 } 1912 // Peer capability state 1913 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1914 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:received-peer-state/" 1915 + "ldp:capability/mldp:mldp" { 1916 description 1917 "Augmentation for MLDP received peer state capability."; 1918 container hub-and-spoke { 1919 description 1920 "Configure hub-and-spoke-multipoint capability."; 1921 reference 1922 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1923 Label Switched Path"; 1924 leaf enable { 1925 type boolean; 1926 description 1927 "Enable hub-and-spoke-multipoint"; 1928 } 1929 } 1930 container node-protection { 1931 description 1932 "Configure node-protection capability"; 1933 reference 1934 "RFC7715: mLDP Node Protection."; 1935 leaf plr { 1936 type boolean; 1937 description 1938 "Point of Local Repair (PLR) capable for Multipoint LSP 1939 node protection"; 1940 } 1941 leaf merge-point { 1942 type boolean; 1943 description 1944 "Merge Point capable for Multipoint LSP node protection"; 1945 } // merge-point 1946 } // node-protection 1947 } 1949 // IPv4 bindings state 1950 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 1951 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 1952 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings" { 1953 description "Augmentation for MLDP IPv4 bindings."; 1954 container opaque-element-transit { 1955 description 1956 "The type of opaque value element is the transit IPv4 1957 source."; 1958 reference 1959 "RFC6826: Multipoint LDP In-Band Signaling for 1960 Point-to-Multipoint and 1961 Multipoint-to-Multipoint Label Switched Paths."; 1962 list fec-label { 1963 key 1964 "source-address group-address " 1965 + "rd recur-root-address recur-rd"; 1966 description 1967 "List of FEC to label bindings"; 1968 leaf source-address { 1969 type inet:ip-address; 1970 description 1971 "Source address"; 1972 } 1973 leaf group-address { 1974 type inet:ip-address-no-zone; 1975 description 1976 "Group address"; 1977 } 1978 leaf rd { 1979 type rt-types:route-distinguisher; 1980 description 1981 "Route Distinguisher"; 1982 reference 1983 "RFC7246: Multipoint Label Distribution 1984 Protocol In-Band Signaling in a Virtual 1985 Routing and Forwarding (VRF) Table 1986 Context."; 1987 } 1988 uses recursive-fec-attibutes; 1989 uses mldp-ext-binding-label-state-attributes; 1990 } // fec-label 1991 } // opaque-element-transit 1993 container opaque-element-bidir { 1994 description 1995 "The type of opaque value element is 1996 the generic LSP identifier."; 1997 reference 1998 "RFC6826: Multipoint LDP In-Band Signaling for 1999 Point-to-Multipoint and 2000 Multipoint-to-Multipoint Label Switched 2001 Paths."; 2002 list fec-label { 2003 key 2004 "rp group-address rd recur-root-address recur-rd"; 2005 description 2006 "List of FEC to label bindings"; 2007 leaf rp { 2008 type inet:ip-address; 2009 description 2010 "Rendezvous Point (RP) address"; 2011 } 2012 leaf group-address { 2013 type inet:ip-address-no-zone; 2014 description 2015 "Group address"; 2016 } 2017 leaf rd { 2018 type rt-types:route-distinguisher; 2019 description 2020 "Route Distinguisher"; 2021 reference 2022 "RFC7246: Multipoint Label Distribution 2023 Protocol In-Band Signaling in a Virtual 2024 Routing and Forwarding (VRF) Table 2025 Context."; 2026 } 2027 uses recursive-fec-attibutes; 2028 uses mldp-ext-binding-label-state-attributes; 2029 } // fec-label 2030 } // opaque-element-bidir 2031 } 2033 // IPv6 bindings state 2034 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 2035 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2036 + "ipv6/roots/root/bindings" { 2037 description "Augmentation for MLDP IPv6 bindings."; 2038 container opaque-element-transit { 2039 config false; 2040 description 2041 "The type of opaque value element is the transit IPv6 2042 source."; 2043 reference 2044 "RFC6826: Multipoint LDP In-Band Signaling for 2045 Point-to-Multipoint and 2046 Multipoint-to-Multipoint Label Switched 2047 Paths."; 2048 list fec-label { 2049 key 2050 "source-address group-address " 2051 + "rd recur-root-address recur-rd"; 2052 description 2053 "List of FEC to label bindings"; 2054 leaf source-address { 2055 type inet:ip-address; 2056 description 2057 "Source address"; 2058 } 2059 leaf group-address { 2060 type inet:ip-address-no-zone; 2061 description 2062 "Group address"; 2064 } 2065 leaf rd { 2066 type rt-types:route-distinguisher; 2067 description 2068 "Route Distinguisher"; 2069 reference 2070 "RFC7246: Multipoint Label Distribution 2071 Protocol In-Band Signaling in a Virtual 2072 Routing and Forwarding (VRF) Table 2073 Context."; 2074 } 2075 uses recursive-fec-attibutes; 2076 uses mldp-ext-binding-label-state-attributes; 2077 } // fec-label 2078 } // opaque-element-transit 2080 container opaque-element-bidir { 2081 config false; 2082 description 2083 "The type of opaque value element is 2084 the generic LSP identifier"; 2085 reference 2086 "RFC6826: Multipoint LDP In-Band Signaling for 2087 Point-to-Multipoint and 2088 Multipoint-to-Multipoint Label Switched 2089 Paths."; 2090 list fec-label { 2091 key 2092 "rp group-address rd recur-root-address recur-rd"; 2093 description 2094 "List of FEC to label bindings"; 2095 leaf rp { 2096 type inet:ip-address; 2097 description 2098 "Rendezvous Point (RP) address"; 2099 } 2100 leaf group-address { 2101 type inet:ip-address-no-zone; 2102 description 2103 "Group address"; 2104 } 2105 leaf rd { 2106 type rt-types:route-distinguisher; 2107 description 2108 "Route Distinguisher"; 2109 reference 2110 "RFC7246: Multipoint Label Distribution 2111 Protocol In-Band Signaling in a Virtual 2112 Routing and Forwarding (VRF) Table 2113 Context."; 2114 } 2115 uses recursive-fec-attibutes; 2116 uses mldp-ext-binding-label-state-attributes; 2117 } // fec-label 2118 } // opaque-element-bidir 2119 } 2121 // IPv4 bindings opaque-element-lspid state 2122 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 2123 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2124 + "mldp:ipv4/mldp:roots/mldp:root/mldp:bindings/" 2125 + "mldp:opaque-element-lspid/mldp:fec-label" { 2126 description 2127 "Augmentation for MLDP IPv4 bindings with opaque type LSP ID."; 2128 list recursive-fec { 2129 key 2130 "recur-root-address recur-rd"; 2131 description 2132 "List of recursive opaque values"; 2133 uses recursive-fec-attibutes; 2134 uses mldp-ext-binding-label-state-attributes; 2135 } // fec-label 2136 } 2138 // IPv6 bindings opaque-element-lspid state 2139 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 2140 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families/" 2141 + "ipv6/roots/root/bindings/opaque-element-lspid/fec-label" { 2142 description 2143 "Augmentation for MLDP IPv6 bindings with opaque type LSP ID."; 2144 list recursive-fec { 2145 key "recur-root-address recur-rd"; 2146 config false; 2147 description 2148 "List of recursive opaque values"; 2149 uses recursive-fec-attibutes; 2150 uses mldp-ext-binding-label-state-attributes; 2151 } // fec-label 2152 } 2154 /* 2155 * Per AF augmentation 2156 */ 2157 // IPv6 augmentation 2158 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/" 2159 + "ldp:mpls-ldp/ldp:global/mldp:mldp/mldp:address-families" { 2160 description "Augmentation for MLDP IPv6 address family."; 2161 container ipv6 { 2162 description 2163 "IPv6 information"; 2165 container roots { 2166 config false; 2167 description 2168 "IPv6 multicast LSP roots"; 2169 list root { 2170 key "root-address"; 2171 description 2172 "List of roots for configured multicast LSPs"; 2174 leaf root-address { 2175 type inet:ipv6-address; 2176 description 2177 "Root address"; 2178 } 2180 leaf is-self { 2181 type boolean; 2182 description 2183 "This is the root"; 2184 } 2186 list reachability { 2187 key "address interface"; 2188 description 2189 "A next-hop for reachability to root, 2190 as a RIB view"; 2191 leaf address { 2192 type inet:ipv6-address; 2193 description 2194 "The next-hop address to reach root"; 2195 } 2196 leaf interface { 2197 type if:interface-ref; 2198 description 2199 "Interface connecting to next-hop"; 2200 } 2201 leaf peer { 2202 type leafref { 2203 path 2204 "../../../../../../../../ldp:peers/" 2205 + "ldp:peer/ldp:lsr-id"; 2206 } 2207 description 2208 "LDP peer from which this next-hop can be 2209 reached"; 2210 } 2211 } 2213 container bindings { 2214 description 2215 "mLDP FEC to label bindings"; 2216 container opaque-element-lspid { 2217 description 2218 "The type of opaque value element is 2219 the generic LSP identifier"; 2220 reference 2221 "RFC6388: Label Distribution Protocol 2222 Extensions for Point-to-Multipoint and 2223 Multipoint-to-Multipoint Label Switched 2224 Paths."; 2225 list fec-label { 2226 key 2227 "lsp-id"; 2228 description 2229 "List of FEC to label bindings"; 2230 leaf lsp-id { 2231 type uint32; 2232 description "ID to identify the LSP"; 2233 } 2234 leaf multipoint-type { 2235 type mldp:multipoint-type; 2236 description 2237 "The type of mutipoint: p2mp or mp2mp"; 2238 } 2240 uses mldp-ext-binding-label-state-attributes; 2241 } // fec-label 2242 } // opaque-element-lspid 2243 } // bindings 2244 } // list root 2245 } // roots 2247 container configured-leaf-lsps { 2248 description 2249 "Configured multicast LSPs"; 2251 container opaque-element-lspid { 2252 description 2253 "The type of opaque value element is 2254 the generic LSP identifier"; 2255 reference 2256 "RFC6388: Label Distribution Protocol 2257 Extensions for Point-to-Multipoint and 2258 Multipoint-to-Multipoint Label Switched 2259 Paths."; 2260 list fec-label { 2261 key 2262 "root-address lsp-id"; 2263 description 2264 "List of FEC to label bindings"; 2265 leaf root-address { 2266 type inet:ipv6-address; 2267 description 2268 "Root address"; 2269 } 2270 leaf lsp-id { 2271 type uint32; 2272 description "ID to identify the LSP"; 2273 } 2274 leaf multipoint-type { 2275 type mldp:multipoint-type; 2276 description 2277 "The type of mutipoint: p2mp or mp2mp"; 2278 } 2279 list recursive-fec { 2280 key 2281 "recur-root-address recur-rd"; 2282 description 2283 "List of recursive opaque values"; 2284 uses recursive-fec-attibutes; 2285 } // fec-label 2286 } // fec-label 2287 } // opaque-element-lspid 2289 container opaque-element-transit { 2290 description 2291 "The type of opaque value element is the transit IPv4 2292 source."; 2293 reference 2294 "RFC6826: Multipoint LDP In-Band Signaling for 2295 Point-to-Multipoint and 2296 Multipoint-to-Multipoint Label Switched Paths."; 2297 list fec-label { 2298 key 2299 "root-address source-address group-address " 2300 + "rd recur-root-address recur-rd"; 2301 description 2302 "List of FEC to label bindings"; 2303 leaf root-address { 2304 type inet:ipv6-address; 2305 description 2306 "Root address"; 2307 } 2308 leaf source-address { 2309 type inet:ip-address; 2310 description 2311 "Source address"; 2312 } 2313 leaf group-address { 2314 type inet:ip-address-no-zone; 2315 description 2316 "Group address"; 2317 } 2318 leaf rd { 2319 type rt-types:route-distinguisher; 2320 description 2321 "Route Distinguisher"; 2322 reference 2323 "RFC7246: Multipoint Label Distribution 2324 Protocol In-Band Signaling in a Virtual 2325 Routing and Forwarding (VRF) Table 2326 Context."; 2327 } 2328 uses recursive-fec-attibutes; 2329 } // fec-label 2330 } // opaque-element-transit 2332 container opaque-element-bidir { 2333 description 2334 "The type of opaque value element is 2335 the generic LSP identifier"; 2336 reference 2337 "RFC6826: Multipoint LDP In-Band Signaling for 2338 Point-to-Multipoint and 2339 Multipoint-to-Multipoint Label Switched 2340 Paths."; 2341 list fec-label { 2342 key 2343 "root-address rp group-address rd recur-root-address " 2344 + "recur-rd"; 2345 description 2346 "List of FEC to label bindings."; 2347 leaf root-address { 2348 type inet:ipv6-address; 2349 description 2350 "Root address"; 2351 } 2352 leaf rp { 2353 type inet:ip-address; 2354 description 2355 "Rendezvous Point (RP) address"; 2356 } 2357 leaf group-address { 2358 type inet:ip-address-no-zone; 2359 description 2360 "Group address"; 2361 } 2362 leaf rd { 2363 type rt-types:route-distinguisher; 2364 description 2365 "Route Distinguisher"; 2366 reference 2367 "RFC7246: Multipoint Label Distribution 2368 Protocol In-Band Signaling in a Virtual 2369 Routing and Forwarding (VRF) Table 2370 Context."; 2371 } 2372 uses recursive-fec-attibutes; 2373 } // fec-label 2374 } // opaque-element-bidir 2375 } // configured-leaf-lsps 2376 } // ipv6 2377 } 2379 /* 2380 * Global augmentation 2381 */ 2382 /* 2383 * Notifications 2384 */ 2385 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element/" 2386 + "mldp:opaque-element-lspid/mldp:opaque-element-lspid" { 2387 description 2388 "Augmentation for MLDP notification for opaque-element-lspid."; 2389 container recursive-fec { 2390 description 2391 "Container of recursive opaque values"; 2392 uses recursive-fec-attibutes; 2393 } // fec-label 2394 } 2396 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element" { 2397 description 2398 "Augmentation for MLDP notification."; 2399 case opaque-element-transit { 2400 container opaque-element-transit { 2401 description 2402 "The type of opaque value element is the transit IPv4 2403 source."; 2404 reference 2405 "RFC6826: Multipoint LDP In-Band Signaling for 2406 Point-to-Multipoint and 2407 Multipoint-to-Multipoint Label Switched Paths."; 2408 leaf root-address { 2409 type inet:ip-address; 2410 description 2411 "Root address"; 2412 } 2413 leaf source-address { 2414 type inet:ip-address; 2415 description 2416 "Source address"; 2417 } 2418 leaf group-address { 2419 type inet:ip-address-no-zone; 2420 description 2421 "Group address"; 2422 } 2423 leaf rd { 2424 type rt-types:route-distinguisher; 2425 description 2426 "Route Distinguisher"; 2427 reference 2428 "RFC7246: Multipoint Label Distribution 2429 Protocol In-Band Signaling in a Virtual 2430 Routing and Forwarding (VRF) Table 2431 Context."; 2432 } 2433 uses recursive-fec-attibutes; 2434 } // opaque-element-transit 2435 } // opaque-element-transit 2437 case opaque-element-bidir { 2438 container opaque-element-bidir { 2439 description 2440 "The type of opaque value element is 2441 the generic LSP identifier"; 2442 reference 2443 "RFC6826: Multipoint LDP In-Band Signaling for 2444 Point-to-Multipoint and 2445 Multipoint-to-Multipoint Label Switched 2446 Paths."; 2447 leaf root-address { 2448 type inet:ip-address; 2449 description 2450 "Root address"; 2451 } 2452 leaf rp { 2453 type inet:ip-address; 2454 description 2455 "Rendezvous Point (RP) address"; 2456 } 2457 leaf group-address { 2458 type inet:ip-address-no-zone; 2459 description 2460 "Group address"; 2461 } 2462 leaf rd { 2463 type rt-types:route-distinguisher; 2464 description 2465 "Route Distinguisher"; 2466 reference 2467 "RFC7246: Multipoint Label Distribution 2468 Protocol In-Band Signaling in a Virtual 2469 Routing and Forwarding (VRF) Table 2470 Context."; 2471 } 2472 uses recursive-fec-attibutes; 2473 } // opaque-element-bidir 2474 } // opaque-element-bidir 2475 } 2476 } 2477 2479 Figure 15 2481 10. Security Considerations 2483 The YANG module specified in this document defines a schema for data 2484 that is designed to be accessed via network management protocols such 2485 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 2486 is the secure transport layer, and the mandatory-to-implement secure 2487 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 2488 is HTTPS, and the mandatory-to-implement secure transport is TLS 2489 [RFC8446]. 2491 The Network Configuration Access Control Model (NACM) [RFC8341] 2492 provides the means to restrict access for particular NETCONF or 2493 RESTCONF users to a preconfigured subset of all available NETCONF or 2494 RESTCONF protocol operations and content. 2496 There are a number of data nodes defined in this YANG module that are 2497 writable/creatable/deletable (i.e., config true, which is the 2498 default). These data nodes may be considered sensitive or vulnerable 2499 in some network environments. Write operations (e.g., edit-config) 2500 to these data nodes without proper protection can have a negative 2501 effect on network operations. 2503 Some of the readable data nodes in this YANG module may be considered 2504 sensitive or vulnerable in some network environments. It is thus 2505 important to control read access (e.g., via get, get-config, or 2506 notification) to these data nodes. 2508 It goes without saying that this specification also inherits the 2509 security considerations captured in the actual protocol specification 2510 documents, namely base mLDP [RFC6388], targeted mLDP [RFC7060], mLDP 2511 Recursive FEC [RFC6512], Multicast-only FRR [RFC7431], mLDP Node 2512 Protection [RFC7715], mLDP In-band Signaling [RFC6826] [RFC7246] 2513 [RFC7438], and Hub-and-Spoke Multipoint LSPs [RFC7140]. 2515 11. IANA Considerations 2517 This document requests the registration of the following URIs in the 2518 IETF "XML registry" [RFC3688]: 2520 +------------------------------------------------+------------+-----+ 2521 | URI | Registrant | XML | 2522 +------------------------------------------------+------------+-----+ 2523 | urn:ietf:params:xml:ns:yang:ietf-mpls-mldp | The IESG | N/A | 2524 | | | | 2525 | urn:ietf:params:xml:ns:yang:ietf-mpls-mldp- | The IESG | N/A | 2526 | extended | | | 2527 +------------------------------------------------+------------+-----+ 2529 This document requests the registration of the following YANG modules 2530 in the "YANG Module Names" registry [RFC6020]: 2532 +----------------+--------------------------------+--------+--------+ 2533 | Name | Namespace | Prefix | Refere | 2534 | | | | nce | 2535 +----------------+--------------------------------+--------+--------+ 2536 | ietf-mpls-mldp | urn:ietf:params:xml:ns:yang:ie | mldp | This d | 2537 | | tf-mpls-mldp | | ocumen | 2538 | | | | t | 2539 | | | | | 2540 | ietf-mpls- | urn:ietf:params:xml:ns:yang:ie | mldp- | This d | 2541 | mldp-extended | tf-mpls-mldp-extended | ext | ocumen | 2542 | | | | t | 2543 +----------------+--------------------------------+--------+--------+ 2545 12. Acknowledgments 2547 The authors would like to acknowledge Ladislav Lhotka and Acee Lindem 2548 for their review and comments. 2550 13. References 2552 13.1. Normative References 2554 [I-D.ietf-mpls-ldp-yang] 2555 Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. 2556 Shah, "YANG Data Model for MPLS LDP", draft-ietf-mpls-ldp- 2557 yang-09 (work in progress), March 2020. 2559 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2560 Requirement Levels", BCP 14, RFC 2119, 2561 DOI 10.17487/RFC2119, March 1997, 2562 . 2564 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 2565 DOI 10.17487/RFC3688, January 2004, 2566 . 2568 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2569 the Network Configuration Protocol (NETCONF)", RFC 6020, 2570 DOI 10.17487/RFC6020, October 2010, 2571 . 2573 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2574 and A. Bierman, Ed., "Network Configuration Protocol 2575 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2576 . 2578 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2579 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2580 . 2582 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 2583 Thomas, "Label Distribution Protocol Extensions for Point- 2584 to-Multipoint and Multipoint-to-Multipoint Label Switched 2585 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 2586 . 2588 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 2589 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 2590 November 2011, . 2592 [RFC6512] Wijnands, IJ., Rosen, E., Napierala, M., and N. Leymann, 2593 "Using Multipoint LDP When the Backbone Has No Route to 2594 the Root", RFC 6512, DOI 10.17487/RFC6512, February 2012, 2595 . 2597 [RFC6826] Wijnands, IJ., Ed., Eckert, T., Leymann, N., and M. 2598 Napierala, "Multipoint LDP In-Band Signaling for Point-to- 2599 Multipoint and Multipoint-to-Multipoint Label Switched 2600 Paths", RFC 6826, DOI 10.17487/RFC6826, January 2013, 2601 . 2603 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 2604 RFC 6991, DOI 10.17487/RFC6991, July 2013, 2605 . 2607 [RFC7060] Napierala, M., Rosen, E., and IJ. Wijnands, "Using LDP 2608 Multipoint Extensions on Targeted LDP Sessions", RFC 7060, 2609 DOI 10.17487/RFC7060, November 2013, 2610 . 2612 [RFC7140] Jin, L., Jounay, F., Wijnands, IJ., and N. Leymann, "LDP 2613 Extensions for Hub and Spoke Multipoint Label Switched 2614 Path", RFC 7140, DOI 10.17487/RFC7140, March 2014, 2615 . 2617 [RFC7246] Wijnands, IJ., Ed., Hitchen, P., Leymann, N., Henderickx, 2618 W., Gulko, A., and J. Tantsura, "Multipoint Label 2619 Distribution Protocol In-Band Signaling in a Virtual 2620 Routing and Forwarding (VRF) Table Context", RFC 7246, 2621 DOI 10.17487/RFC7246, June 2014, 2622 . 2624 [RFC7431] Karan, A., Filsfils, C., Wijnands, IJ., Ed., and B. 2625 Decraene, "Multicast-Only Fast Reroute", RFC 7431, 2626 DOI 10.17487/RFC7431, August 2015, 2627 . 2629 [RFC7438] Wijnands, IJ., Ed., Rosen, E., Gulko, A., Joorde, U., and 2630 J. Tantsura, "Multipoint LDP (mLDP) In-Band Signaling with 2631 Wildcards", RFC 7438, DOI 10.17487/RFC7438, January 2015, 2632 . 2634 [RFC7715] Wijnands, IJ., Ed., Raza, K., Atlas, A., Tantsura, J., and 2635 Q. Zhao, "Multipoint LDP (mLDP) Node Protection", 2636 RFC 7715, DOI 10.17487/RFC7715, January 2016, 2637 . 2639 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2640 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 2641 . 2643 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2644 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2645 May 2017, . 2647 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 2648 "Common YANG Data Types for the Routing Area", RFC 8294, 2649 DOI 10.17487/RFC8294, December 2017, 2650 . 2652 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 2653 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 2654 . 2656 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 2657 Access Control Model", STD 91, RFC 8341, 2658 DOI 10.17487/RFC8341, March 2018, 2659 . 2661 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 2662 and R. Wilton, "Network Management Datastore Architecture 2663 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 2664 . 2666 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 2667 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 2668 . 2670 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 2671 Routing Management (NMDA Version)", RFC 8349, 2672 DOI 10.17487/RFC8349, March 2018, 2673 . 2675 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 2676 Documents Containing YANG Data Models", BCP 216, RFC 8407, 2677 DOI 10.17487/RFC8407, October 2018, 2678 . 2680 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 2681 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 2682 . 2684 13.2. Informative References 2686 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 2687 RFC 7951, DOI 10.17487/RFC7951, August 2016, 2688 . 2690 Appendix A. Data Tree Example 2692 This section contains an example of an instance data tree in the JSON 2693 encoding [RFC7951], containing both configuration and state data. 2695 lo0: 2001:db8:0:200::1 (Root Address) 2696 +-------+ 2697 | | Router| | 2698 eth21 +---+ R2 +---+ eth23 2699 | | (Root)| | 2700 | +-------+ | lo0: 2001:db8:0:300::1 2701 | +-------+ | | +-------+ | 2702 | | Router| | | | Router| | 2703 eth10 +--+ R1 +---+ eth12 eth32 +---+ R3 +--+ eth30 2704 | | | | | | | | 2705 | +-------+ | | +-------+ | 2706 lo0: 2001:db8:0:200::1 (Root Address) 2708 The configuration instance data tree for Router R3 in the above 2709 figure could be as follows: 2711 { 2712 "ietf-interfaces:interfaces": { 2713 "interface": [ 2714 { 2715 "name": "lo0", 2716 "description": "R3 loopback interface.", 2717 "type": "iana-if-type:softwareLoopback", 2718 "ietf-ip:ipv6": { 2719 "address": [ 2720 { 2721 "ip": "2001:db8:0:300::1", 2722 "prefix-length": 64 2723 } 2724 ] 2725 } 2726 }, 2727 { 2728 "name": "eth30", 2729 "description": "An interface connected to client routers.", 2730 "type": "iana-if-type:ethernetCsmacd", 2731 "ietf-ip:ipv6": { 2732 "forwarding": true 2733 } 2734 }, 2735 { 2736 "name": "eth32", 2737 "description": "An interface connected to root (R2).", 2738 "type": "iana-if-type:ethernetCsmacd", 2739 "ietf-ip:ipv6": { 2740 "forwarding": true 2741 } 2742 } 2743 ] 2744 }, 2745 "ietf-routing:routing": { 2746 "router-id": "203.0.113.3", 2747 "control-plane-protocols": { 2748 "ietf-mpls-ldp:mpls-ldp": { 2749 "global": { 2750 "address-families": { 2751 "ietf-mpls-ldp-extended:ipv6": { 2752 "enable": true 2753 } 2754 }, 2755 "capability": { 2756 "ietf-mpls-mldp:mldp": { 2757 "mp2mp": { 2758 "enable": true 2759 } 2760 } 2761 }, 2762 "ietf-mpls-mldp:mldp": { 2763 "enable": true, 2764 "address-families": { 2765 "ietf-mpls-mldp-extended:ipv6": { 2766 "configured-leaf-lsps": { 2767 "opaque-element-lspid": { 2768 "fec-label": [ 2769 { 2770 "root-address": "2001:db8:0:200::1", 2771 "lsp-id": 201, 2772 "multipoint-type": "mp2mp" 2773 } 2774 ] 2775 } 2776 } 2777 } 2779 } 2780 } 2781 }, 2782 "discovery": { 2783 "interfaces": { 2784 "interface": [ 2785 { 2786 "name": "eth30", 2787 "address-families": { 2788 "ietf-mpls-ldp-extended:ipv6": { 2789 "enable": true 2790 } 2791 } 2792 }, 2793 { 2794 "name": "eth32", 2795 "address-families": { 2796 "ietf-mpls-ldp-extended:ipv6": { 2797 "enable": true 2798 } 2799 } 2800 } 2801 ] 2802 } 2803 } 2804 } 2805 } 2806 } 2807 } 2809 The cooresponding operational state data for Router R3 could be as 2810 follows: 2812 { 2813 "ietf-interfaces:interfaces": { 2814 "interface": [ 2815 { 2816 "name": "lo0", 2817 "description": "R3 loopback interface.", 2818 "type": "iana-if-type:softwareLoopback", 2819 "phys-address": "00:00:5e:00:53:03", 2820 "oper-status": "up", 2821 "statistics": { 2822 "discontinuity-time": "2018-10-15T12:34:56-05:00" 2823 }, 2824 "ietf-ip:ipv6": { 2825 "mtu": 1500, 2826 "address": [ 2827 { 2828 "ip": "2001:db8:0:300::1", 2829 "prefix-length": 64, 2830 "origin": "static", 2831 "status": "preferred" 2832 }, 2833 { 2834 "ip": "fe80::200:5eff:fe00:5303", 2835 "prefix-length": 64, 2836 "origin": "link-layer", 2837 "status": "preferred" 2838 } 2839 ], 2840 "neighbor": [ 2841 ] 2842 } 2843 }, 2844 { 2845 "name": "eth30", 2846 "description": "An interface connected to client routers.", 2847 "type": "iana-if-type:ethernetCsmacd", 2848 "phys-address": "00:00:5e:00:53:30", 2849 "oper-status": "up", 2850 "statistics": { 2851 "discontinuity-time": "2018-10-15T12:34:56-05:00" 2852 }, 2853 "ietf-ip:ipv6": { 2854 "forwarding": true, 2855 "mtu": 1500, 2856 "address": [ 2857 { 2858 "ip": "fe80::200:5eff:fe00:5330", 2859 "prefix-length": 64, 2860 "origin": "link-layer", 2861 "status": "preferred" 2862 } 2863 ], 2864 "neighbor": [ 2865 ] 2866 } 2867 }, 2868 { 2869 "name": "eth32", 2870 "description": "An interface connected to root (R2).", 2871 "type": "iana-if-type:ethernetCsmacd", 2872 "phys-address": "00:00:5e:00:53:32", 2873 "oper-status": "up", 2874 "statistics": { 2875 "discontinuity-time": "2018-10-15T12:34:56-05:00" 2876 }, 2877 "ietf-ip:ipv6": { 2878 "forwarding": true, 2879 "mtu": 1500, 2880 "address": [ 2881 { 2882 "ip": "fe80::200:5eff:fe00:5332", 2883 "prefix-length": 64, 2884 "origin": "link-layer", 2885 "status": "preferred" 2886 } 2887 ], 2888 "neighbor": [ 2889 { 2890 "ip": "fe80::200:5eff:fe00:5323", 2891 "link-layer-address": "00:00:5e:00:53:23", 2892 "origin": "dynamic", 2893 "is-router": [null], 2894 "state": "reachable" 2895 } 2896 ] 2897 } 2898 } 2899 ] 2900 }, 2901 "ietf-routing:routing": { 2902 "router-id": "203.0.113.3", 2903 "interfaces": { 2904 "interface": [ 2905 "lo0", 2906 "eth30", 2907 "eth32" 2908 ] 2909 }, 2910 "control-plane-protocols": { 2911 "ietf-mpls-ldp:mpls-ldp": { 2912 "global": { 2913 "address-families": { 2914 "ietf-mpls-ldp-extended:ipv6": { 2915 "enable": true 2916 } 2917 }, 2918 "capability": { 2919 "ietf-mpls-mldp:mldp": { 2920 "mp2mp": { 2921 "enable": true 2922 } 2924 } 2925 }, 2926 "ietf-mpls-mldp:mldp": { 2927 "enable": true, 2928 "address-families": { 2929 "ietf-mpls-mldp-extended:ipv6": { 2930 "configured-leaf-lsps": { 2931 "opaque-element-lspid": { 2932 "fec-label": [ 2933 { 2934 "root-address": "2001:db8:0:200::1", 2935 "lsp-id": 201, 2936 "multipoint-type": "mp2mp" 2937 } 2938 ] 2939 } 2940 }, 2941 "roots": { 2942 "root": [ 2943 { 2944 "root-address": "2001:db8:0:200::1", 2945 "is-self": false, 2946 "reachability": [ 2947 { 2948 "address": "fe80::200:5eff:fe00:5323", 2949 "interface": "eth32", 2950 "peer": "203.0.113.2" 2951 } 2952 ], 2953 "bindings": { 2954 "opaque-element-lspid": { 2955 "fec-label": [ 2956 { 2957 "lsp-id": 201, 2958 "multipoint-type": "mp2mp", 2959 "peer": [ 2960 { 2961 "direction": "upstream", 2962 "peer": "203.0.113.2", 2963 "advertisement-type": "advertised", 2964 "label": 3201 2965 }, 2966 { 2967 "direction": "upstream", 2968 "peer": "203.0.113.2", 2969 "advertisement-type": "received", 2970 "label": 2301 2971 } 2973 ] 2974 } 2975 ] 2976 } 2977 } 2978 } 2979 ] 2980 } 2981 } 2982 } 2983 } 2984 }, 2985 "discovery": { 2986 "interfaces": { 2987 "interface": [ 2988 { 2989 "name": "eth30", 2990 "address-families": { 2991 "ietf-mpls-ldp-extended:ipv6": { 2992 "enable": true, 2993 "hello-adjacencies": { 2994 "hello-adjacency": [ 2995 ] 2996 } 2997 } 2998 } 2999 }, 3000 { 3001 "name": "eth32", 3002 "address-families": { 3003 "ietf-mpls-ldp-extended:ipv6": { 3004 "enable": true, 3005 "hello-adjacencies": { 3006 "hello-adjacency": [ 3007 { 3008 "adjacent-address": 3009 "fe80::200:5eff:fe00:5323", 3010 "flag": ["adjacency-flag-active"], 3011 "hello-holdtime": { 3012 "adjacent": 15, 3013 "negotiated": 15, 3014 "remaining": 9 3015 }, 3016 "next-hello": 3, 3017 "statistics": { 3018 "discontinuity-time": 3019 "2018-10-15T12:34:56-05:00" 3020 }, 3021 "peer": { 3022 "lsr-id": "203.0.113.2", 3023 "label-space-id": 0 3024 } 3025 } 3026 ] 3027 } 3028 } 3029 } 3030 } 3031 ] 3032 } 3033 }, 3034 "peers": { 3035 "peer": [ 3036 { 3037 "lsr-id": "203.0.113.2", 3038 "label-space-id": 0, 3039 "label-advertisement-mode": { 3040 "local": "downstream-unsolicited", 3041 "peer": "downstream-unsolicited", 3042 "negotiated": "downstream-unsolicited" 3043 }, 3044 "next-keep-alive": 5, 3045 "session-holdtime": { 3046 "peer": 180, 3047 "negotiated": 180, 3048 "remaining": 78 3049 }, 3050 "session-state": "operational", 3051 "tcp-connection": { 3052 "local-address": "fe80::200:5eff:fe00:5332", 3053 "local-port": 646, 3054 "remote-address": "fe80::200:5eff:fe00:5323", 3055 "remote-port": 646 3056 }, 3057 "up-time": "P2H33M5S", 3058 "statistics": { 3059 "discontinuity-time": "2018-10-15T12:34:56-05:00" 3060 }, 3061 "received-peer-state": { 3062 "capability": { 3063 "ietf-mpls-mldp:mldp": { 3064 "mp2mp": { 3065 "enable": true 3066 } 3067 } 3068 } 3070 } 3071 } 3072 ] 3073 } 3074 } 3075 } 3076 } 3077 } 3079 Appendix B. Additional Contributors 3081 Matthew Bocci 3082 Nokia 3083 Email: matthew.bocci@nokia.com 3085 Authors' Addresses 3087 Kamran Raza 3088 Cisco Systems, Inc. 3089 Email: skraza@cisco.com 3091 Xufeng Liu 3092 Volta Networks 3093 Email: xufeng.liu.ietf@gmail.com 3095 Santosh Esale 3096 Juniper Networks 3097 Email: santosh_easale@berkeley.edu 3099 Loa Andersson 3100 Huawei Technologies 3101 Email: loa@pi.nu 3103 Jeff Tantsura 3104 Nuage Networks 3105 Email: jefftant.ietf@gmail.com 3106 Sowmya Krishnaswamy 3107 Individual 3108 Email: krishnaswamy.sowmya@gmail.com 3110 Rajiv Asati 3111 Cisco Systems, Inc. 3112 Email: rajiva@cisco.com 3114 Xia Chen 3115 Huawei Technologies 3116 Email: jescia.chenxia@huawei.com 3118 Himanshu Shah 3119 Ciena Corporation 3120 Email: hshah@ciena.com