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