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