idnits 2.17.1 draft-ietf-mpls-mldp-yang-00.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 39 instances of too long lines in the document, the longest one being 81 characters in excess of 72. == There are 9 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. == There are 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 311 has weird spacing: '...address ine...' == Line 314 has weird spacing: '...address ine...' == Line 318 has weird spacing: '...address ine...' == Line 321 has weird spacing: '...address ine...' == Line 326 has weird spacing: '...address ine...' == (23 more instances...) == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (November 12, 2016) is 2693 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 2016, but no explicit reference was found in the text == Unused Reference: 'RFC5561' is defined on line 2020, but no explicit reference was found in the text == Unused Reference: 'RFC6020' is defined on line 2025, but no explicit reference was found in the text == Unused Reference: 'RFC6241' is defined on line 2030, but no explicit reference was found in the text == Unused Reference: 'RFC6536' is defined on line 2050, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-rtgwg-policy-model' is defined on line 2090, but no explicit reference was found in the text == Unused Reference: 'I-D.iwijnand-mpls-mldp-multi-topology' is defined on line 2096, but no explicit reference was found in the text ** 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: 2 errors (**), 0 flaws (~~), 19 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: May 16, 2017 5 X. Liu 6 Kuatro Technologies 8 S. Esale 9 Juniper Networks 11 X. Chen 12 Huawei Technologies 14 Jeff Tantsura 16 November 12, 2016 18 YANG Data Model for MPLS mLDP 19 draft-ietf-mpls-mldp-yang-00 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 May 16, 2017. 44 Copyright Notice 46 Copyright (c) 2016 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 62 2. Specification of Requirements . . . . . . . . . . . . . . . . 3 63 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 64 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 4 65 4.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 4 66 4.2. mldp container . . . . . . . . . . . . . . . . . . . . . 6 67 4.3. Leveraging LDP containers . . . . . . . . . . . . . . . . 6 68 4.4. YANG tree . . . . . . . . . . . . . . . . . . . . . . . . 7 69 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 9 70 5.1. Derived states . . . . . . . . . . . . . . . . . . . . . 13 71 5.1.1. Root state . . . . . . . . . . . . . . . . . . . . . 13 72 5.1.2. Bindings state . . . . . . . . . . . . . . . . . . . 14 73 5.1.3. Capabilities state . . . . . . . . . . . . . . . . . 18 74 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 18 75 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 76 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 18 77 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 19 78 10. Security Considerations . . . . . . . . . . . . . . . . . . . 43 79 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43 80 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 44 81 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 82 13.1. Normative References . . . . . . . . . . . . . . . . . . 44 83 13.2. Informative References . . . . . . . . . . . . . . . . . 45 84 Appendix A. Additional Contributors . . . . . . . . . . . . . . 46 85 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46 87 1. Introduction 89 This document introduces a YANG data model for MPLS Multipoint Label 90 Distribution Protocol (mLDP). The mLDP model being defined here is 91 highly dependent on LDP YANG data model 93 [I-D.ietf-mpls-ldp-mldp-yang]. This implies that an opertor will 94 need to use base LDP module to configure and manage control plane for 95 mLDP. For example, an operator would enable LDP discovery on MPLS 96 interface to establish LDP/mLDP peering on which mLDP bindings could 97 be exchanged. Similarly, an operator could query state information 98 for an LDP peer in order to verify peering attributes etc. 100 Moreover, it is important to note here that any assumptions made in 101 the LDP model also hold true in this document, unless otherwise 102 explicitly stated. 104 This document specifies mLDP model under ietf-mpls-mldp that augments 105 LDP model as defined under ietf-mpls-ldp 106 [I-D.ietf-mpls-ldp-mldp-yang]. Like its base LDP data model, this 107 model also defines the following constructs for managing the mLDP 108 protocol: 110 o Configuration 112 o Operational State 114 o Executables (Actions) 116 o Notifications 118 This document is organized to define the data model for each of the 119 above constructs in the sequence as listed above. 121 2. Specification of Requirements 123 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 124 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 125 document are to be interpreted as described in [RFC2119]. 127 3. Overview 129 Following are the main mLDP areas and features that are within the 130 scope of this model: 132 o mLDP Base Specification [RFC6388] 134 o mLDP Recursive FEC [RFC6512] 136 o Targeted mLDP [RFC7060] 138 o mLDP Fast-Reroute (FRR): 140 * Node Protection [RFC7715] 141 * Multicast-only 143 o In-band Signaling: 145 * mLDP In-band Signaling [RFC6826] 147 * mLDP In-band signaling in a VRF [RFC7246] 149 * mLDP In-band Signaling with Wildcards [RFC7438] 151 o Hub-and-Spoke Multipoint LSPs [RFC7140] 153 o Configured Leaf LSPs (manually provisioned) 155 [Ed Note: Some of the topics in the above list are to be addressed/ 156 extended in a later revision of this document]. 158 4. Configuration 160 4.1. Configuration Hierarchy 162 In terms of overall configuration layout, following figure highlights 163 extensions to LDP configuration model to incorporate mLDP: 165 module: ietf-mpls-ldp 166 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 167 +-- mpls-ldp 168 +-- global 169 | +-- ... 170 | +-- ... 171 | +-- mldp (augmentation) 172 | | +-- ... 173 | | +-- ... 174 | | +-- address-family* [afi] 175 | | +-- ... 176 | | +-- ... 177 | | +-- configured-leaf-lsps 178 | | +-- p2mp 179 | | | +-- ... 180 | | | +-- ... 181 | | +-- mp2mp 182 | | +-- ... 183 | | +-- ... 184 | +-- capability 185 | +-- ... 186 | +-- ... 187 | +-- mldp (augmentation) 188 | +-- ... 189 | +-- ... 190 +-- peers 191 +-- ... 192 +-- ... 193 +-- peer* 194 +-- ... 195 +-- ... 196 +-- capability 197 +-- ... 198 +-- ... 199 +-- mldp 200 +-- ... 201 +-- ... 203 Figure 1 205 From above hierarchy, we can categorize mLDP configuration parameters 206 into two types: 208 o Parameters that are mLDP specific 210 o Parameters that leverage/extend LDP containers and parameters 211 Following subsections first describe mLDP specific configuration 212 parameters, followed by those leveraging LDP. 214 4.2. mldp container 216 mldp container is an augmentation of LDP global container and holds 217 the configuration related to items that are mLDP specific. The main 218 items under this container are: 220 o mLDP enabling: To enable mLDP under a (VRF) routing instance, mldp 221 container is enabled under LDP. Given that mLDP requires LDP 222 signalling, it is not sensible to allow disabling LDP control 223 plane under a (VRF) network-instance while requiring mLDP to be 224 enabled for the same. However, if a user wants only to allow 225 signalling for multipoint FECs on an LDP/mLDP enabled VRF 226 instance, he/she can use LDP label-policies to disable unicast 227 FECs under the VRF. 229 o mLDP per-AF features: mLDP manages its own list of IP address- 230 families and the features enabled underneath. The per-AF mLDP 231 configuration items include: 233 * Multicast-only FRR: This enables Multicast-only FRR 234 functionality for a given AF under mLDP. The feature allows 235 route-policy to be configured for finer control/applicability 236 of the feature. 238 * Recursive FEC: The recursive-fec feature [RFC6512] can be 239 enabled per AF with a route-policy. 241 * Configured Leaf LSPs: To provision multipoint leaf LSP 242 manually, a container is provided per-AF under LDP. The 243 configuration is flexible and allows a user to specify MP LSPs 244 of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by 245 using either LSP-Id or (S,G). 247 Targeted mLDP feature specification [RFC7060] does not require any 248 mLDP specific configuration. It, however, requires LDP upstream- 249 label-assignment capability [RFC6389] to be enabled. 251 4.3. Leveraging LDP containers 253 mLDP configuration model leverages following configuration areas and 254 containers that are already defined for LDP: 256 o Capabilities: A new container "mldp" is defined that augments 257 LDP's capabilities container. This new container specifies any 258 mLDP specific capabilities and their parameters. Moreover, a new 259 "mldp" container is also added by augmenting LDP per-peer 260 capability container to override/control mLDP specific 261 capabilities on a peer level. In the scope of this document, the 262 most important capabilities related to mLDP are p2mp, mp2mp, make- 263 before-break, hub-and-spoke, and node-protection. 265 o Discovery and Peer: mLDP requires LDP discovery and peer 266 procedures to form mLDP peering. A peer is treated as mLDP peer 267 only when either P2MP or MP2MP capabilities have been successfully 268 exchanged with the peer. If a user wish to selectively enable or 269 disable mLDP with a LDP-enabled peer, he/she may use per-peer mLDP 270 capabilities configuration. [Ed Note: The option to control mLDP 271 enabling/disabling on a peer-list is being explored for future ]. 272 In most common deployments, it is desirable to disable mLDP 273 (capabilities announcements) on a targeted-only LDP peering, where 274 targeted-only peer is the one whose discovery sources are targeted 275 type only. In future revision, a configuration option for this 276 support will also be provided. 278 o Forwarding: By default, mLDP is allowed to select any of the LDP 279 enabled interface as a downstream interface towards a nexthop 280 (LDP/mLDP peer) for MP LSP programming. However, a configuration 281 option is provided to allow mLDP to exclude a given interface from 282 such a selection. Note that such a configuration option will be 283 useful only when there are more than one interfaces available for 284 the downstream selection. 286 This goes without saying that mLDP configuration tree follows the 287 same approach as LDP, where the tree comprise leafs for intended 288 configuration. 290 4.4. YANG tree 292 The following figure captures the YANG tree for mLDP configuration. 294 module: ietf-mpls-mldp 296 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 297 +--rw mldp {mldp}? 298 +--rw config 299 | +--rw enable? boolean 300 +--rw address-family* [afi] 301 +--rw afi ldp:ldp-address-family 302 +--rw config 303 | +--rw multicast-only-frr {mldp-mofrr}? 304 | | +--rw prefix-list? ldp:prefix-list-ref 305 | +--rw recursive-fec 306 | +--rw prefix-list? ldp:prefix-list-ref 307 +--rw configured-leaf-lsps 308 +--rw p2mp 309 | +--rw roots-ipv4 310 | | +--rw root* [root-address] 311 | | +--rw root-address inet:ipv4-address 312 | | +--rw lsp* [lsp-id source-address group-address] 313 | | +--rw lsp-id uint16 314 | | +--rw source-address inet:ipv4-address 315 | | +--rw group-address inet:ipv4-address-no-zone 316 | +--rw roots-ipv6 317 | +--rw root* [root-address] 318 | +--rw root-address inet:ipv6-address 319 | +--rw lsp* [lsp-id source-address group-address] 320 | +--rw lsp-id uint16 321 | +--rw source-address inet:ipv6-address 322 | +--rw group-address inet:ipv6-address-no-zone 323 +--rw mp2mp 324 +--rw roots-ipv4 325 | +--rw root* [root-address] 326 | +--rw root-address inet:ipv4-address 327 | +--rw lsp* [lsp-id source-address group-address] 328 | +--rw lsp-id uint16 329 | +--rw source-address inet:ipv4-address 330 | +--rw group-address inet:ipv4-address-no-zone 331 +--rw roots-ipv6 332 +--rw root* [root-address] 333 +--rw root-address inet:ipv6-address 334 +--rw lsp* [lsp-id source-address group-address] 335 +--rw lsp-id uint16 336 +--rw source-address inet:ipv6-address 337 +--rw group-address inet:ipv6-address-no-zone 339 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability: 340 +--rw mldp 341 +--rw p2mp 342 | +--rw enable? boolean 343 +--rw mp2mp 344 | +--rw enable? boolean 345 +--rw make-before-break 346 | +--rw enable? boolean 347 | +--rw switchover-delay? uint16 348 | +--rw timeout? uint16 349 +--rw hub-and-spoke {capability-mldp-hsmp}? 350 | +--rw enable? boolean 351 +--rw node-protection {capability-mldp-node-protection}? 352 +--rw plr? boolean 353 +--rw merge-point 354 +--rw enable? boolean 355 +--rw targeted-session-teardown-delay? uint16 357 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/ldp:interfaces/ldp:interface/ldp:address-family/ldp:config: 358 +--rw mldp-disable? boolean {mldp}? 360 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:config/ldp:capability: 361 +--rw mldp {mldp}? 362 +--rw p2mp 363 | +--rw enable? boolean 364 +--rw mp2mp 365 | +--rw enable? boolean 366 +--rw make-before-break 367 | +--rw enable? boolean 368 | +--rw switchover-delay? uint16 369 | +--rw timeout? uint16 370 +--rw hub-and-spoke {capability-mldp-hsmp}? 371 | +--rw enable? boolean 372 +--rw node-protection {capability-mldp-node-protection}? 373 +--rw plr? boolean 374 +--rw merge-point 375 +--rw enable? boolean 376 +--rw targeted-session-teardown-delay? uint16 378 Figure 2 380 5. Operational State 382 Operational state of mLDP can be queried and obtained from various 383 read-only mdlp "state" containers that augment ldp state containers. 385 Please note this state tree refers both the configuration "applied" 386 state as well as the "derived" state related to the mLDP protocol. 387 [Ed note: Future revision will realign] 389 Following is a simplified graphical representation of the data model 390 for mLDP operational state: 392 module: ietf-mpls-mldp 394 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global: 395 +--rw mldp {mldp}? 396 +--ro state 397 | +--ro enable? boolean 398 +--rw address-family* [afi] 399 +--ro state 400 +--ro multicast-only-frr {mldp-mofrr}? 401 | +--ro prefix-list? ldp:prefix-list-ref 402 +--ro recursive-fec 403 | +--ro prefix-list? ldp:prefix-list-ref 404 +--ro ipv4 405 | +--ro roots 406 | | +--ro root* [root-address] 407 | | +--ro root-address inet:ipv4-address 408 | | +--ro is-self? boolean 409 | | +--ro reachability* [address interface] 410 | | +--ro address inet:ipv4-address 411 | | +--ro interface ldp:mpls-interface-ref 412 | | +--ro peer? leafref 413 | +--ro bindings 414 | +--ro opaque-type-lspid 415 | | +--ro fec-label* [root-address lsp-id recur-root-address recur-rd] 416 | | +--ro root-address inet:ipv4-address 417 | | +--ro lsp-id uint32 418 | | +--ro recur-root-address inet:ip-address 419 | | +--ro recur-rd route-distinguisher 420 | | +--ro multipoint-type? multipoint-type 421 | | +--ro peer* [direction peer advertisement-type] 422 | | +--ro direction ldp:downstream-upstream 423 | | +--ro peer leafref 424 | | +--ro advertisement-type ldp:advertised-received 425 | | +--ro label? mpls:mpls-label 426 | | +--ro mbb-role? enumeration 427 | | +--ro mofrr-role? enumeration 428 | +--ro opaque-type-transit 429 | | +--ro fec-label* [root-address source-address group-address ... ] 430 | | +--ro root-address inet:ipv4-address 431 | | +--ro source-address inet:ip-address 432 | | +--ro group-address inet:ip-address-no-zone 433 | | +--ro rd route-distinguisher 434 | | +--ro recur-root-address inet:ip-address 435 | | +--ro recur-rd route-distinguisher 436 | | +--ro multipoint-type? multipoint-type 437 | | +--ro peer* [direction peer advertisement-type] 438 | | +--ro direction ldp:downstream-upstream 439 | | +--ro peer leafref 440 | | +--ro advertisement-type ldp:advertised-received 441 | | +--ro label? mpls:mpls-label 442 | | +--ro mbb-role? enumeration 443 | | +--ro mofrr-role? enumeration 444 | +--ro opaque-type-bidir 445 | +--ro fec-label* [root-address rp group-address ... ] 446 | +--ro root-address inet:ipv4-address 447 | +--ro rp inet:ip-address 448 | +--ro group-address inet:ip-address-no-zone 449 | +--ro rd route-distinguisher 450 | +--ro recur-root-address inet:ip-address 451 | +--ro recur-rd route-distinguisher 452 | +--ro multipoint-type? multipoint-type 453 | +--ro peer* [direction peer advertisement-type] 454 | +--ro direction ldp:downstream-upstream 455 | +--ro peer leafref 456 | +--ro advertisement-type ldp:advertised-received 457 | +--ro label? mpls:mpls-label 458 | +--ro mbb-role? enumeration 459 | +--ro mofrr-role? enumeration 460 +--ro ipv6 461 +--ro roots 462 | +--ro root* [root-address] 463 | +--ro root-address inet:ipv6-address 464 | +--ro is-self? boolean 465 | +--ro reachability* [address interface] 466 | +--ro address inet:ipv6-address 467 | +--ro interface ldp:mpls-interface-ref 468 | +--ro peer? leafref 469 +--ro bindings 470 +--ro opaque-type-lspid 471 | +--ro fec-label* [root-address lsp-id recur-root-address recur-rd] 472 | +--ro root-address inet:ipv6-address 473 | +--ro lsp-id uint32 474 | +--ro recur-root-address inet:ip-address 475 | +--ro recur-rd route-distinguisher 476 | +--ro multipoint-type? multipoint-type 477 | +--ro peer* [direction peer advertisement-type] 478 | +--ro direction ldp:downstream-upstream 479 | +--ro peer leafref 480 | +--ro advertisement-type ldp:advertised-received 481 | +--ro label? mpls:mpls-label 482 | +--ro mbb-role? enumeration 483 | +--ro mofrr-role? enumeration 484 +--ro opaque-type-transit 485 | +--ro fec-label* [root-address source-address group-address ... ] 486 | +--ro root-address inet:ipv6-address 487 | +--ro source-address inet:ip-address 488 | +--ro group-address inet:ip-address-no-zone 489 | +--ro rd route-distinguisher 490 | +--ro recur-root-address inet:ip-address 491 | +--ro recur-rd route-distinguisher 492 | +--ro multipoint-type? multipoint-type 493 | +--ro peer* [direction peer advertisement-type] 494 | +--ro direction ldp:downstream-upstream 495 | +--ro peer leafref 496 | +--ro advertisement-type ldp:advertised-received 497 | +--ro label? mpls:mpls-label 498 | +--ro mbb-role? enumeration 499 | +--ro mofrr-role? enumeration 500 +--ro opaque-type-bidir 501 +--ro fec-label* [root-address rp group-address ... ] 502 +--ro root-address inet:ipv6-address 503 +--ro rp inet:ip-address 504 +--ro group-address inet:ip-address-no-zone 505 +--ro rd route-distinguisher 506 +--ro recur-root-address inet:ip-address 507 +--ro recur-rd route-distinguisher 508 +--ro multipoint-type? multipoint-type 509 +--ro peer* [direction peer advertisement-type] 510 +--ro direction ldp:downstream-upstream 511 +--ro peer leafref 512 +--ro advertisement-type ldp:advertised-received 513 +--ro label? mpls:mpls-label 514 +--ro mbb-role? enumeration 515 +--ro mofrr-role? enumeration 517 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/ldp:interfaces/ldp:interface/ldp:address-family/ldp:state: 518 +--ro mldp-disable? boolean {mldp}? 520 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:global/ldp:state/ldp:capability: 521 +--ro mldp 522 +--ro p2mp 523 | +--ro enable? boolean 524 +--ro mp2mp 525 | +--ro enable? boolean 526 +--ro make-before-break 527 | +--ro enable? boolean 528 | +--ro switchover-delay? uint16 529 | +--ro timeout? uint16 530 +--ro hub-and-spoke {capability-mldp-hsmp}? 531 | +--ro enable? boolean 532 +--ro node-protection {capability-mldp-node-protection}? 533 +--ro plr? boolean 534 +--ro merge-point 535 +--ro enable? boolean 536 +--ro targeted-session-teardown-delay? uint16 538 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:capability: 539 +--ro mldp {mldp}? 540 +--ro p2mp 541 | +--ro enable? boolean 542 +--ro mp2mp 543 | +--ro enable? boolean 544 +--ro make-before-break 545 | +--ro enable? boolean 546 | +--ro switchover-delay? uint16 547 | +--ro timeout? uint16 548 +--ro hub-and-spoke {capability-mldp-hsmp}? 549 | +--ro enable? boolean 550 +--ro node-protection {capability-mldp-node-protection}? 551 +--ro plr? boolean 552 +--ro merge-point 553 +--ro enable? boolean 554 +--ro targeted-session-teardown-delay? uint16 556 augment /rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:received-peer-state/ldp:capability: 557 +--ro mldp {mldp}? 558 +--ro p2mp 559 | +--ro enable? boolean 560 +--ro mp2mp 561 | +--ro enable? boolean 562 +--ro make-before-break 563 | +--ro enable? boolean 564 +--ro hub-and-spoke 565 | +--ro enable? boolean 566 +--ro node-protection 567 +--ro plr? boolean 568 +--ro merge-point? boolean 570 Figure 3 572 5.1. Derived states 574 Following are main areas for which mLDP operational derived state is 575 defined: 577 o Root 579 o Bindings (FEC-label) 581 o Capabilities 583 5.1.1. Root state 585 Root address is a fundamental construct for MP FEC bindings and LSPs. 586 The root state provides information on all the known roots in a given 587 address-familty, and their information on the root reachability (as 588 learnt from RIB). In case of multi-path reachability to a root, the 589 selection of upstream path is done on per-LSP basis at the time of 590 LSP setup. Similarly, when protection mechanisms like MBB or MoFRR 591 are in place, the path designation as active/standby or primary/ 592 backup is also done on per LSP basis. It is to be noted that a given 593 root can be shared amongst multiple P2MP and/or MP2MP LSPs. 594 Moreover, an LSP can be signaled to more than one root for RNR 595 purposes. 597 The following diagram illustrates a root database on a branch/transit 598 LSR: 600 root 1.1.1.1: 601 path1: 602 RIB: GigEthernet 1/0, 12.1.0.2; 603 LDP: peer 192.168.0.1:0 604 path2: 605 RIB: GigEthernet 2/0, 12.2.0.2; 606 LDP: peer 192.168.0.3:0 608 root 2.2.2.2: 609 path1: 610 RIB: 3.3.3.3; (NOTE: This is a recursive path) 611 LDP: peer 192.168.0.3:0 (NOTE: T-mLDP peer) 613 root 9.9.9.9: 614 . . . . 616 Figure 4 618 A root entry on a root LSR itself will be presented as follows: 620 root 9.9.9.9: 621 is-self 623 Figure 5 625 5.1.2. Bindings state 627 Binding state provides information on mLDP FEC-label bindings for 628 both P2MP and MP2MP FEC types. Like LDP, the FEC-label binding 629 derived state is presented in a FEC-centric view per address-family, 630 and provides information on both inbound (received) and outbound 631 (advertised) bindings. The FEC is presented as (root-address, 632 opaque-type-data) and the direction (upstream or downstream) is 633 picked with respect to root reachability. In case of MBB or/and 634 MoFRR, the role of a given peer binding is also provided with respect 635 to MBB (active or standby) or/and MoFRR (primary or backup). 637 This document covers following type of opaque values with their keys 638 in the operational model of mLDP bindings: 640 +-------------------------+--------------------+------------+ 641 | Opaque Type | Key | RFC | 642 +-------------------------+--------------------+------------+ 643 | Generic LSP Identifier | LSP Id | [RFC6388] | 644 | Transit IPv4 Source | Source, Group | [RFC6826] | 645 | Transit IPv6 Source | Source, Group | [RFC6826] | 646 | Transit IPv4 Bidir | RP, Group | [RFC6826] | 647 | Transit IPv6 Bidir | RP, Group | [RFC6826] | 648 | Transit VPNv4 Source | Source, Group, RD | [RFC7246] | 649 | Transit VPNv6 Source | Source, Group, RD | [RFC7246] | 650 | Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] | 651 | Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] | 652 | Recursive Opaque | Root | [RFC6512] | 653 | VPN-Recursive Opaque | Root, RD | [RFC6512] | 654 +-------------------------+--------------------+------------+ 656 Table 1: MP Opaque Types and keys 658 It is to be noted that there are three basic types (LSP Id, Source, 659 and Bidir) and then there are variants (VPN, recursive, VPN- 660 recursive) on top of these basic types. 662 Following captures a high level tree hierarchy for mLDP bindings 663 state: 665 +--rw mldp (augmentation of ldp:global) 666 +--rw address-family* [afi] 667 +--rw afi address-family 668 +--ro state 669 +--ro ipv4 (or ipv6) 670 +--ro bindings 671 +--ro opaque-type-xxx [root-address, type-specific-key] 672 +--ro root-address 673 +--ro ... 674 +--ro recur-root-address inet:ipv4-address 675 +--ro recur-rd route-distinguisher 676 +--ro multipoint-type? multipoint-type 677 +--ro peer* [direction peer advertisement-type] 678 +--ro direction downstream-upstream 679 +--ro peer leafref 680 +--ro advertisement-type advertised-received 681 +--ro label? mpls:mpls-label 682 +--ro mbb-role? enumeration 683 +--ro mofrr-role? enumeration 685 Figure 6 687 In the above tree, the type-specific-key varies with the base type as 688 listed in earlier Table 1. For example, if the opaque type is 689 Generic LSP Identifier, then the type-specific-key will be a uint32 690 value corresponding to the LSP. Please see the complete model for 691 all other types. 693 Moreover, the binding tree defines only three types of sub-trees 694 (i.e. lspid, src, and bidir) which is able to map the respective 695 variants (vpn, recursive, and vpn-recusrive) accordingly. For 696 example, the key for opaque-type-src is [R, S, G, rd, recur-R, recur- 697 RD], where basic type will specify (R, S,G,-, -, -), VPN type will 698 specify (R, S,G, rd, -, -), recursive type will specify [R, S,G, -, 699 recur-R, -] and VPN-recursive type will specify [R, S,G, -, recur-R, 700 recur-rd]. 702 It is important to take note of the following: 704 o The address-family ipv4/ipv4 applies to "root" address in the mLDP 705 binding tree. The other addresses (source, group, RP etc) do not 706 have to be of the same address family type as the root. 708 o The "recur-root-address" field applies to Recursive opaque type, 709 and (recur-root-address, recur-rd) fields applies to VPN-Recursive 710 opaque types as defined in [RFC6512] 712 o In case of a recursive FEC, the address-family of the recur-root- 713 address could be different than the address-family of the root 714 address of original encapsulated MP FEC 716 The following diagram illustrates the FEC-label binding information 717 structure for a P2MP (Transit IPv4 Source type) LSP on a branch/ 718 transit LSR: 720 FEC (root 2.2.2.2, S=192.168.1.1, G=224.1.1.1): 721 type: p2mp 722 upstream: 723 advertised: 724 peer 192.168.0.1:0, label 16000 (local) 725 downstream: 726 received: 727 peer 192.168.0.2:0, label 17000 (remote) 728 peer 192.168.0.3:0, label 18000 (remote) 730 Figure 7 732 The following diagram illustrates the FEC-label binding information 733 structure for a similar MP2MP LSP on a branch/transit LSR: 735 FEC (root 2.2.2.2, RP=192.168.9.9, G=224.1.1.1): 736 type: mp2mp 737 upstream: 738 advertised: 739 peer 192.168.0.1:0, label 16000 (local) 740 received: 741 peer 192.168.0.1:0, label 17000 (remote) 742 downstream: 743 advertised: 744 peer 192.168.0.2:0, label 16001 (local), MBB role=active 745 peer 192.168.0.3:0, label 16002 (local), MBB role=standby 746 received: 747 peer 192.168.0.2:0, label 17001 (remote) 748 peer 192.168.0.3:0, label 18001 (remote) 750 Figure 8 752 5.1.3. Capabilities state 754 Like LDP, mLDP capabilities state comprise two types of information: 756 o global: augments ldp:global/ldp:state/ldp:capability. 758 o per-peer: augments ldp:peers/ldp:peer/ldp:state/ldp:capability 760 6. Notifications 762 mLDP notification module consists of notification related to changes 763 in the operational state of an mLDP FEC. Following is a simplified 764 graphical representation of the data model for mLDP notifications: 766 module: ietf-mpls-mldp 767 notifications: 768 +---n mpls-mldp-fec-event 769 +--ro event-type? ldp:oper-status-event-type 770 +--ro tree-type? multipoint-type 771 +--ro root? inet:ip-address 772 +--ro (lsp-key-type)? 773 +--:(lsp-id-based) 774 | +--ro lsp-id? uint16 775 +--:(source-group-based) 776 +--ro source-address? inet:ip-address 777 +--ro group-address? inet:ip-address 779 Figure 9 781 7. Actions 783 Currently, no RPCs/actions are defined for mLDP. 785 8. Open Items 787 Following is a list of open items that are to be discussed and 788 addressed in future revisions of this document: 790 o Revisit and cut down on the scope of the document and number of 791 features it is trying to cover 793 o Split the model into a base and extended items 795 o Align operational state modeling with other routing protocols and 796 [I-D.openconfig-netmod-opstate] 798 o Specify default values for configuration parameters 800 o Add statistics for mLDP root LSPs and bindings 802 o Extend the "Configured Leaf LSPs" for various type of opaque-types 804 o Extend mLDP notifications for other types of opaque values as well 806 9. YANG Specification 808 Following is the actual YANG definition for mLDP constructs defined 809 earlier in the document. 811 file "ietf-mpls-mldp@2016-11-01.yang" --> 813 module ietf-mpls-mldp { 814 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp"; 815 prefix mldp; 817 import ietf-inet-types { 818 prefix "inet"; 819 } 821 import ietf-routing { 822 prefix "rt"; 823 } 825 import ietf-mpls { 826 prefix "mpls"; 827 } 829 import ietf-mpls-ldp { 830 prefix "ldp"; 831 } 833 organization 834 "IETF MPLS Working Group"; 835 contact 836 "WG Web: 837 WG List: 839 WG Chair: Loa Andersson 840 842 WG Chair: Ross Callon 843 845 WG Chair: George Swallow 846 848 Editor: Kamran Raza 849 851 Editor: Rajiv Asati 852 854 Editor: Xufeng Liu 855 857 Editor: Santosh Esale 858 860 Editor: Xia Chen 861 863 Editor: Himanshu Shah 864 866 Editor: Sowmya Krishnaswamy 867 "; 869 description 870 "This YANG module defines the essential components for the 871 management of Multi-Protocol Label Switching (MPLS) Multipoint 872 LDP (mLDP)."; 874 revision 2016-11-01 { 875 description 876 "Initial revision."; 877 reference 878 "RFC XXXX: YANG Data Model for MPLS mLDP."; 879 } 881 /* 882 * Features 883 */ 885 feature capability-mldp-hsmp { 886 description 887 "This feature indicates that the system allows to configure 888 mLDP hub-and-spoke-multipoint capability."; 889 } 891 feature capability-mldp-node-protection { 892 description 893 "This feature indicates that the system allows to configure 894 mLDP node-protection capability."; 895 } 897 feature mldp { 898 description 899 "This feature indicates that the system supports Multicast 900 LDP (mLDP)."; 901 } 903 feature mldp-mofrr { 904 description 905 "This feature indicates that the system supports mLDP 906 Multicast only FRR (MoFRR)."; 907 } 909 /* 910 * Typedefs 911 */ 912 typedef multipoint-type { 913 type enumeration { 914 enum p2mp { 915 description "Point to multipoint."; 916 } 917 enum mp2mp { 918 description "Multipoint to multipoint."; 919 } 920 } 921 description 922 "p2mp or mp2mp."; 923 } 925 typedef route-distinguisher { 926 type string { 927 } 928 description 929 "Type definition for route distinguisher."; 930 reference 931 "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; 932 } 934 /* 935 * Groupings 936 */ 938 grouping mldp-capabilities { 939 description 940 "mLDP capabilities."; 942 container p2mp { 943 description 944 "Configure point-to-multipoint capability."; 945 leaf enable { 946 type boolean; 947 description 948 "Enable point-to-multipoint."; 949 } 950 } 951 container mp2mp { 952 description 953 "Configure multipoint-to-multipoint capability."; 954 leaf enable { 955 type boolean; 956 description 957 "Enable multipoint-to-multipoint."; 958 } 959 } 960 container make-before-break { 961 description 962 "Configure make-before-break capability."; 963 leaf enable { 964 type boolean; 965 description 966 "Enable make-before-break."; 967 } 968 leaf switchover-delay { 969 type uint16; 970 units seconds; 971 description 972 "Switchover delay in seconds."; 973 } 974 leaf timeout { 975 type uint16; 976 units seconds; 977 description 978 "Timeout in seconds."; 979 } 980 } 981 container hub-and-spoke { 982 if-feature capability-mldp-hsmp; 983 description 984 "Configure hub-and-spoke-multipoint capability."; 985 reference 986 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 987 Label Switched Path"; 988 leaf enable { 989 type boolean; 990 description 991 "Enable hub-and-spoke-multipoint."; 992 } 993 } 994 container node-protection { 995 if-feature capability-mldp-node-protection; 996 description 997 "Configure node-protection capability."; 998 reference 999 "RFC7715: mLDP Node Protection."; 1000 leaf plr { 1001 type boolean; 1002 description 1003 "Point of Local Repair capable for MP LSP node 1004 protection."; 1005 } 1006 container merge-point { 1007 description 1008 "Merge Point capable for MP LSP node protection."; 1009 leaf enable { 1010 type boolean; 1011 description 1012 "Enable merge point capability."; 1013 } 1014 leaf targeted-session-teardown-delay { 1015 type uint16; 1016 units seconds; 1017 description 1018 "Targeted session teardown delay."; 1019 } 1020 } // merge-point 1021 } 1022 } // mldp-capabilities 1024 grouping mldp-configured-lsp-roots { 1025 description 1026 "mLDP roots containers."; 1028 container roots-ipv4 { 1030 when "../../../afi = 'ipv4'" { 1031 description 1032 "Only for IPv4."; 1033 } 1034 description 1035 "Configured IPv4 multicast LSPs."; 1036 list root { 1037 key "root-address"; 1038 description 1039 "List of roots for configured multicast LSPs."; 1041 leaf root-address { 1042 type inet:ipv4-address; 1043 description 1044 "Root address."; 1045 } 1047 list lsp { 1048 must "(lsp-id = 0 and source-address != '0.0.0.0' and " 1049 + "group-address != '0.0.0.0') or " 1050 + "(lsp-id != 0 and source-address = '0.0.0.0' and " 1051 + "group-address = '0.0.0.0')" { 1052 description 1053 "A LSP can be identified by either or 1054 ."; 1055 } 1056 key "lsp-id source-address group-address"; 1057 description 1058 "List of LSPs."; 1059 leaf lsp-id { 1060 type uint16; 1061 description "ID to identify the LSP."; 1062 } 1063 leaf source-address { 1064 type inet:ipv4-address; 1065 description 1066 "Source address."; 1067 } 1068 leaf group-address { 1069 type inet:ipv4-address-no-zone; 1070 description 1071 "Group address."; 1072 } 1073 } // list lsp 1074 } // list root 1075 } // roots-ipv4 1077 container roots-ipv6 { 1079 when "../../../afi = 'ipv6'" { 1080 description 1081 "Only for IPv6."; 1082 } 1083 description 1084 "Configured IPv6 multicast LSPs."; 1086 list root { 1087 key "root-address"; 1088 description 1089 "List of roots for configured multicast LSPs."; 1091 leaf root-address { 1092 type inet:ipv6-address; 1093 description 1094 "Root address."; 1095 } 1097 list lsp { 1098 must "(lsp-id = 0 and source-address != '::' and " 1099 + "group-address != '::') or " 1100 + "(lsp-id != 0 and source-address = '::' and " 1101 + "group-address = '::')" { 1102 description 1103 "A LSP can be identified by either or 1104 ."; 1105 } 1106 key "lsp-id source-address group-address"; 1107 description 1108 "List of LSPs."; 1109 leaf lsp-id { 1110 type uint16; 1111 description "ID to identify the LSP."; 1112 } 1113 leaf source-address { 1114 type inet:ipv6-address; 1115 description 1116 "Source address."; 1117 } 1118 leaf group-address { 1119 type inet:ipv6-address-no-zone; 1120 description 1121 "Group address."; 1122 } 1123 } // list lsp 1124 } // list root 1125 } // roots-ipv6 1126 } // mldp-configured-lsp-roots 1128 grouping mldp-fec-event { 1129 description 1130 "A mLDP FEC event."; 1131 leaf tree-type { 1132 type multipoint-type; 1133 description 1134 "p2mp or mp2mp."; 1135 } 1136 leaf root { 1137 type inet:ip-address; 1138 description 1139 "Root address."; 1140 } 1141 choice lsp-key-type { 1142 description 1143 "LSP ID based or source-group based ."; 1144 case lsp-id-based { 1145 leaf lsp-id { 1146 type uint16; 1147 description 1148 "ID to identify the LSP."; 1149 } 1150 } 1151 case source-group-based { 1152 leaf source-address { 1153 type inet:ip-address; 1154 description 1156 "LSP source address."; 1157 } 1158 leaf group-address { 1159 type inet:ip-address; 1160 description 1161 "Multicast group address."; 1162 } 1163 } // case source-group-based 1164 } 1165 } // mldp-fec-event 1167 grouping mldp-binding-label-state-attributes { 1168 description 1169 "mLDP label binding attributes."; 1171 leaf multipoint-type { 1172 type multipoint-type; 1173 description 1174 "The type of mutipoint, p2mp or mp2mp."; 1175 } 1176 list peer { 1177 key "direction peer advertisement-type"; 1178 description 1179 "List of advertised and received peers."; 1180 leaf direction { 1181 type ldp:downstream-upstream; 1182 description 1183 "Downstream or upstream."; 1184 } 1185 leaf peer { 1186 type leafref { 1187 path 1188 "../../../../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; 1189 } 1190 description 1191 "LDP peer from which this binding is received, 1192 or to which this binding is advertised."; 1193 } 1194 leaf advertisement-type { 1195 type ldp:advertised-received; 1196 description 1197 "Advertised or received."; 1198 } 1199 leaf label { 1200 type mpls:mpls-label; 1201 description 1202 "Advertised (outbound) or received (inbound) label."; 1203 } 1204 leaf mbb-role { 1205 when "../direction = 'upstream'" { 1206 description 1207 "For upstream."; 1208 } 1209 type enumeration { 1210 enum none { 1211 description "MBB is not enabled."; 1212 } 1213 enum active { 1214 description "This LSP is active."; 1215 } 1216 enum inactive { 1217 description "This LSP is inactive."; 1218 } 1219 } 1220 description 1221 "The MBB status of this LSP."; 1222 } 1223 leaf mofrr-role { 1224 when "../direction = 'upstream'" { 1225 description 1226 "For upstream."; 1227 } 1228 type enumeration { 1229 enum none { 1230 description "MOFRR is not enabled."; 1231 } 1232 enum primary { 1233 description "This LSP is primary."; 1234 } 1235 enum backup { 1236 description "This LSP is backup."; 1237 } 1238 } 1239 description 1240 "The MOFRR status of this LSP."; 1241 } 1242 } // peer 1243 } // mldp-binding-label-state-attributes 1245 /* 1246 * Configuration data nodes 1247 */ 1248 augment "/rt:routing/rt:control-plane-protocols/" 1249 + "ldp:mpls-ldp/ldp:global/ldp:config/ldp:capability" { 1250 description "Augmentation for MLDP global capability."; 1251 container mldp { 1252 description 1253 "Multipoint capabilities."; 1254 uses mldp-capabilities; 1255 } 1256 } 1258 augment "/rt:routing/rt:control-plane-protocols/" 1259 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:config/ldp:capability" { 1260 description "Augmentation for MLDP peer capability."; 1261 container mldp { 1262 if-feature mldp; 1263 description 1264 "mLDP capabilities."; 1265 uses mldp-capabilities; 1266 } 1267 } 1269 augment "/rt:routing/rt:control-plane-protocols/" 1270 + "ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/" 1271 + "ldp:interfaces/ldp:interface/ldp:address-family/" 1272 + "ldp:config" { 1273 description 1274 "Augmentation for MLDP nexthop forwarding interface."; 1275 leaf mldp-disable { 1276 if-feature mldp; 1277 type boolean; 1278 description 1279 "Disable mLDP forwarding on the interface."; 1280 } 1281 } 1283 /* 1284 * Operational state data nodes 1285 */ 1286 augment "/rt:routing/rt:control-plane-protocols/" 1287 + "ldp:mpls-ldp/ldp:global/ldp:state/ldp:capability" { 1288 description "Augmentation for MLDP global capability."; 1289 container mldp { 1290 description 1291 "Multipoint capabilities."; 1292 uses mldp-capabilities; 1293 } 1294 } 1296 augment "/rt:routing/rt:control-plane-protocols/" 1297 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/ldp:capability" { 1298 description "Augmentation for MLDP peer capability."; 1299 container mldp { 1300 if-feature mldp; 1301 description 1302 "mLDP capabilities."; 1303 uses mldp-capabilities; 1304 } 1305 } 1307 augment "/rt:routing/rt:control-plane-protocols/" 1308 + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:state/" 1309 + "ldp:received-peer-state/ldp:capability" { 1310 description 1311 "Augmentation for MLDP received peer state capability."; 1312 container mldp { 1313 if-feature mldp; 1314 description 1315 "Multipoint capabilities."; 1317 container p2mp { 1318 description 1319 "Configure point-to-multipoint capability."; 1320 leaf enable { 1321 type boolean; 1322 description 1323 "Enable point-to-multipoint."; 1324 } 1326 } 1327 container mp2mp { 1328 description 1329 "Configure multipoint-to-multipoint capability."; 1330 leaf enable { 1331 type boolean; 1332 description 1333 "Enable multipoint-to-multipoint."; 1334 } 1335 } 1336 container make-before-break { 1337 description 1338 "Configure make-before-break capability."; 1339 leaf enable { 1340 type boolean; 1341 description 1342 "Enable make-before-break."; 1343 } 1344 } 1345 container hub-and-spoke { 1346 description 1347 "Configure hub-and-spoke-multipoint capability."; 1348 reference 1349 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1350 Label Switched Path"; 1351 leaf enable { 1352 type boolean; 1353 description 1354 "Enable hub-and-spoke-multipoint."; 1355 } 1356 } 1357 container node-protection { 1358 description 1359 "Configure node-protection capability."; 1360 reference 1361 "RFC7715: mLDP Node Protection."; 1362 leaf plr { 1363 type boolean; 1364 description 1365 "Point of Local Repair capable for MP LSP node 1366 protection."; 1367 } 1368 leaf merge-point { 1369 type boolean; 1370 description 1371 "Merge Point capable for MP LSP node protection."; 1372 } // merge-point 1373 } // node-protection 1375 } // mldp 1376 } 1378 augment "/rt:routing/rt:control-plane-protocols/" 1379 + "ldp:mpls-ldp/ldp:global/ldp:forwarding-nexthop/" 1380 + "ldp:interfaces/ldp:interface/ldp:address-family/" 1381 + "ldp:state" { 1382 description 1383 "Augmentation for MLDP nexthop forwarding interface."; 1384 leaf mldp-disable { 1385 if-feature mldp; 1386 type boolean; 1387 description 1388 "Disable mLDP forwarding on the interface."; 1389 } 1390 } 1392 /* 1393 * Global augmentation 1394 */ 1395 augment "/rt:routing/rt:control-plane-protocols/" 1396 + "ldp:mpls-ldp/ldp:global" { 1397 description "MLDP global augmentation."; 1398 container mldp { 1399 if-feature mldp; 1400 description 1401 "mLDP attributes at per instance level. Defining 1402 attributes here does not enable any MP capabilities. 1403 MP capabilities need to be explicitly enabled under 1404 container capability."; 1406 container config { 1407 description 1408 "Configuration data."; 1409 leaf enable { 1410 type boolean; 1411 description 1412 "Enable mLDP."; 1413 } 1414 } 1415 container state { 1416 config false; 1417 description 1419 "Operational state data."; 1420 leaf enable { 1421 type boolean; 1422 description 1423 "Enable mLDP."; 1424 } 1425 } 1427 list address-family { 1428 key "afi"; 1429 description 1430 "Per-af params."; 1431 leaf afi { 1432 type ldp:ldp-address-family; 1433 description 1434 "Address family type value."; 1435 } 1437 container config { 1438 description 1439 "Configuration data."; 1440 container multicast-only-frr { 1441 if-feature mldp-mofrr; 1442 description 1443 "Multicast only FRR (MoFRR) policy."; 1444 leaf prefix-list { 1445 type ldp:prefix-list-ref; 1446 description 1447 "Enables MoFRR for the specified access list."; 1448 } 1449 } // multicast-only-frr 1450 container recursive-fec { 1451 description 1452 "Recursive FEC policy."; 1453 leaf prefix-list { 1454 type ldp:prefix-list-ref; 1455 description 1456 "Enables recursive FEC for the specified access 1457 list."; 1458 } 1459 } // recursive-for 1460 } 1461 container state { 1462 config false; 1463 description 1464 "Operational state data."; 1465 container multicast-only-frr { 1466 if-feature mldp-mofrr; 1468 description 1469 "Multicast only FRR (MoFRR) policy."; 1471 leaf prefix-list { 1472 type ldp:prefix-list-ref; 1473 description 1474 "Enables MoFRR for the specified access list."; 1475 } 1476 } // multicast-only-frr 1477 container recursive-fec { 1478 description 1479 "Recursive FEC policy."; 1480 leaf prefix-list { 1481 type ldp:prefix-list-ref; 1482 description 1483 "Enables recursive FEC for the specified access 1484 list."; 1485 } 1486 } // recursive-fec 1488 container ipv4 { 1489 when "../../afi = 'ipv4'" { 1490 description 1491 "Only for IPv4."; 1492 } 1493 description 1494 "IPv4 state information."; 1495 container roots { 1496 description 1497 "IPv4 multicast LSP roots."; 1498 list root { 1499 key "root-address"; 1500 description 1501 "List of roots for configured multicast LSPs."; 1503 leaf root-address { 1504 type inet:ipv4-address; 1505 description 1506 "Root address."; 1507 } 1509 leaf is-self { 1510 type boolean; 1511 description 1512 "This is the root."; 1513 } 1515 list reachability { 1516 key "address interface"; 1517 description 1518 "A next hop for reachability to root, 1519 as a RIB view."; 1520 leaf address { 1521 type inet:ipv4-address; 1522 description 1523 "The next hop address to reach root."; 1524 } 1525 leaf interface { 1526 type ldp:mpls-interface-ref; 1527 description 1528 "Interface connecting to next-hop."; 1529 } 1530 leaf peer { 1531 type leafref { 1532 path 1533 "../../../../../../../../../ldp:peers/" 1534 + "ldp:peer/ldp:lsr-id"; 1535 } 1536 description 1537 "LDP peer from which this next hop can be 1538 reached."; 1539 } 1540 } 1541 } // list root 1542 } // roots 1543 container bindings { 1544 description 1545 "mLDP FEC to label bindings."; 1546 container opaque-type-lspid { 1547 description 1548 "The type of opaque value element is 1549 the generic LSP identifier"; 1550 reference 1551 "RFC6388: Label Distribution Protocol 1552 Extensions for Point-to-Multipoint and 1553 Multipoint-to-Multipoint Label Switched 1554 Paths."; 1555 list fec-label { 1556 key 1557 "root-address lsp-id " 1558 + "recur-root-address recur-rd"; 1559 description 1560 "List of FEC to label bindings."; 1561 leaf root-address { 1562 type inet:ipv4-address; 1563 description 1564 "Root address."; 1565 } 1566 leaf lsp-id { 1567 type uint32; 1568 description "ID to identify the LSP."; 1569 } 1570 leaf recur-root-address { 1571 type inet:ip-address; 1572 description 1573 "Recursive root address."; 1574 reference 1575 "RFC6512: Using Multipoint LDP When the 1576 Backbone Has No Route to the Root"; 1577 } 1578 leaf recur-rd { 1579 type route-distinguisher; 1580 description 1581 "Route Distinguisher in the VPN-Recursive 1582 Opaque Value."; 1583 reference 1584 "RFC6512: Using Multipoint LDP When the 1585 Backbone Has No Route to the Root"; 1586 } 1587 uses mldp-binding-label-state-attributes; 1588 } // fec-label 1589 } // opaque-type-lspid 1591 container opaque-type-transit { 1592 description 1593 "The type of opaque value element is 1594 the generic LSP identifier"; 1595 reference 1596 "RFC6826: Multipoint LDP In-Band Signaling for 1597 Point-to-Multipoint and 1598 Multipoint-to-Multipoint Label Switched 1599 Paths."; 1600 list fec-label { 1601 key 1602 "root-address source-address group-address " 1603 + "rd recur-root-address recur-rd"; 1604 description 1605 "List of FEC to label bindings."; 1606 leaf root-address { 1607 type inet:ipv4-address; 1608 description 1609 "Root address."; 1610 } 1611 leaf source-address { 1612 type inet:ip-address; 1613 description 1614 "Source address."; 1616 } 1617 leaf group-address { 1618 type inet:ip-address-no-zone; 1619 description 1620 "Group address."; 1621 } 1622 leaf rd { 1623 type route-distinguisher; 1624 description 1625 "Route Distinguisher."; 1626 reference 1627 "RFC7246: Multipoint Label Distribution 1628 Protocol In-Band Signaling in a Virtual 1629 Routing and Forwarding (VRF) Table 1630 Context."; 1631 } 1632 leaf recur-root-address { 1633 type inet:ip-address; 1634 description 1635 "Recursive root address."; 1636 reference 1637 "RFC6512: Using Multipoint LDP When the 1638 Backbone Has No Route to the Root"; 1639 } 1640 leaf recur-rd { 1641 type route-distinguisher; 1642 description 1643 "Route Distinguisher in the VPN-Recursive 1644 Opaque Value."; 1645 reference 1646 "RFC6512: Using Multipoint LDP When the 1647 Backbone Has No Route to the Root"; 1648 } 1649 uses mldp-binding-label-state-attributes; 1650 } // fec-label 1651 } // opaque-type-transit 1653 container opaque-type-bidir { 1654 description 1655 "The type of opaque value element is 1656 the generic LSP identifier"; 1657 reference 1658 "RFC6826: Multipoint LDP In-Band Signaling for 1659 Point-to-Multipoint and 1660 Multipoint-to-Multipoint Label Switched 1661 Paths."; 1662 list fec-label { 1663 key 1664 "root-address rp group-address " 1665 + "rd recur-root-address recur-rd"; 1666 description 1667 "List of FEC to label bindings."; 1668 leaf root-address { 1669 type inet:ipv4-address; 1670 description 1671 "Root address."; 1672 } 1673 leaf rp { 1674 type inet:ip-address; 1675 description 1676 "RP address."; 1677 } 1678 leaf group-address { 1679 type inet:ip-address-no-zone; 1680 description 1681 "Group address."; 1682 } 1683 leaf rd { 1684 type route-distinguisher; 1685 description 1686 "Route Distinguisher."; 1687 reference 1688 "RFC7246: Multipoint Label Distribution 1689 Protocol In-Band Signaling in a Virtual 1690 Routing and Forwarding (VRF) Table 1691 Context."; 1692 } 1693 leaf recur-root-address { 1694 type inet:ip-address; 1695 description 1696 "Recursive root address."; 1697 reference 1698 "RFC6512: Using Multipoint LDP When the 1699 Backbone Has No Route to the Root"; 1700 } 1701 leaf recur-rd { 1702 type route-distinguisher; 1703 description 1704 "Route Distinguisher in the VPN-Recursive 1705 Opaque Value."; 1706 reference 1707 "RFC6512: Using Multipoint LDP When the 1708 Backbone Has No Route to the Root"; 1709 } 1710 uses mldp-binding-label-state-attributes; 1711 } // fec-label 1713 } // opaque-type-bidir 1714 } // bindings 1715 } // ipv4 1717 container ipv6 { 1718 when "../../afi = 'ipv6'" { 1719 description 1720 "Only for IPv6."; 1721 } 1722 description 1723 "IPv6 state information."; 1724 container roots { 1725 description 1726 "IPv6 multicast LSP roots."; 1727 list root { 1728 key "root-address"; 1729 description 1730 "List of roots for configured multicast LSPs."; 1732 leaf root-address { 1733 type inet:ipv6-address; 1734 description 1735 "Root address."; 1736 } 1738 leaf is-self { 1739 type boolean; 1740 description 1741 "This is the root."; 1742 } 1744 list reachability { 1745 key "address interface"; 1746 description 1747 "A next hop for reachability to root, 1748 as a RIB view."; 1749 leaf address { 1750 type inet:ipv6-address; 1751 description 1752 "The next hop address to reach root."; 1753 } 1754 leaf interface { 1755 type ldp:mpls-interface-ref; 1756 description 1757 "Interface connecting to next-hop."; 1758 } 1759 leaf peer { 1760 type leafref { 1761 path 1762 "../../../../../../../../../ldp:peers/" 1763 + "ldp:peer/ldp:lsr-id"; 1764 } 1765 description 1766 "LDP peer from which this next hop can be 1767 reached."; 1768 } 1769 } 1770 } // list root 1771 } // roots 1772 container bindings { 1773 description 1774 "mLDP FEC to label bindings."; 1775 container opaque-type-lspid { 1776 description 1777 "The type of opaque value element is 1778 the generic LSP identifier"; 1779 reference 1780 "RFC6388: Label Distribution Protocol 1781 Extensions for Point-to-Multipoint and 1782 Multipoint-to-Multipoint Label Switched 1783 Paths."; 1784 list fec-label { 1785 key 1786 "root-address lsp-id " 1787 + "recur-root-address recur-rd"; 1788 description 1789 "List of FEC to label bindings."; 1790 leaf root-address { 1791 type inet:ipv6-address; 1792 description 1793 "Root address."; 1794 } 1795 leaf lsp-id { 1796 type uint32; 1797 description "ID to identify the LSP."; 1798 } 1799 leaf recur-root-address { 1800 type inet:ip-address; 1801 description 1802 "Recursive root address."; 1803 reference 1804 "RFC6512: Using Multipoint LDP When the 1805 Backbone Has No Route to the Root"; 1806 } 1807 leaf recur-rd { 1808 type route-distinguisher; 1809 description 1810 "Route Distinguisher in the VPN-Recursive 1811 Opaque Value."; 1812 reference 1813 "RFC6512: Using Multipoint LDP When the 1814 Backbone Has No Route to the Root"; 1815 } 1816 uses mldp-binding-label-state-attributes; 1817 } // fec-label 1818 } // opaque-type-lspid 1820 container opaque-type-transit { 1821 description 1822 "The type of opaque value element is 1823 the generic LSP identifier"; 1824 reference 1825 "RFC6826: Multipoint LDP In-Band Signaling for 1826 Point-to-Multipoint and 1827 Multipoint-to-Multipoint Label Switched 1828 Paths."; 1829 list fec-label { 1830 key 1831 "root-address source-address group-address " 1832 + "rd recur-root-address recur-rd"; 1833 description 1834 "List of FEC to label bindings."; 1835 leaf root-address { 1836 type inet:ipv6-address; 1837 description 1838 "Root address."; 1839 } 1840 leaf source-address { 1841 type inet:ip-address; 1842 description 1843 "Source address."; 1844 } 1845 leaf group-address { 1846 type inet:ip-address-no-zone; 1847 description 1848 "Group address."; 1849 } 1850 leaf rd { 1851 type route-distinguisher; 1852 description 1853 "Route Distinguisher."; 1854 reference 1855 "RFC7246: Multipoint Label Distribution 1856 Protocol In-Band Signaling in a Virtual 1857 Routing and Forwarding (VRF) Table 1858 Context."; 1859 } 1860 leaf recur-root-address { 1861 type inet:ip-address; 1862 description 1863 "Recursive root address."; 1864 reference 1865 "RFC6512: Using Multipoint LDP When the 1866 Backbone Has No Route to the Root"; 1867 } 1868 leaf recur-rd { 1869 type route-distinguisher; 1870 description 1871 "Route Distinguisher in the VPN-Recursive 1872 Opaque Value."; 1873 reference 1874 "RFC6512: Using Multipoint LDP When the 1875 Backbone Has No Route to the Root"; 1876 } 1877 uses mldp-binding-label-state-attributes; 1878 } // fec-label 1879 } // opaque-type-transit 1881 container opaque-type-bidir { 1882 description 1883 "The type of opaque value element is 1884 the generic LSP identifier"; 1885 reference 1886 "RFC6826: Multipoint LDP In-Band Signaling for 1887 Point-to-Multipoint and 1888 Multipoint-to-Multipoint Label Switched 1889 Paths."; 1890 list fec-label { 1891 key 1892 "root-address rp group-address " 1893 + "rd recur-root-address recur-rd"; 1894 description 1895 "List of FEC to label bindings."; 1896 leaf root-address { 1897 type inet:ipv6-address; 1898 description 1899 "Root address."; 1900 } 1901 leaf rp { 1902 type inet:ip-address; 1903 description 1904 "RP address."; 1906 } 1907 leaf group-address { 1908 type inet:ip-address-no-zone; 1909 description 1910 "Group address."; 1911 } 1912 leaf rd { 1913 type route-distinguisher; 1914 description 1915 "Route Distinguisher."; 1916 reference 1917 "RFC7246: Multipoint Label Distribution 1918 Protocol In-Band Signaling in a Virtual 1919 Routing and Forwarding (VRF) Table 1920 Context."; 1921 } 1922 leaf recur-root-address { 1923 type inet:ip-address; 1924 description 1925 "Recursive root address."; 1926 reference 1927 "RFC6512: Using Multipoint LDP When the 1928 Backbone Has No Route to the Root"; 1929 } 1930 leaf recur-rd { 1931 type route-distinguisher; 1932 description 1933 "Route Distinguisher in the VPN-Recursive 1934 Opaque Value."; 1935 reference 1936 "RFC6512: Using Multipoint LDP When the 1937 Backbone Has No Route to the Root"; 1938 } 1939 uses mldp-binding-label-state-attributes; 1940 } // fec-label 1941 } // opaque-type-bidir 1942 } // bindings 1943 } // ipv6 1944 } // state 1946 container configured-leaf-lsps { 1947 description 1948 "Configured multicast LSPs."; 1950 container p2mp { 1951 description 1952 "Configured point-to-multipoint LSPs."; 1953 uses mldp-configured-lsp-roots; 1955 } 1956 container mp2mp { 1957 description 1958 "Configured multipoint-to-multipoint LSPs."; 1959 uses mldp-configured-lsp-roots; 1960 } 1961 } // configured-leaf-lsps 1962 } // list address-family 1963 } // mldp 1964 } 1966 /* 1967 * Notifications 1968 */ 1969 notification mpls-mldp-fec-event { 1970 description 1971 "Notification event for a change of FEC status."; 1972 leaf event-type { 1973 type ldp:oper-status-event-type; 1974 description "Event type."; 1975 } 1976 uses mldp-fec-event; 1977 } 1978 } 1980 1982 Figure 10 1984 10. Security Considerations 1986 This mLDP model shares the same security considerations as captured 1987 in LDP Yang model [I-D.ietf-mpls-ldp-mldp-yang]. 1989 11. IANA Considerations 1991 This document does not extend mLDP protocol specifiction and hence 1992 there are no IANA considerations. 1994 Note to the RFC Editor: Please remove IANA section before the 1995 publication. 1997 12. Acknowledgments 1999 The authors would like to acknowledge Ladislav Lhotka for his useful 2000 comments as the YANG Doctor. 2002 13. References 2004 13.1. Normative References 2006 [I-D.ietf-mpls-ldp-mldp-yang] 2007 Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. 2008 Shah, "YANG Data Model for MPLS LDP and mLDP", draft-ietf- 2009 mpls-ldp-mldp-yang-00 (work in progress), August 2016. 2011 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2012 Requirement Levels", BCP 14, RFC 2119, 2013 DOI 10.17487/RFC2119, March 1997, 2014 . 2016 [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., 2017 "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, 2018 October 2007, . 2020 [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. 2021 Le Roux, "LDP Capabilities", RFC 5561, 2022 DOI 10.17487/RFC5561, July 2009, 2023 . 2025 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2026 the Network Configuration Protocol (NETCONF)", RFC 6020, 2027 DOI 10.17487/RFC6020, October 2010, 2028 . 2030 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2031 and A. Bierman, Ed., "Network Configuration Protocol 2032 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2033 . 2035 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 2036 Thomas, "Label Distribution Protocol Extensions for Point- 2037 to-Multipoint and Multipoint-to-Multipoint Label Switched 2038 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 2039 . 2041 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 2042 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 2043 November 2011, . 2045 [RFC6512] Wijnands, IJ., Rosen, E., Napierala, M., and N. Leymann, 2046 "Using Multipoint LDP When the Backbone Has No Route to 2047 the Root", RFC 6512, DOI 10.17487/RFC6512, February 2012, 2048 . 2050 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2051 Protocol (NETCONF) Access Control Model", RFC 6536, 2052 DOI 10.17487/RFC6536, March 2012, 2053 . 2055 [RFC6826] Wijnands, IJ., Ed., Eckert, T., Leymann, N., and M. 2056 Napierala, "Multipoint LDP In-Band Signaling for Point-to- 2057 Multipoint and Multipoint-to-Multipoint Label Switched 2058 Paths", RFC 6826, DOI 10.17487/RFC6826, January 2013, 2059 . 2061 [RFC7060] Napierala, M., Rosen, E., and IJ. Wijnands, "Using LDP 2062 Multipoint Extensions on Targeted LDP Sessions", RFC 7060, 2063 DOI 10.17487/RFC7060, November 2013, 2064 . 2066 [RFC7140] Jin, L., Jounay, F., Wijnands, IJ., and N. Leymann, "LDP 2067 Extensions for Hub and Spoke Multipoint Label Switched 2068 Path", RFC 7140, DOI 10.17487/RFC7140, March 2014, 2069 . 2071 [RFC7246] Wijnands, IJ., Ed., Hitchen, P., Leymann, N., Henderickx, 2072 W., Gulko, A., and J. Tantsura, "Multipoint Label 2073 Distribution Protocol In-Band Signaling in a Virtual 2074 Routing and Forwarding (VRF) Table Context", RFC 7246, 2075 DOI 10.17487/RFC7246, June 2014, 2076 . 2078 [RFC7438] Wijnands, IJ., Ed., Rosen, E., Gulko, A., Joorde, U., and 2079 J. Tantsura, "Multipoint LDP (mLDP) In-Band Signaling with 2080 Wildcards", RFC 7438, DOI 10.17487/RFC7438, January 2015, 2081 . 2083 [RFC7715] Wijnands, IJ., Ed., Raza, K., Atlas, A., Tantsura, J., and 2084 Q. Zhao, "Multipoint LDP (mLDP) Node Protection", 2085 RFC 7715, DOI 10.17487/RFC7715, January 2016, 2086 . 2088 13.2. Informative References 2090 [I-D.ietf-rtgwg-policy-model] 2091 Shaikh, A., Shakir, R., D'Souza, K., and C. Chase, 2092 "Routing Policy Configuration Model for Service Provider 2093 Networks", draft-ietf-rtgwg-policy-model-01 (work in 2094 progress), April 2016. 2096 [I-D.iwijnand-mpls-mldp-multi-topology] 2097 Wijnands, I. and K. Raza, "mLDP Extensions for Multi 2098 Topology Routing", draft-iwijnand-mpls-mldp-multi- 2099 topology-03 (work in progress), June 2013. 2101 [I-D.openconfig-netmod-opstate] 2102 Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling 2103 of Operational State Data in YANG", draft-openconfig- 2104 netmod-opstate-01 (work in progress), July 2015. 2106 Appendix A. Additional Contributors 2108 Danial Johari 2109 Cisco Systems Inc. 2110 Email: dajohari@cisco.com 2112 Matthew Bocci 2113 Alcatel-Lucent 2114 matthew.bocci@alcatel-lucent.com 2116 Authors' Addresses 2118 Kamran Raza 2119 Cisco Systems, Inc. 2120 Email: skraza@cisco.com 2122 Rajiv Asati 2123 Cisco Systems, Inc. 2124 Email: rajiva@cisco.com 2126 Sowmya Krishnaswamy 2127 Cisco Systems, Inc. 2128 Email: sowkrish@cisco.com 2130 Xufeng Liu 2131 Kuatro Technologies 2132 Email: xliu@kuatrotech.com 2133 Jeff Tantsura 2134 Email: jefftant@gmail.com 2136 Santosh Esale 2137 Juniper Networks 2138 Email: sesale@juniper.net 2140 Xia Chen 2141 Huawei Technologies 2142 Email: jescia.chenxia@huawei.com 2144 Loa Andersson 2145 Huawei Technologies 2146 Email: loa@pi.nu 2148 Himanshu Shah 2149 Ciena Corporation 2150 Email: hshah@ciena.com