idnits 2.17.00 (12 Aug 2021) /tmp/idnits59659/draft-ietf-mpls-mldp-yang-10.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 36 instances of too long lines in the document, the longest one being 35 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 357 has weird spacing: '...address ine...' == Line 361 has weird spacing: '...terface if:...' == Line 957 has weird spacing: '...address ine...' == Line 961 has weird spacing: '...terface if:...' == Line 1050 has weird spacing: '...address ine...' == (4 more instances...) -- The document date (11 November 2021) is 184 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: draft-ietf-mpls-ldp-yang has been published as RFC 9070 ** Downref: Normative reference to an Informational RFC: RFC 5920 ** Downref: Normative reference to an Informational RFC: RFC 7431 Summary: 3 errors (**), 0 flaws (~~), 8 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 MPLS Working Group K. Raza, Ed. 2 Internet-Draft Cisco Systems 3 Intended status: Standards Track 4 Expires: 15 May 2022 X. Liu 5 Volta Networks 7 S. Esale 8 Juniper Networks 10 L. Andersson 11 Huawei Technologies 13 J. Tantsura 14 Microsoft Corporation 16 S. Krishnaswamy 17 Individual 19 11 November 2021 21 YANG Data Model for MPLS mLDP 22 draft-ietf-mpls-mldp-yang-10 24 Abstract 26 This document describes a YANG data model for the Multiprotocol Label 27 Switching (MPLS) Multipoint Label Distribution Protocol (mLDP). The 28 mLDP YANG data model augments the MPLS LDP YANG data model. 30 The YANG modules in this document conform to the Network Management 31 Datastore Architecture (NMDA). 33 Status of This Memo 35 This Internet-Draft is submitted in full conformance with the 36 provisions of BCP 78 and BCP 79. 38 Internet-Drafts are working documents of the Internet Engineering 39 Task Force (IETF). Note that other groups may also distribute 40 working documents as Internet-Drafts. The list of current Internet- 41 Drafts is at https://datatracker.ietf.org/drafts/current/. 43 Internet-Drafts are draft documents valid for a maximum of six months 44 and may be updated, replaced, or obsoleted by other documents at any 45 time. It is inappropriate to use Internet-Drafts as reference 46 material or to cite them other than as "work in progress." 47 This Internet-Draft will expire on 15 May 2022. 49 Copyright Notice 51 Copyright (c) 2021 IETF Trust and the persons identified as the 52 document authors. All rights reserved. 54 This document is subject to BCP 78 and the IETF Trust's Legal 55 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 56 license-info) in effect on the date of publication of this document. 57 Please review these documents carefully, as they describe your rights 58 and restrictions with respect to this document. Code Components 59 extracted from this document must include Revised BSD License text as 60 described in Section 4.e of the Trust Legal Provisions and are 61 provided without warranty as described in the Revised BSD License. 63 Table of Contents 65 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 66 1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 3 67 2. Specification of Requirements . . . . . . . . . . . . . . . . 4 68 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 69 4. The Complete Tree . . . . . . . . . . . . . . . . . . . . . . 8 70 5. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 17 71 5.1. High-level Hierarchy . . . . . . . . . . . . . . . . . . 17 72 5.2. Base Parameters . . . . . . . . . . . . . . . . . . . . . 19 73 5.3. Capabilities Parameters . . . . . . . . . . . . . . . . . 20 74 5.4. Forwarding Parameters . . . . . . . . . . . . . . . . . . 20 75 6. Operational State . . . . . . . . . . . . . . . . . . . . . . 20 76 6.1. Root State . . . . . . . . . . . . . . . . . . . . . . . 21 77 6.2. Bindings State . . . . . . . . . . . . . . . . . . . . . 22 78 6.3. Capabilities State . . . . . . . . . . . . . . . . . . . 25 79 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 27 80 8. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 81 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 27 82 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 27 83 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 37 84 10. Security Considerations . . . . . . . . . . . . . . . . . . . 60 85 10.1. YANG Data Model . . . . . . . . . . . . . . . . . . . . 60 86 10.1.1. Writable Nodes . . . . . . . . . . . . . . . . . . . 61 87 10.1.2. Readable Nodes . . . . . . . . . . . . . . . . . . . 61 88 10.1.3. Notifications . . . . . . . . . . . . . . . . . . . 62 89 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 62 90 12. Normative References . . . . . . . . . . . . . . . . . . . . 62 91 13. Informative References . . . . . . . . . . . . . . . . . . . 65 92 Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 65 93 Appendix B. Acknowledgments . . . . . . . . . . . . . . . . . . 74 94 Appendix C. Contributors . . . . . . . . . . . . . . . . . . . . 74 95 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74 97 1. Introduction 99 This document introduces a YANG data model for the MPLS Multipoint 100 Label Distribution Protocol (mLDP). The mLDP YANG data model being 101 defined here is dependent on the LDP YANG data model 102 [I-D.ietf-mpls-ldp-yang]. This implies that an operator will need to 103 use the LDP base YANG data model to configure and manage the control 104 plane for mLDP. For example, an operator would enable LDP discovery 105 on MPLS interface to establish LDP session for mLDP peering on which 106 mLDP bindings could be exchanged. Similarly, an operator could query 107 state information for an LDP peer in order to verify peering 108 attributes, etc. 110 Moreover, it is important to note here that any assumptions made in 111 the LDP YANG data model also hold true in this document, unless 112 otherwise explicitly stated. 114 Like its parent LDP data model, this mLDP model also defines the 115 following constructs for managing the mLDP protocol: 117 * Configuration 119 * Operational State 121 * Executables (Actions) 123 * 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 the LDP model, the configuration and state items are divided 131 into the following two broad categories: 133 * Base 135 * Extended 136 The "base" category contains the basic and fundamental features that 137 are covered in the mLDP base specification [RFC6388] (and some 138 important extensions like the targeted mLDP [RFC7060]) and constitute 139 the minumum requirements for a typical base mLDP deployment, whereas 140 the "extended" category contains all other non-base features. All 141 the items in the base category are mandatory and, hence, no "if- 142 feature" is allowed under the "base" category. The base and extended 143 categories are defined in their own modules as described later. 145 The examples of base mLDP features include the enablement of mLDP and 146 its capabilities, and static configuration of leaf IPv4 LSPs with 147 generic LSP Id, whereas the examples of extended mLDP feature include 148 enhanced mLDP capabilities, Recursive FEC [RFC6512], traffic 149 protection [RFC7715] [RFC7431], static leaf IPv6 LSPs with generic 150 LSP Id, and static leaf IPv4/IPv6 LSPs of all other opaque types 151 (transit, bidir, recursive). It is worth highlighting that any IPv6 152 related feature support is categorized as an extended feature. 154 While "base" model support will suffice for small deployments, it is 155 expected that large deployments will require both the "base" and 156 "extended" model support from the vendors. 158 2. Specification of Requirements 160 In this document, the word "IP" is used to refer to both IPv4 and 161 IPv6, unless otherwise explicitly stated. For example, "IP address 162 family" should be read as "IPv4 and/or IPv6 address family". 164 3. Overview 166 This document defines two new modules for mLDP YANG support: 168 * "ietf-mpls-mldp" module that specifies the base mLDP features 170 * "ietf-mpls-mldp-extended" module that specifies the extended mLDP 171 features 173 Both the modules augment the LDP module (/rt:routing/rt:control- 174 plane-protocols/rt:control-plane- protocol/ldp:mpls-ldp) as defined 175 in [I-D.ietf-mpls-ldp-yang] 177 There are four types of containers in our module(s): 179 * Read-write parameters for configuration (Section 5) 181 * Read-only parameters for operational state (Section 6) 183 * Notifications for events (Section 7) 184 Currently, no RPCs for executing commands to perform some action are 185 defined in our mLDP modules. 187 The modules in this document conform to the Network Management 188 Datastore Architecture (NMDA) defined in [RFC8342]. The operational 189 state data is combined with the associated configuration data in the 190 same hierarchy [RFC8407]. When protocol states are retrieved from 191 the NMDA operational state datastore, the returned states cover all 192 "config true" (rw) and "config false" (ro) nodes defined in the 193 schema. 195 The following diagram depicts high-level mLDP yang tree organization 196 and hierarchy with respect to LDP: 198 +-- rw routing 199 +-- rw control-plane-protocols 200 +-- rw control-plane-protocol 201 +-- rw mpls-ldp 202 +-- rw some_ldp_container 203 | +-- rw mldp 204 | +-- rw ... // mldp base 205 | | +-- rw ... 206 | | +-- ro ... 207 | | +-- 208 | +-- rw mldp-ext:... // mldp extended 209 | | +-- rw ... 210 | | +-- ro ... 211 | | +-- 212 +-- ro someother_ldp_container 213 +-- ro mldp 214 +-- ro ... // mldp base 215 | +-- ro ... 216 | +-- 217 +-- ro mldp-ext:... // mldp extended 218 +-- ro ... 219 +-- 221 notifications: 222 +--- n mpls-mldp-some_event 223 +--- n ... 225 Figure 1: mLDP YANG Tree Organization 227 The mLDP areas and features that are within the scope of this 228 modeling effort are as follows: 230 * Base: 232 - mLDP Base Specification [RFC6388] 234 - Targeted mLDP [RFC7060] 236 - Configured Leaf LSPs (manually provisioned) 238 * Extended: 240 - mLDP Recursive FEC [RFC6512] 242 - mLDP Fast-Reroute (FRR): 244 o Node Protection [RFC7715] 246 o Multicast-only [RFC7431] 248 - Hub-and-Spoke Multipoint LSPs [RFC7140] 250 - In-band Signaling: 252 o mLDP In-band Signaling [RFC6826] 254 o mLDP In-band signaling in a VRF [RFC7246] 256 o mLDP In-band Signaling with Wildcards [RFC7438] 258 [Ed Note: Some of the topics in the above list are to be addressed/ 259 extended in a later revision of this document]. 261 For manually provisioned Multipoint LSPs, we represent its associated 262 FEC as (root-address, opaque-element) tuple. The following table 263 lists various type of opaque elements with their keys, as later used 264 in the configuration and state model: 266 +========================+===================+===========+ 267 | Opaque Type | Key | RFC | 268 +========================+===================+===========+ 269 | Generic LSP Identifier | LSP Id | [RFC6388] | 270 +------------------------+-------------------+-----------+ 271 | Transit IPv4 Source | Source, Group | [RFC6826] | 272 +------------------------+-------------------+-----------+ 273 | Transit IPv6 Source | Source, Group | [RFC6826] | 274 +------------------------+-------------------+-----------+ 275 | Transit IPv4 Bidir | RP, Group | [RFC6826] | 276 +------------------------+-------------------+-----------+ 277 | Transit IPv6 Bidir | RP, Group | [RFC6826] | 278 +------------------------+-------------------+-----------+ 279 | Transit VPNv4 Source | Source, Group, RD | [RFC7246] | 280 +------------------------+-------------------+-----------+ 281 | Transit VPNv6 Source | Source, Group, RD | [RFC7246] | 282 +------------------------+-------------------+-----------+ 283 | Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] | 284 +------------------------+-------------------+-----------+ 285 | Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] | 286 +------------------------+-------------------+-----------+ 287 | Recursive Opaque | Root | [RFC6512] | 288 +------------------------+-------------------+-----------+ 289 | VPN-Recursive Opaque | Root, RD | [RFC6512] | 290 +------------------------+-------------------+-----------+ 292 Table 1: URIs 294 It should be noted that there are three basic types (LSP Id, Source, 295 and Bidir) and then there are variants (VPN, recursive, VPN- 296 recursive) on top of these basic types. The "base" data model 297 includes only the "Generic LSP Identifier" opaque type (for ipv4), 298 while rest of the above types are covered by the "extended" model. 300 A simplified graphical tree representation of base and extended mLDP 301 YANG data models is presented in Figure 2. The meaning of the 302 symbols in these tree diagrams is defined in [RFC8340]. 304 The actual YANG specification for base and extended modules is 305 captured in Section 9. 307 While presenting the YANG tree view and actual specification, this 308 document assumes readers are familiar with the concepts of YANG 309 modeling, its presentation and its compilation. 311 4. The Complete Tree 313 The following is a complete tree representation of configuration, 314 state, and notification items under mLDP base and extended modules. 315 Since mLDP modules augement LDP module, the mLDP tree view is shown 316 with respective to LDP. 318 module: ietf-mpls-ldp 319 augment /rt:routing/rt:control-plane-protocols 320 /rt:control-plane-protocol: 321 +--rw mpls-ldp 322 +--rw global 323 | +--rw capability 324 | | +--rw mldp:mldp 325 | | +--rw mldp:p2mp 326 | | | +--rw mldp:enabled? boolean 327 | | +--rw mldp:mp2mp 328 | | | +--rw mldp:enabled? boolean 329 | | +--rw mldp:make-before-break 330 | | | +--rw mldp:enabled? boolean 331 | | | +--rw mldp:switchover-delay? uint16 332 | | | +--rw mldp:timeout? uint16 333 | | +--rw mldp-ext:hub-and-spoke {capability-mldp-hsmp}? 334 | | | +--rw mldp-ext:enabled? boolean 335 | | +--rw mldp-ext:node-protection 336 | | {capability-mldp-node-protection}? 337 | | +--rw mldp-ext:plr? boolean 338 | | +--rw mldp-ext:merge-point 339 | | +--rw mldp-ext:enabled? 340 | | | boolean 341 | | +--rw mldp-ext:targeted-session-teardown-delay? 342 | | uint16 343 | +--rw ldp-ext:forwarding-nexthop 344 | | {forwarding-nexthop-config}? 345 | | +--rw ldp-ext:interfaces 346 | | +--rw ldp-ext:interface* [name] 347 | | +--rw ldp-ext:name if:interface-ref 348 | | +--rw ldp-ext:address-family* [afi] 349 | | +--rw ldp-ext:afi identityref 350 | | +--rw mldp-ext:mldp-disable? boolean 351 | +--rw mldp:mldp 352 | +--rw mldp:enabled? boolean 353 | +--rw mldp:address-families 354 | +--rw mldp:ipv4! 355 | | +--ro mldp:roots 356 | | | +--ro mldp:root* [root-address] 357 | | | +--ro mldp:root-address inet:ipv4-address 358 | | | +--ro mldp:is-self? boolean 359 | | | +--ro mldp:reachability* [address interface] 360 | | | | +--ro mldp:address inet:ipv4-address 361 | | | | +--ro mldp:interface if:interface-ref 362 | | | | +--ro mldp:peer? leafref 363 | | | +--ro mldp:bindings 364 | | | +--ro mldp:opaque-element-lspid 365 | | | | +--ro mldp:fec-label* [lsp-id] 366 | | | | +--ro mldp:lsp-id 367 | | | | | uint32 368 | | | | +--ro mldp:multipoint-type? 369 | | | | | multipoint-type 370 | | | | +--ro mldp:peer* 371 | | | | | [direction peer advertisement-type] 372 | | | | | +--ro mldp:peer leafref 373 | | | | | +--ro mldp:direction 374 | | | | | | ldp:downstream-upstream 375 | | | | | +--ro mldp:advertisement-type 376 | | | | | | ldp:advertised-received 377 | | | | | +--ro mldp:label? 378 | | | | | | rt-types:mpls-label 379 | | | | | +--ro mldp:mbb-role? 380 | | | | | | enumeration 381 | | | | | +--ro mldp-ext:mofrr-role? 382 | | | | | mofrr-role 383 | | | | +--ro mldp-ext:recursive-fec* 384 | | | | [recur-root-address recur-rd] 385 | | | | +--ro mldp-ext:recur-root-address 386 | | | | | inet:ip-address 387 | | | | +--ro mldp-ext:recur-rd 388 | | | | | rt-types:route-distinguisher 389 | | | | +--ro mldp-ext:multipoint-type? 390 | | | | | mldp:multipoint-type 391 | | | | +--ro mldp-ext:peer* 392 | | | | [direction peer advertisement-type] 393 | | | | +--ro mldp-ext:peer leafref 394 | | | | +--ro mldp-ext:direction 395 | | | | | ldp:downstream-upstream 396 | | | | +--ro mldp-ext:advertisement-type 397 | | | | | ldp:advertised-received 398 | | | | +--ro mldp-ext:label? 399 | | | | | rt-types:mpls-label 400 | | | | +--ro mldp-ext:mbb-role? 401 | | | | | enumeration 402 | | | | +--ro mldp-ext:mofrr-role? 403 | | | | mofrr-role 404 | | | +--ro mldp-ext:opaque-element-transit 405 | | | | +--ro mldp-ext:fec-label* 406 | | | | [source-address group-address rd recur-root-address recur-rd] 407 | | | | +--ro mldp-ext:source-address 408 | | | | | inet:ip-address 409 | | | | +--ro mldp-ext:group-address 410 | | | | | inet:ip-address-no-zone 411 | | | | +--ro mldp-ext:rd 412 | | | | | rt-types:route-distinguisher 413 | | | | +--ro mldp-ext:recur-root-address 414 | | | | | inet:ip-address 415 | | | | +--ro mldp-ext:recur-rd 416 | | | | | rt-types:route-distinguisher 417 | | | | +--ro mldp-ext:multipoint-type? 418 | | | | | mldp:multipoint-type 419 | | | | +--ro mldp-ext:peer* 420 | | | | [direction peer advertisement-type] 421 | | | | +--ro mldp-ext:peer leafref 422 | | | | +--ro mldp-ext:direction 423 | | | | | ldp:downstream-upstream 424 | | | | +--ro mldp-ext:advertisement-type 425 | | | | | ldp:advertised-received 426 | | | | +--ro mldp-ext:label? 427 | | | | | rt-types:mpls-label 428 | | | | +--ro mldp-ext:mbb-role? 429 | | | | | enumeration 430 | | | | +--ro mldp-ext:mofrr-role? 431 | | | | mofrr-role 432 | | | +--ro mldp-ext:opaque-element-bidir 433 | | | +--ro mldp-ext:fec-label* 434 | | | [rp group-address rd recur-root-address recur-rd] 435 | | | +--ro mldp-ext:rp 436 | | | | inet:ip-address 437 | | | +--ro mldp-ext:group-address 438 | | | | inet:ip-address-no-zone 439 | | | +--ro mldp-ext:rd 440 | | | | rt-types:route-distinguisher 441 | | | +--ro mldp-ext:recur-root-address 442 | | | | inet:ip-address 443 | | | +--ro mldp-ext:recur-rd 444 | | | | rt-types:route-distinguisher 445 | | | +--ro mldp-ext:multipoint-type? 446 | | | | mldp:multipoint-type 447 | | | +--ro mldp-ext:peer* 448 | | | [direction peer advertisement-type] 449 | | | +--ro mldp-ext:peer leafref 450 | | | +--ro mldp-ext:direction 451 | | | | ldp:downstream-upstream 452 | | | +--ro mldp-ext:advertisement-type 453 | | | | ldp:advertised-received 454 | | | +--ro mldp-ext:label? 455 | | | | rt-types:mpls-label 456 | | | +--ro mldp-ext:mbb-role? 457 | | | | enumeration 458 | | | +--ro mldp-ext:mofrr-role? 459 | | | mofrr-role 460 | | +--rw mldp:configured-leaf-lsps 461 | | | +--rw mldp:opaque-element-lspid 462 | | | | +--rw mldp:fec-label* [root-address lsp-id] 463 | | | | +--rw mldp:root-address 464 | | | | | inet:ipv4-address 465 | | | | +--rw mldp:lsp-id uint32 466 | | | | +--rw mldp:multipoint-type? 467 | | | | | multipoint-type 468 | | | | +--rw mldp-ext:recursive-fec* 469 | | | | [recur-root-address recur-rd] 470 | | | | +--rw mldp-ext:recur-root-address 471 | | | | | inet:ip-address 472 | | | | +--rw mldp-ext:recur-rd 473 | | | | | rt-types:route-distinguisher 474 | | | | +--rw mldp-ext:multipoint-type? 475 | | | | mldp:multipoint-type 476 | | | +--rw mldp-ext:opaque-element-transit 477 | | | | +--rw mldp-ext:fec-label* 478 | | | | [root-address source-address group-address rd recur-root-address recur-rd] 479 | | | | +--rw mldp-ext:root-address 480 | | | | | inet:ipv4-address 481 | | | | +--rw mldp-ext:source-address 482 | | | | | inet:ip-address 483 | | | | +--rw mldp-ext:group-address 484 | | | | | inet:ip-address-no-zone 485 | | | | +--rw mldp-ext:rd 486 | | | | | rt-types:route-distinguisher 487 | | | | +--rw mldp-ext:recur-root-address 488 | | | | | inet:ip-address 489 | | | | +--rw mldp-ext:recur-rd 490 | | | | | rt-types:route-distinguisher 491 | | | | +--rw mldp-ext:multipoint-type? 492 | | | | mldp:multipoint-type 493 | | | +--rw mldp-ext:opaque-element-bidir 494 | | | +--rw mldp-ext:fec-label* 495 | | | [root-address rp group-address rd recur-root-address recur-rd] 496 | | | +--rw mldp-ext:root-address 497 | | | | inet:ipv4-address 498 | | | +--rw mldp-ext:rp 499 | | | | inet:ip-address 500 | | | +--rw mldp-ext:group-address 501 | | | | inet:ip-address-no-zone 502 | | | +--rw mldp-ext:rd 503 | | | | rt-types:route-distinguisher 504 | | | +--rw mldp-ext:recur-root-address 505 | | | | inet:ip-address 506 | | | +--rw mldp-ext:recur-rd 507 | | | | rt-types:route-distinguisher 508 | | | +--rw mldp-ext:multipoint-type? 509 | | | mldp:multipoint-type 510 | | +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 511 | | | +--rw mldp-ext:prefix-list? 512 | | | ldp-ext:prefix-list-ref 513 | | +--rw mldp-ext:recursive-fec 514 | | +--rw mldp-ext:prefix-list? 515 | | ldp-ext:prefix-list-ref 516 | +--rw mldp-ext:ipv6! 517 | +--ro mldp-ext:roots 518 | | +--ro mldp-ext:root* [root-address] 519 | | +--ro mldp-ext:root-address 520 | | | inet:ipv6-address 521 | | +--ro mldp-ext:is-self? boolean 522 | | +--ro mldp-ext:reachability* 523 | | | [address interface] 524 | | | +--ro mldp-ext:address 525 | | | | inet:ipv6-address 526 | | | +--ro mldp-ext:interface 527 | | | | if:interface-ref 528 | | | +--ro mldp-ext:peer? leafref 529 | | +--ro mldp-ext:bindings 530 | | +--ro mldp-ext:opaque-element-lspid 531 | | | +--ro mldp-ext:fec-label* [lsp-id] 532 | | | +--ro mldp-ext:lsp-id 533 | | | | uint32 534 | | | +--ro mldp-ext:multipoint-type? 535 | | | | mldp:multipoint-type 536 | | | +--ro mldp-ext:peer* 537 | | | | [direction peer advertisement-type] 538 | | | | +--ro mldp-ext:peer leafref 539 | | | | +--ro mldp-ext:direction 540 | | | | | ldp:downstream-upstream 541 | | | | +--ro mldp-ext:advertisement-type 542 | | | | | ldp:advertised-received 543 | | | | +--ro mldp-ext:label? 544 | | | | | rt-types:mpls-label 545 | | | | +--ro mldp-ext:mbb-role? 546 | | | | | enumeration 547 | | | | +--ro mldp-ext:mofrr-role? 548 | | | | mofrr-role 549 | | | +--ro mldp-ext:recursive-fec* 550 | | | [recur-root-address recur-rd] 551 | | | +--ro mldp-ext:recur-root-address 552 | | | | inet:ip-address 553 | | | +--ro mldp-ext:recur-rd 554 | | | | rt-types:route-distinguisher 555 | | | +--ro mldp-ext:multipoint-type? 556 | | | | mldp:multipoint-type 557 | | | +--ro mldp-ext:peer* 558 | | | [direction peer advertisement-type] 559 | | | +--ro mldp-ext:peer leafref 560 | | | +--ro mldp-ext:direction 561 | | | | ldp:downstream-upstream 562 | | | +--ro mldp-ext:advertisement-type 563 | | | | ldp:advertised-received 564 | | | +--ro mldp-ext:label? 565 | | | | rt-types:mpls-label 566 | | | +--ro mldp-ext:mbb-role? 567 | | | | enumeration 568 | | | +--ro mldp-ext:mofrr-role? 569 | | | mofrr-role 570 | | +--ro mldp-ext:opaque-element-transit 571 | | | +--ro mldp-ext:fec-label* 572 | | | [source-address group-address rd recur-root-address recur-rd] 573 | | | +--ro mldp-ext:source-address 574 | | | | inet:ip-address 575 | | | +--ro mldp-ext:group-address 576 | | | | inet:ip-address-no-zone 577 | | | +--ro mldp-ext:rd 578 | | | | rt-types:route-distinguisher 579 | | | +--ro mldp-ext:recur-root-address 580 | | | | inet:ip-address 581 | | | +--ro mldp-ext:recur-rd 582 | | | | rt-types:route-distinguisher 583 | | | +--ro mldp-ext:multipoint-type? 584 | | | | mldp:multipoint-type 585 | | | +--ro mldp-ext:peer* 586 | | | [direction peer advertisement-type] 587 | | | +--ro mldp-ext:peer leafref 588 | | | +--ro mldp-ext:direction 589 | | | | ldp:downstream-upstream 590 | | | +--ro mldp-ext:advertisement-type 591 | | | | ldp:advertised-received 592 | | | +--ro mldp-ext:label? 593 | | | | rt-types:mpls-label 594 | | | +--ro mldp-ext:mbb-role? 595 | | | | enumeration 596 | | | +--ro mldp-ext:mofrr-role? 597 | | | mofrr-role 598 | | +--ro mldp-ext:opaque-element-bidir 599 | | +--ro mldp-ext:fec-label* 600 | | [rp group-address rd recur-root-address recur-rd] 601 | | +--ro mldp-ext:rp 602 | | | inet:ip-address 603 | | +--ro mldp-ext:group-address 604 | | | inet:ip-address-no-zone 605 | | +--ro mldp-ext:rd 606 | | | rt-types:route-distinguisher 607 | | +--ro mldp-ext:recur-root-address 608 | | | inet:ip-address 609 | | +--ro mldp-ext:recur-rd 610 | | | rt-types:route-distinguisher 611 | | +--ro mldp-ext:multipoint-type? 612 | | | mldp:multipoint-type 613 | | +--ro mldp-ext:peer* 614 | | [direction peer advertisement-type] 615 | | +--ro mldp-ext:peer leafref 616 | | +--ro mldp-ext:direction 617 | | | ldp:downstream-upstream 618 | | +--ro mldp-ext:advertisement-type 619 | | | ldp:advertised-received 620 | | +--ro mldp-ext:label? 621 | | | rt-types:mpls-label 622 | | +--ro mldp-ext:mbb-role? 623 | | | enumeration 624 | | +--ro mldp-ext:mofrr-role? 625 | | mofrr-role 626 | +--rw mldp-ext:configured-leaf-lsps 627 | | +--rw mldp-ext:opaque-element-lspid 628 | | | +--rw mldp-ext:fec-label* 629 | | | [root-address lsp-id] 630 | | | +--rw mldp-ext:root-address 631 | | | | inet:ipv6-address 632 | | | +--rw mldp-ext:lsp-id uint32 633 | | | +--rw mldp-ext:multipoint-type? 634 | | | | mldp:multipoint-type 635 | | | +--rw mldp-ext:recursive-fec* 636 | | | [recur-root-address recur-rd] 637 | | | +--rw mldp-ext:recur-root-address 638 | | | | inet:ip-address 639 | | | +--rw mldp-ext:recur-rd 640 | | | | rt-types:route-distinguisher 641 | | | +--rw mldp-ext:multipoint-type? 642 | | | mldp:multipoint-type 643 | | +--rw mldp-ext:opaque-element-transit 644 | | | +--rw mldp-ext:fec-label* 645 | | | [root-address source-address group-address rd recur-root-address recur-rd] 646 | | | +--rw mldp-ext:root-address 647 | | | | inet:ipv6-address 648 | | | +--rw mldp-ext:source-address 649 | | | | inet:ip-address 650 | | | +--rw mldp-ext:group-address 651 | | | | inet:ip-address-no-zone 652 | | | +--rw mldp-ext:rd 653 | | | | rt-types:route-distinguisher 654 | | | +--rw mldp-ext:recur-root-address 655 | | | | inet:ip-address 656 | | | +--rw mldp-ext:recur-rd 657 | | | | rt-types:route-distinguisher 658 | | | +--rw mldp-ext:multipoint-type? 659 | | | mldp:multipoint-type 660 | | +--rw mldp-ext:opaque-element-bidir 661 | | +--rw mldp-ext:fec-label* 662 | | [root-address rp group-address rd recur-root-address recur-rd] 663 | | +--rw mldp-ext:root-address 664 | | | inet:ipv6-address 665 | | +--rw mldp-ext:rp 666 | | | inet:ip-address 667 | | +--rw mldp-ext:group-address 668 | | | inet:ip-address-no-zone 669 | | +--rw mldp-ext:rd 670 | | | rt-types:route-distinguisher 671 | | +--rw mldp-ext:recur-root-address 672 | | | inet:ip-address 673 | | +--rw mldp-ext:recur-rd 674 | | | rt-types:route-distinguisher 675 | | +--rw mldp-ext:multipoint-type? 676 | | mldp:multipoint-type 677 | +--rw mldp-ext:multicast-only-frr {mldp-mofrr}? 678 | | +--rw mldp-ext:prefix-list? 679 | | ldp-ext:prefix-list-ref 680 | +--rw mldp-ext:recursive-fec 681 | +--rw mldp-ext:prefix-list? 682 | ldp-ext:prefix-list-ref 683 +--rw peers 684 +--rw peer* [lsr-id label-space-id] 685 +--rw lsr-id rt-types:router-id 686 +--rw label-space-id uint16 687 +--rw address-families 688 +--ro received-peer-state 689 +--ro capability 690 +--ro mldp:mldp 691 +--ro mldp:p2mp 692 | +--ro mldp:enabled? boolean 693 +--ro mldp:mp2mp 694 | +--ro mldp:enabled? boolean 695 +--ro mldp:make-before-break 696 | +--ro mldp:enabled? boolean 697 +--ro mldp-ext:hub-and-spoke 698 | +--ro mldp-ext:enabled? boolean 699 +--ro mldp-ext:node-protection 700 +--ro mldp-ext:plr? boolean 701 +--ro mldp-ext:merge-point? boolean 703 module: ietf-mpls-mldp 705 notifications: 706 +---n mpls-mldp-fec-event 707 +--ro event-type? 708 | ldp:oper-status-event-type 709 +--ro (opaque-element)? 710 +--:(opaque-element-lspid) 711 | +--ro opaque-element-lspid 712 | +--ro root-address? inet:ip-address 713 | +--ro lsp-id? uint32 714 | +--ro multipoint-type? multipoint-type 715 | +--ro mldp-ext:recursive-fec 716 | +--ro mldp-ext:recur-root-address? 717 | | inet:ip-address 718 | +--ro mldp-ext:recur-rd? 719 | | rt-types:route-distinguisher 720 | +--ro mldp-ext:multipoint-type? 721 | mldp:multipoint-type 722 +--:(mldp-ext:opaque-element-transit) 723 | +--ro mldp-ext:opaque-element-transit 724 | +--ro mldp-ext:root-address? inet:ip-address 725 | +--ro mldp-ext:source-address? inet:ip-address 726 | +--ro mldp-ext:group-address? 727 | | inet:ip-address-no-zone 728 | +--ro mldp-ext:rd? 729 | | rt-types:route-distinguisher 730 | +--ro mldp-ext:recur-root-address? inet:ip-address 731 | +--ro mldp-ext:recur-rd? 732 | | rt-types:route-distinguisher 733 | +--ro mldp-ext:multipoint-type? 734 | mldp:multipoint-type 735 +--:(mldp-ext:opaque-element-bidir) 736 +--ro mldp-ext:opaque-element-bidir 737 +--ro mldp-ext:root-address? inet:ip-address 738 +--ro mldp-ext:rp? inet:ip-address 739 +--ro mldp-ext:group-address? 740 | inet:ip-address-no-zone 741 +--ro mldp-ext:rd? 742 | rt-types:route-distinguisher 743 +--ro mldp-ext:recur-root-address? inet:ip-address 744 +--ro mldp-ext:recur-rd? 745 | rt-types:route-distinguisher 746 +--ro mldp-ext:multipoint-type? 747 mldp:multipoint-type 749 Figure 2: Complete Tree 751 5. Configuration 753 This specification defines the parameters for configuring the base 754 and extended mLDP features. As stated earlier, mLDP configuration 755 items augment relevant LDP configuration hiearchy. 757 5.1. High-level Hierarchy 759 The following presents a high-level view of configuration hierarchy 760 for mLDP with respect to LDP: 762 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 763 +-- mpls-ldp 764 +-- global 765 +-- ... 766 +-- ... 767 +-- mldp 768 | +-- ... 769 | +-- ... 770 | +-- address-families 771 | +-- ipv4 772 | | +-- ... 773 | | +-- mldp-ext: ... 774 | | +-- ... 775 | | +-- configured-leaf-lsps 776 | | +-- ... 777 | | +-- ... 778 | | +-- mldp-ext: ... 779 | | +-- ... 780 | | 781 | +-- mldp-ext: ipv6 782 | +-- ... 783 | +-- ... 784 | +-- configured-leaf-lsps 785 | +-- ... 786 | +-- ... 787 +-- capability 788 | +-- mldp 789 | +-- ... 790 | +-- mldp-ext: ... 791 | +-- ... 792 | 793 +-- forwarding-nexthop 794 +--- interfaces 795 +--- interface* [name] 796 +--- mldp-ext: ... 798 Figure 3: Configuration Hierarchy 800 The above hierarchy illustrates that mLDP configuation parameters are 801 distributed amongst the following three sections: 803 * mldp base 805 * mldp capabilities 807 * mldp forwarding 808 The following subsections describe the above mLDP sub-tree alongwith 809 their configuration items. 811 5.2. Base Parameters 813 mldp container falls directly under mpls-ldp:global and holds the 814 configuration related to items that are mLDP specific. The main 815 items under this container are: 817 * mLDP enablement: To enable mLDP under a (VRF) routing instance, 818 mldp is enabled in the mldp container under LDP. It is to remind 819 that the LDP modules reside under a network-instance and the scope 820 of any configuration defined under this tree is network-instance 821 (VRF) scoped. Given that mLDP requires LDP signaling, it is not 822 sensible to allow disabling the LDP control plane under a (VRF) 823 network-instance while requiring mLDP to be enabled for the same. 824 However, if a user wants to only allow signaling for multipoint 825 FECs on an LDP/mLDP enabled VRF instance, he/she can use LDP 826 label-policies to disable unicast FECs under the VRF. 827 Alteratively, the same can be acheived by advertising the 828 capabilities and the procedures defined in [RFC7473]. 830 * Per address-family mLDP features: mLDP manages its own list of IP 831 address-families and the features enabled underneath. The per-AF 832 mLDP configuration items include: 834 - Multicast-only FRR: This enables Multicast-only FRR 835 functionality for a given AF under mLDP. The feature allows 836 route-policy to be configured for finer control/applicability 837 of the feature. 839 - Recursive FEC: The recursive-fec feature [RFC6512] can be 840 enabled per-AF with a route-policy. 842 - Configured Leaf LSPs: To provision multipoint leaf LSPs 843 manually, a per-AF container is provided under LDP. The 844 configuration is flexible and allows a user to specify MP LSPs 845 of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by 846 using either LSP-Id or (S,G). 848 Targeted mLDP feature specification [RFC7060] does not require any 849 mLDP specific configuration. It, however, requires LDP upstream- 850 label-assignment capability [RFC6389] to be enabled. 852 5.3. Capabilities Parameters 854 mldp capabilities are enabled under mldp specific container under 855 ldp:global:capability container. In the scope of this document, the 856 most important capabilities related to mLDP are p2mp, mp2mp, make- 857 before-break, hub-and-spoke, and node-protection. 859 It is worth reminding that mLDP requires LDP discovery and peer 860 procedures to form mLDP peering but a peer is considered as an mLDP 861 peer only when either p2mp or mp2mp capabilities have been 862 successfully exchanged with the peer. 864 In most common deployments, it is desirable to disable mLDP 865 (capabilities announcements) on a targeted-only LDP peering, where 866 targeted-only peer is the one whose discovery sources are the 867 targeted type only. 869 5.4. Forwarding Parameters 871 The container ldp:global:forwarding-nexthop is used to hold 872 configuration to controlling LDP/mLDP forwarding behavior. One 873 example of a such a configuration is to allow a user in disabling the 874 use of LDP interface(s) as an mLDP forwarding egress interface for MP 875 LSPs(s). This example configuration makes sense only when there are 876 more than one interface available for the selection. 878 6. Operational State 880 The mLDP modules conform to the NMDA where the operational state data 881 is combined with the associated configuration data in the same 882 hierarchy. This means that When protocol states are retrieved from 883 the NMDA operational state datastore, the returned states cover all 884 "config true" (rw) and "config false" (ro) nodes defined in the 885 schema. 887 The following are the main areas for which mLDP operational state is 888 defined: 890 * Root 892 * Bindings (FEC-label) 894 * Capabilities 896 6.1. Root State 898 The root address is a fundamental construct for MP FEC bindings and 899 LSPs. The root state provides information on all the known roots in 900 a given address-familty and their root reachability information (as 901 learnt from RIB). In case of multi-path reachability to a root, the 902 selection of the upstream path is done on per-LSP basis at the time 903 of LSP setup. Similarly, when protection mechanisms like Make- 904 before-break (MBB) or Multicast-only FRR (MoFRR) are in place, the 905 path designation as active/standby or primary/backup is also done on 906 per-LSP basis. It should be noted that a given root can be shared 907 amongst multiple P2MP and/or MP2MP LSPs. Moreover, an LSP can be 908 signaled to more than one root for Root Node Redundancy (RNR) 909 purposes. 911 The following example illustrates a root database on a branch/transit 912 LSR: 914 root 203.0.113.1: 915 path1: 916 RIB: GigEthernet 1/0, 198.51.100.1; 917 LDP: peer 192.0.2.1:0 918 path2: 919 RIB: GigEthernet 2/0, 198.51.100.16; 920 LDP: peer 192.0.2.2:0 922 root 203.0.113.2: 923 path1: 924 RIB: 198.51.100.100; (NOTE: This is a recursive path) 925 LDP: peer 192.0.2.100:0 (NOTE: T-mLDP peer) 927 root 2001:db8:0:9::1: 928 path1: 929 RIB: GigEthernet 1/0, 2001:db8:0:1::1 930 LDP: peer 192.0.2.1:0 932 root . . . . 934 Figure 4: Example Root database 936 A root entry on a root LSR itself will be presented as follows: 938 root 203.0.113.10: 939 is-self 941 root 2001:db8:0:9::1: 942 is-self 944 Figure 5: Example Root entry on a Root node 946 The following digram captures the high-level tree hierarchy for state 947 of an mLDP root The tree is shown for ipv4 roots only; a similar tree 948 exists for ipv6 roots as well. 950 +--rw mpls-ldp 951 +--rw global 952 +--rw mldp:mldp 953 +--rw mldp:address-families 954 +--rw mldp:ipv4! 955 +--ro mldp:roots 956 +--ro mldp:root* [root-address] 957 +--ro mldp:root-address inet:ipv4-address 958 +--ro mldp:is-self? boolean 959 +--ro mldp:reachability* [address interface] 960 +--ro mldp:address inet:ipv4-address 961 +--ro mldp:interface if:interface-ref 962 +--ro mldp:peer? leafref 964 Figure 6: Root state tree 966 6.2. Bindings State 968 Binding state provides information on mLDP FEC-label bindings for 969 both the P2MP and MP2MP FEC types. The state includes both the 970 inbound (received) and the outbound (advertised) bindings. Like LDP, 971 the state of FEC-label binding is presented per address-family in a 972 FEC-centric view per address-family. An mLDP FEC is presented as 973 (root-address, opaque-element-data) tuple as described earlier in 974 Section 3, alongwith its direction (upstream or downstream) as picked 975 with respect to the root reachability. The role of a given peer 976 binding is also provided in case of MBB (as active or standby) and/or 977 MoFRR (as primary or backup). 979 The following example illustrates a FEC-label binding database on a 980 branch/transit LSR for both P2MP and MP2MP FECs of Transit Source 981 type: 983 Transit IPv4 Source: 985 FEC (root 203.0.113.1, S=198.51.100.1, G=224.1.1.1): 986 type: p2mp 987 upstream: 988 advertised: 989 peer 192.0.2.1:0, label 16000 (local) 990 downstream: 991 received: 992 peer 192.0.2.2:0, label 17000 (remote) 993 peer 192.0.2.3:0, label 18000 (remote) 995 FEC (root 203.0.113.1, S=198.51.100.2, G=224.1.1.1): 996 type: mp2mp 997 upstream: 998 advertised: 999 peer 192.0.2.1:0, label 26000 (local) 1000 received: 1001 peer 192.0.2.1:0, label 27000 (remote) 1002 downstream: 1003 advertised: 1004 peer 192.0.2.2:0, label 26001 (local), MBB role=active 1005 peer 192.0.2.3:0, label 26002 (local), MBB role=standby 1006 received: 1007 peer 192.0.2.2:0, label 27001 (remote) 1008 peer 192.0.2.3:0, label 28001 (remote) 1010 Transit IPv6 Source: 1012 FEC (root 203.0.113.1, S=2001:db8:0:9::1, G=ff39:1::1): 1013 type: p2mp 1014 upstream: 1015 advertised: 1016 peer 192.0.2.1:0, label 16100 (local) 1017 downstream: 1018 received: 1019 peer 192.0.2.2:0, label 17100 (remote) 1020 peer 192.0.2.3:0, label 18100 (remote) 1022 FEC (root 203.0.113.1, S=2001:db8:0:9::2, G=ff39:1::1): 1023 type: mp2mp 1024 upstream: 1025 advertised: 1026 peer 192.0.2.1:0, label 26100 (local) 1027 received: 1029 peer 192.0.2.1:0, label 27100 (remote) 1030 downstream: 1031 advertised: 1032 peer 192.0.2.2:0, label 26101 (local), MBB role=active 1033 peer 192.0.2.3:0, label 26102 (local), MBB role=standby 1034 received: 1035 peer 192.0.2.2:0, label 27101 (remote) 1036 peer 192.0.2.3:0, label 28101 (remote) 1038 Figure 7: Example Binding database 1040 The following captures the high-level tree hierarchy for mLDP 1041 bindings state. The tree shown below is for ipv4 root only; a 1042 similar tree exists for ipv6 root as well. 1044 +--rw mpls-ldp 1045 +--rw global 1046 +--rw mldp:mldp 1047 +--rw mldp:address-families 1048 +--rw mldp:ipv4! 1049 +--ro mldp:root* [root-address] 1050 +--ro mldp:root-address inet:ipv4-address 1051 +--ro mldp:bindings 1052 +--ro mldp:opaque-element-xxx 1053 | +--ro mldp:fec-label* [key1 key2 ...] 1054 | +--ro mldp:key1 1055 | +--ro mldp:key2 1056 | +--ro mldp:... 1057 | +--ro mldp:multipoint-type? multipoint-type 1058 | +--ro mldp:peer* [direction peer advertisement-type] 1059 | +--ro mldp:peer leafref 1060 | +--ro mldp:direction ldp:downstream-upstream 1061 | +--ro mldp:advertisement-type ldp:advertised-received 1062 | +--ro mldp:label? rt-types:mpls-label 1063 | +--ro mldp:mbb-role? enumeration 1064 | +--ro mldp-ext:mofrr-role? mofrr-role 1065 +--ro mldp:opaque-element-yyy 1066 +--ro mldp:fec-label* [keya keyb ...] 1067 +--ro mldp: . . . 1069 Figure 8: Binding state tree (ipv4 root) 1071 mLDP binding state is organized and presented per root address; 1072 hence, the bindings container is under a root node in the model. The 1073 bindings state is made available for FECs pertaining to different 1074 types of opaque elements, with some state avaiable under the "base" 1075 tree and the rest under the "extended" tree. 1077 In the above tree, the various opaque types along with their type 1078 specific key(s) refer to the table Table 1 as captured earlier in the 1079 document. For example, if the opaque type is a Generic LSP 1080 Identifier, then the type-specific-key will be a uint32 LSP-Id key. 1081 Please see the complete model for all other types. 1083 It is worth higlighting that: 1085 * The address-family ipv4/ipv6 applies to "root" address in the mLDP 1086 binding tree. The other addresses (source, group, Rendezvous- 1087 Point etc.) do not have to be of the same address family type as 1088 the root. 1090 * In case of a recursive FECs, the "recur-root-address" field is 1091 applicable. In case of VPN-Recursive type, "recur-rd" field is 1092 also applicable. 1094 6.3. Capabilities State 1096 Like LDP, mLDP capabilities state comprises two types of information: 1098 * global: augments ldp:global/ldp:capability 1100 * per-peer: augments ldp:peers/ldp:peer/ldp:capability 1102 The following tree captures the high-level tree hierarchy for mLDP 1103 capabilities state. 1105 +--rw mpls-ldp 1106 +--rw global 1107 | +--rw capability 1108 | | +--rw mldp:mldp 1109 | | +--rw mldp:p2mp 1110 | | | +--rw mldp:enabled? boolean 1111 | | +--rw mldp:mp2mp 1112 | | | +--rw mldp:enabled? boolean 1113 | | +--rw mldp:make-before-break 1114 | | | +--rw mldp:enabled? boolean 1115 | | | +--rw mldp:switchover-delay? uint16 1116 | | | +--rw mldp:timeout? uint16 1117 | | +--rw mldp-ext:hub-and-spoke {capability-mldp-hsmp}? 1118 | | | +--rw mldp-ext:enabled? boolean 1119 | | +--rw mldp-ext:node-protection 1120 | | {capability-mldp-node-protection}? 1121 | | +--rw mldp-ext:plr? boolean 1122 | | +--rw mldp-ext:merge-point 1123 | | +--rw mldp-ext:enabled? 1124 | | | boolean 1125 | | +--rw mldp-ext:targeted-session-teardown-delay? 1126 | | uint16 1127 | . . . 1128 | . . . 1129 +--rw peers 1130 +--rw peer* [lsr-id label-space-id] 1131 +--rw lsr-id rt-types:router-id 1132 +--rw label-space-id uint16 1133 +--rw address-families 1134 +--ro received-peer-state 1135 +--ro capability 1136 +--ro mldp:mldp 1137 +--ro mldp:p2mp 1138 | +--ro mldp:enabled? boolean 1139 +--ro mldp:mp2mp 1140 | +--ro mldp:enabled? boolean 1141 +--ro mldp:make-before-break 1142 | +--ro mldp:enabled? boolean 1143 +--ro mldp-ext:hub-and-spoke 1144 | +--ro mldp-ext:enabled? boolean 1145 +--ro mldp-ext:node-protection 1146 +--ro mldp-ext:plr? boolean 1147 +--ro mldp-ext:merge-point? boolean 1149 Figure 9: Capabilites state tree 1151 7. Notifications 1153 The mLDP notification model consists of notifications related to 1154 changes in the operational state of an mLDP FEC. The "base" mLDP 1155 data model includes only the "Generic LSP Identifier" opaque FEC type 1156 (for ipv4), while rest of the FEC types are covered by the "extended" 1157 mLDP model. 1159 A simplified graphical representation of the data model for mLDP 1160 notifications is shown in Figure 2. 1162 8. Actions 1164 Currently, no RPCs/actions are defined for mLDP. 1166 9. YANG Specification 1168 The following sections specify the actual YANG (module) specification 1169 for mLDP constructs defined earlier in the document. 1171 9.1. Base 1173 This YANG module imports types defined in [RFC6991], [RFC8343], 1174 [RFC8349], [I-D.ietf-mpls-ldp-yang], and [RFC8294]. 1176 file "ietf-mpls-mldp@2021-11-11.yang" 1178 // RFC Editor: replace the above date with the date of 1179 // publication and remove this note. 1181 module ietf-mpls-mldp { 1182 yang-version 1.1; 1184 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp"; 1185 prefix "mldp"; 1187 import ietf-inet-types { 1188 prefix "inet"; 1189 reference "RFC 6991: Common YANG Data Types"; 1190 } 1192 import ietf-interfaces { 1193 prefix "if"; 1194 reference "RFC 8343: A YANG Data Model for Interface Management"; 1195 } 1196 import ietf-mpls-ldp { 1197 prefix "ldp"; 1198 reference "RFC XXXX: A YANG Data Model for MPLS LDP"; 1199 // RFC Editor: replace the XXXX with actual LDP YANG RFC number at 1200 // time of publication and remove this note. 1201 } 1203 import ietf-routing { 1204 prefix "rt"; 1205 reference 1206 "RFC 8349: A YANG Data Model for Routing Management (NMDA 1207 version)"; 1208 } 1210 import ietf-routing-types { 1211 prefix "rt-types"; 1212 reference 1213 "RFC 8294: Common YANG Data Types for the Routing Area"; 1214 } 1216 organization 1217 "IETF MPLS Working Group"; 1218 contact 1219 "WG Web: 1220 WG List: 1222 Editor: Kamran Raza 1223 1225 Editor: Sowmya Krishnaswamy 1226 1228 Editor: Xufeng Liu 1229 1231 Editor: Santosh Esale 1232 1234 Editor: Loa Andersson 1235 1237 Editor: Jeff Tantsura 1238 "; 1240 description 1241 "This YANG module defines the essential components for the 1242 management of Multiprotocol Label Switching (MPLS) Multipoint 1243 LDP (mLDP). 1245 Copyright (c) 2021 IETF Trust and the persons identified as 1246 authors of the code. All rights reserved. 1248 Redistribution and use in source and binary forms, with or 1249 without modification, is permitted pursuant to, and subject to 1250 the license terms contained in, the Simplified BSD License set 1251 forth in Section 4.c of the IETF Trust's Legal Provisions 1252 Relating to IETF Documents 1253 (http://trustee.ietf.org/license-info). 1255 This version of this YANG module is part of RFC XXXX; see the 1256 RFC itself for full legal notices."; 1258 // RFC Editor: replace XXXX with actual RFC number and remove 1259 // this note 1261 revision 2021-11-11 { 1262 // RFC Editor: replace the above date 2021-11-11 with the date of 1263 // publication and remove this note. 1265 description 1266 "Initial revision."; 1267 reference 1268 "RFC XXXX: Base YANG Data Model for MPLS mLDP"; 1269 // RFC Editor: replace XXXX with actual RFC number and remove 1270 // this note 1271 } 1273 /* 1274 * Typedefs 1275 */ 1276 typedef multipoint-type { 1277 type enumeration { 1278 enum p2mp { 1279 description "Point to multipoint"; 1280 } 1281 enum mp2mp { 1282 description "Multipoint to multipoint"; 1283 } 1284 } 1285 description 1286 "The type of a multipoint LSP: either Point to multipoint 1287 (p2mp) or Multipoint to multipoint (mp2mp)"; 1288 } 1290 /* 1291 * Groupings 1292 */ 1294 grouping mldp-capabilities { 1295 description 1296 "A grouping describing the protocol capabilities of mLDP"; 1297 container p2mp { 1298 description 1299 "Configuration and state information for the 1300 point-to-multipoint capability"; 1301 leaf enabled { 1302 type boolean; 1303 description 1304 "'true' to enable the point-to-multipoint capability"; 1305 } 1306 } 1307 container mp2mp { 1308 description 1309 "Configuration and state information for the 1310 multipoint-to-multipoint capability"; 1311 leaf enabled { 1312 type boolean; 1313 description 1314 "'true' to enable the multipoint-to-multipoint capability"; 1315 } 1316 } 1317 container make-before-break { 1318 description 1319 "Configuration and state information for the 1320 make-before-break capability."; 1321 leaf enabled { 1322 type boolean; 1323 description 1324 "'true' to enable the make-before-break capability"; 1325 } 1326 leaf switchover-delay { 1327 type uint16; 1328 units seconds; 1329 description 1330 "Switchover delay in seconds"; 1331 } 1332 leaf timeout { 1333 type uint16; 1334 units seconds; 1335 description 1336 "Timeout in seconds"; 1337 } 1338 } 1339 } // mldp-capabilities 1341 grouping mldp-binding-label-peer-state-attributes { 1342 description 1343 "mLDP label binding per peer attributes"; 1344 leaf direction { 1345 type ldp:downstream-upstream; 1346 description 1347 "Downstream or upstream"; 1348 } 1349 leaf advertisement-type { 1350 type ldp:advertised-received; 1351 description 1352 "Advertised or received"; 1353 } 1354 leaf label { 1355 type rt-types:mpls-label; 1356 description 1357 "Advertised (outbound) or received (inbound) label"; 1358 } 1359 leaf mbb-role { 1360 when "../direction = 'upstream'" { 1361 description 1362 "This leaf is used for upstream only."; 1363 } 1364 type enumeration { 1365 enum none { 1366 description "Make-Before-Break (MBB) is not enabled"; 1367 } 1368 enum active { 1369 description "This LSP is active."; 1370 } 1371 enum inactive { 1372 description "This LSP is inactive."; 1373 } 1374 } 1375 description 1376 "The MBB status of this LSP"; 1377 } 1378 } // mldp-binding-label-peer-state-attributes 1380 grouping mldp-binding-label-state-attributes { 1381 description 1382 "mLDP label binding attributes"; 1383 list peer { 1384 key "direction peer advertisement-type"; 1385 description 1386 "List of advertised and received peers"; 1387 leaf peer { 1388 type leafref { 1389 path 1390 "../../../../../../../../../../../ldp:peers/ldp:peer/" 1391 + "ldp:lsr-id"; 1392 } 1393 description 1394 "LDP peer from which this binding is received, 1395 or to which this binding is advertised."; 1396 } 1397 uses mldp-binding-label-peer-state-attributes; 1398 } // peer 1399 } // mldp-binding-label-state-attributes 1401 /* 1402 * Configuration data and operational state data nodes 1403 */ 1404 augment "/rt:routing/rt:control-plane-protocols/" 1405 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" 1406 + "ldp:capability" { 1407 description "Augmentation for MLDP global capability"; 1408 container mldp { 1409 description 1410 "This container contains the configruation and state 1411 information for multipoint LDP capabilities."; 1412 uses mldp-capabilities; 1413 } 1414 } 1416 /* 1417 * Operational state data nodes 1418 */ 1419 augment "/rt:routing/rt:control-plane-protocols/" 1420 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/" 1421 + "ldp:received-peer-state/ldp:capability" { 1422 description 1423 "Augmentation for MLDP received peer state capability"; 1424 container mldp { 1425 description 1426 "Operational state information for the protocol capabilities 1427 of mLDP"; 1429 container p2mp { 1430 description 1431 "Operational state information for the point-to-multipoint 1432 capability"; 1433 leaf enabled { 1434 type boolean; 1435 description 1436 "'true' to enable the point-to-multipoint capability"; 1437 } 1439 } 1440 container mp2mp { 1441 description 1442 "Operational state information for the 1443 multipoint-to-multipoint capability"; 1444 leaf enabled { 1445 type boolean; 1446 description 1447 "'true' to enable the multipoint-to-multipoint 1448 capability"; 1449 } 1450 } 1451 container make-before-break { 1452 description 1453 "Operational state information for the make-before-break 1454 capability"; 1455 leaf enabled { 1456 type boolean; 1457 description 1458 "'true' to enable the make-before-break capability"; 1459 } 1460 } 1461 } // mldp 1462 } 1464 /* 1465 * Global augmentation 1466 */ 1467 augment "/rt:routing/rt:control-plane-protocols/" 1468 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global" { 1469 description "MLDP global augmentation."; 1470 container mldp { 1471 description 1472 "mLDP attributes at per instance level. Defining 1473 attributes here does not enable any MP capabilities. 1474 MP capabilities need to be explicitly enabled under 1475 container capability."; 1477 leaf enabled { 1478 type boolean; 1479 description 1480 "'true' to enable mLDP"; 1481 } 1483 container address-families { 1484 description 1485 "Per address family parameters"; 1487 container ipv4 { 1488 presence 1489 "Present if IPv4 is enabled."; 1490 description 1491 "IPv4 information"; 1492 container roots { 1493 config false; 1494 description 1495 "IPv4 multicast LSP roots"; 1496 list root { 1497 key "root-address"; 1498 description 1499 "List of roots for configured multicast LSPs"; 1501 leaf root-address { 1502 type inet:ipv4-address; 1503 description 1504 "Root address."; 1505 } 1507 leaf is-self { 1508 type boolean; 1509 description 1510 "I am the root node."; 1511 } 1513 list reachability { 1514 key "address interface"; 1515 description 1516 "A next-hop for reachability to root, 1517 as a RIB view"; 1518 leaf address { 1519 type inet:ipv4-address; 1520 description 1521 "The next-hop address to reach root"; 1522 } 1523 leaf interface { 1524 type if:interface-ref; 1525 description 1526 "Interface connecting to next-hop"; 1527 } 1528 leaf peer { 1529 type leafref { 1530 path 1531 "../../../../../../../../ldp:peers/" 1532 + "ldp:peer/ldp:lsr-id"; 1533 } 1534 description 1535 "LDP peer from which this next-hop can be 1536 reached"; 1537 } 1538 } 1540 container bindings { 1541 description 1542 "mLDP FEC to label bindings"; 1543 container opaque-element-lspid { 1544 description 1545 "The type of opaque value element is the generic 1546 LSP identifier"; 1547 reference 1548 "RFC6388: Label Distribution Protocol 1549 Extensions for Point-to-Multipoint and 1550 Multipoint-to-Multipoint Label Switched 1551 Paths."; 1552 list fec-label { 1553 key 1554 "lsp-id"; 1555 description 1556 "List of FEC to label bindings"; 1557 leaf lsp-id { 1558 type uint32; 1559 description "ID to identify the LSP"; 1560 } 1561 leaf multipoint-type { 1562 type multipoint-type; 1563 description 1564 "The type of mutipoint: p2mp or mp2mp"; 1565 } 1566 uses mldp-binding-label-state-attributes; 1567 } // fec-label 1568 } // opaque-element-lspid 1569 } // bindings 1570 } // list root 1571 } // roots 1573 container configured-leaf-lsps { 1574 description 1575 "Configured multicast LSPs."; 1576 container opaque-element-lspid { 1577 description 1578 "The type of opaque value element is 1579 the generic LSP identifier"; 1580 reference 1581 "RFC6388: Label Distribution Protocol 1582 Extensions for Point-to-Multipoint and 1583 Multipoint-to-Multipoint Label Switched 1584 Paths."; 1585 list fec-label { 1586 key 1587 "root-address lsp-id"; 1588 description 1589 "List of FEC to label bindings."; 1590 leaf root-address { 1591 type inet:ipv4-address; 1592 description 1593 "Root address"; 1594 } 1595 leaf lsp-id { 1596 type uint32; 1597 description "ID to identify the LSP"; 1598 } 1599 leaf multipoint-type { 1600 type multipoint-type; 1601 description 1602 "The type of mutipoint: p2mp or mp2mp"; 1603 } 1604 } // fec-label 1605 } // opaque-element-lspid 1606 } // configured-leaf-lsps 1607 } // ipv4 1608 } // list address-family 1609 } // mldp 1610 } 1612 /* 1613 * Notifications 1614 */ 1615 notification mpls-mldp-fec-event { 1616 description 1617 "Notification event for a change of FEC status"; 1618 leaf event-type { 1619 type ldp:oper-status-event-type; 1620 description "Event type"; 1621 } 1622 choice opaque-element { 1623 description 1624 "The type of opaque value element"; 1625 case opaque-element-lspid { 1626 container opaque-element-lspid { 1627 description 1628 "The type of opaque value element is 1629 the generic LSP identifier"; 1630 reference 1631 "RFC6388: Label Distribution Protocol 1632 Extensions for Point-to-Multipoint and 1633 Multipoint-to-Multipoint Label Switched 1634 Paths."; 1635 leaf root-address { 1636 type inet:ip-address; 1637 description 1638 "Root address."; 1639 } 1640 leaf lsp-id { 1641 type uint32; 1642 description "ID to identify the LSP"; 1643 } 1644 leaf multipoint-type { 1645 type multipoint-type; 1646 description 1647 "The type of mutipoint: p2mp or mp2mp"; 1648 } 1649 } // container opaque-element-lspid 1650 } 1651 } 1652 } 1653 } 1655 1657 Figure 10: mLDP base module 1659 9.2. Extended 1661 This YANG module imports types defined in [RFC6991], [RFC8343], 1662 [RFC8349], [I-D.ietf-mpls-ldp-yang], and [RFC8294]. 1664 file "ietf-mpls-mldp-extended@2021-11-11.yang" 1666 // RFC Editor: replace the above date with the date of 1667 // publication and remove this note. 1669 module ietf-mpls-mldp-extended { 1670 yang-version 1.1; 1672 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended"; 1673 prefix "mldp-ext"; 1675 import ietf-inet-types { 1676 prefix "inet"; 1677 reference "RFC 6991: Common YANG Data Types"; 1678 } 1680 import ietf-interfaces { 1681 prefix "if"; 1682 reference "RFC 8343: A YANG Data Model for Interface Management"; 1683 } 1685 import ietf-routing { 1686 prefix "rt"; 1687 reference 1688 "RFC 8349: A YANG Data Model for Routing Management (NMDA 1689 version)"; 1690 } 1692 import ietf-routing-types { 1693 prefix "rt-types"; 1694 reference 1695 "RFC 8294: Common YANG Data Types for the Routing Area"; 1696 } 1698 import ietf-mpls-ldp { 1699 prefix "ldp"; 1700 reference "RFC XXXX: A YANG Data Model for MPLS LDP"; 1701 // RFC Editor: replace the XXXX with actual LDP YANG RFC number at 1702 // time of publication and remove this note. 1703 } 1705 import ietf-mpls-ldp-extended { 1706 prefix "ldp-ext"; 1707 reference "RFC XXXX: A YANG Data Model for MPLS LDP"; 1708 // RFC Editor: replace the XXXX with actual LDP YANG RFC number at 1709 // time of publication and remove this note. 1710 } 1711 import ietf-mpls-mldp { 1712 prefix "mldp"; 1713 reference "RFC XXXX: Base YANG Data Model for MPLS mLDP"; 1714 // RFC Editor: replace the XXXX with actual mLDP YANG RFC number at 1715 // time of publication and remove this note. 1716 } 1718 organization 1719 "IETF MPLS Working Group"; 1720 contact 1721 "WG Web: 1722 WG List: 1723 Editor: Kamran Raza 1724 1726 Editor: Sowmya Krishnaswamy 1727 1729 Editor: Xufeng Liu 1730 1732 Editor: Santosh Esale 1733 1735 Editor: Loa Andersson 1736 1738 Editor: Jeff Tantsura 1739 "; 1741 description 1742 "This YANG module defines the extended components for the 1743 management of Multiprotocol Label Switching (MPLS) Multipoint 1744 LDP (mLDP). 1746 Copyright (c) 2021 IETF Trust and the persons identified as 1747 authors of the code. All rights reserved. 1749 Redistribution and use in source and binary forms, with or 1750 without modification, is permitted pursuant to, and subject to 1751 the license terms contained in, the Simplified BSD License set 1752 forth in Section 4.c of the IETF Trust's Legal Provisions 1753 Relating to IETF Documents 1754 (http://trustee.ietf.org/license-info). 1756 This version of this YANG module is part of RFC XXXX; see the 1757 RFC itself for full legal notices."; 1759 // RFC Editor: replace XXXX with actual RFC number and remove 1760 // this note 1762 revision 2021-11-11 { 1763 // RFC Editor: replace the above date 2021-11-11 with the date of 1764 // publication and remove this note. 1766 description 1767 "Initial revision."; 1768 reference 1769 "RFC XXXX: Extended YANG Data Model for MPLS mLDP"; 1770 // RFC Editor: replace XXXX with actual RFC number and remove 1771 // this note 1772 } 1774 /* 1775 * Features 1776 */ 1777 feature capability-mldp-hsmp { 1778 description 1779 "This feature indicates that the system allows to configure 1780 mLDP hub-and-spoke-multipoint capability."; 1781 } 1783 feature capability-mldp-node-protection { 1784 description 1785 "This feature indicates that the system allows to configure 1786 mLDP node-protection capability."; 1787 } 1789 feature mldp-mofrr { 1790 description 1791 "This feature indicates that the system supports mLDP 1792 Multicast only FRR (MoFRR)."; 1793 } 1795 feature per-peer-capability { 1796 description 1797 "This feature indicates that the system allows to configure 1798 mLDP capabilities at the per peer level."; 1799 } 1801 /* 1802 * Typedefs 1803 */ 1804 typedef mofrr-role { 1805 type enumeration { 1806 enum none { 1807 description "MOFRR is not enabled."; 1808 } 1809 enum primary { 1810 description "This LSP is primary."; 1811 } 1812 enum backup { 1813 description "This LSP is backup."; 1814 } 1815 } 1816 description 1817 "This type represents the MOFRR (Multicast only FRR) role 1818 status of a LSP."; 1820 } 1822 /* 1823 * Groupings 1824 */ 1825 grouping mldp-ext-binding-label-peer-state { 1826 description 1827 "mLDP label binding peer state."; 1829 list peer { 1830 key "direction peer advertisement-type"; 1831 description 1832 "List of advertised and received peers"; 1833 leaf peer { 1834 type leafref { 1835 path 1836 "../../../../../../../../../../../ldp:peers/ldp:peer/" 1837 + "ldp:lsr-id"; 1838 } 1839 description 1840 "LDP peer from which this binding is received, 1841 or to which this binding is advertised."; 1842 } 1843 uses mldp:mldp-binding-label-peer-state-attributes; 1845 leaf mofrr-role { 1846 when "../direction = 'upstream'" { 1847 description 1848 "For upstream."; 1849 } 1850 type mofrr-role; 1851 description 1852 "The MOFRR status of this LSP"; 1853 } 1854 } // peer 1855 } // mldp-ext-binding-label-peer-state 1857 grouping mldp-ext-binding-label-recursive-fec-peer-state { 1858 description 1859 "mLDP label binding peer state for recursive FECs."; 1861 list peer { 1862 key "direction peer advertisement-type"; 1863 description 1864 "List of advertised and received peers"; 1865 leaf peer { 1866 type leafref { 1867 path 1868 "../../../../../../../../../../../../ldp:peers/ldp:peer/" 1869 + "ldp:lsr-id"; 1870 } 1871 description 1872 "LDP peer from which this binding is received, 1873 or to which this binding is advertised."; 1874 } 1875 uses mldp:mldp-binding-label-peer-state-attributes; 1877 leaf mofrr-role { 1878 when "../direction = 'upstream'" { 1879 description 1880 "For upstream."; 1881 } 1882 type mofrr-role; 1883 description 1884 "The MOFRR status of this LSP"; 1885 } 1886 } // peer 1887 } // mldp-ext-binding-label-recursive-fec-peer-state 1889 grouping mldp-ext-capabilities { 1890 description 1891 "mLDP extended capabilities"; 1892 container hub-and-spoke { 1893 if-feature capability-mldp-hsmp; 1894 description 1895 "Configure hub-and-spoke-multipoint capability"; 1896 reference 1897 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 1898 Label Switched Path"; 1899 leaf enabled { 1900 type boolean; 1901 description 1902 "Enable hub-and-spoke-multipoint"; 1903 } 1904 } 1905 container node-protection { 1906 if-feature capability-mldp-node-protection; 1907 description 1908 "Configure node-protection capability."; 1909 reference 1910 "RFC7715: mLDP Node Protection."; 1911 leaf plr { 1912 type boolean; 1913 description 1914 "Point of Local Repair (PLR) capable for Multipoimt LSP 1915 node protection"; 1917 } 1918 container merge-point { 1919 description 1920 "Merge Point capable for Multipoint LSP node protection"; 1921 leaf enabled { 1922 type boolean; 1923 description 1924 "Enable merge point capability"; 1925 } 1926 leaf targeted-session-teardown-delay { 1927 type uint16; 1928 units seconds; 1929 description 1930 "Targeted session teardown delay"; 1931 } 1932 } // merge-point 1933 } 1934 } // mldp-ext-capabilities 1936 grouping mldp-ext-per-af-config-attibutes { 1937 description 1938 "mLDP per address family configuration attibutes"; 1939 container multicast-only-frr { 1940 if-feature mldp-mofrr; 1941 description 1942 "Multicast-only FRR (MoFRR) policy"; 1943 leaf prefix-list { 1944 type ldp-ext:prefix-list-ref; 1945 description 1946 "Enables Multicast-only FRR (MoFRR) for the specified 1947 access list"; 1948 } 1949 } // multicast-only-frr 1950 container recursive-fec { 1951 description 1952 "Recursive FEC policy"; 1953 leaf prefix-list { 1954 type ldp-ext:prefix-list-ref; 1955 description 1956 "Enables recursive FEC for the specified prefix-list"; 1957 } 1958 } // recursive-fec 1959 } // mldp-ext-per-af-config-attibutes 1961 grouping recursive-fec-attibutes { 1962 description 1963 "mLDP recursive FEC attibutes."; 1964 leaf recur-root-address { 1965 type inet:ip-address; 1966 description 1967 "Recursive root address"; 1968 reference 1969 "RFC6512: Using Multipoint LDP When the 1970 Backbone Has No Route to the Root"; 1971 } 1972 leaf recur-rd { 1973 type rt-types:route-distinguisher; 1974 description 1975 "Route Distinguisher in the VPN-Recursive 1976 Opaque Value"; 1977 reference 1978 "RFC6512: Using Multipoint LDP When the 1979 Backbone Has No Route to the Root"; 1980 } 1981 leaf multipoint-type { 1982 type mldp:multipoint-type; 1983 description 1984 "The type of mutipoint: p2mp or mp2mp"; 1985 } 1986 } // recursive-fec-attibutes 1988 /* 1989 * Configuration data and operational state data nodes 1990 */ 1991 // Global capability 1992 augment "/rt:routing/rt:control-plane-protocols/" 1993 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" 1994 + "ldp:capability/mldp:mldp" { 1995 description "Augmentation for MLDP global capability."; 1997 uses mldp-ext-capabilities; 1998 } 2000 /* TODO: FIXME 2001 // Peer capability 2002 augment "/rt:routing/rt:control-plane-protocols/" 2003 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/" 2004 + "ldp:capability" { 2005 description "Augmentation for MLDP peer capability."; 2006 container mldp { 2007 if-feature per-peer-capability; 2008 description 2009 "mLDP capabilities"; 2010 uses mldp:mldp-capabilities; 2011 } 2012 } */ 2013 // IPv4 config 2014 augment "/rt:routing/rt:control-plane-protocols/" 2015 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2016 + "mldp:address-families/mldp:ipv4" { 2017 description "Augmentation for MLDP IPv4 configuration"; 2018 uses mldp-ext-per-af-config-attibutes; 2019 } 2021 // IPv4 configured-leaf-lsps config 2022 augment "/rt:routing/rt:control-plane-protocols/" 2023 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2024 + "mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps/" 2025 + "mldp:opaque-element-lspid/mldp:fec-label" { 2026 description 2027 "Augmentation for MLDP IPv4 configured-leaf-lsps 2028 configuration for opaque-element-lspid"; 2029 list recursive-fec { 2030 key 2031 "recur-root-address recur-rd"; 2032 description 2033 "List of recursive opaque values"; 2034 uses recursive-fec-attibutes; 2035 } // fec-label 2036 } 2038 augment "/rt:routing/rt:control-plane-protocols/" 2039 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2040 + "mldp:address-families/mldp:ipv4/mldp:configured-leaf-lsps" { 2041 description 2042 "Augmentation for MLDP IPv4 configured-leaf-lsps 2043 configuration"; 2045 container opaque-element-transit { 2046 description 2047 "The type of opaque value element is the transit IPv4 2048 source."; 2049 reference 2050 "RFC6826: Multipoint LDP In-Band Signaling for 2051 Point-to-Multipoint and 2052 Multipoint-to-Multipoint Label Switched Paths."; 2053 list fec-label { 2054 key 2055 "root-address source-address group-address " + 2056 "rd recur-root-address recur-rd"; 2057 description 2058 "List of FEC to label bindings"; 2059 leaf root-address { 2060 type inet:ipv4-address; 2061 description 2062 "Root address"; 2063 } 2064 leaf source-address { 2065 type inet:ip-address; 2066 description 2067 "Source address"; 2068 } 2069 leaf group-address { 2070 type inet:ip-address-no-zone; 2071 description 2072 "Group address"; 2073 } 2074 leaf rd { 2075 type rt-types:route-distinguisher; 2076 description 2077 "Route Distinguisher"; 2078 reference 2079 "RFC7246: Multipoint Label Distribution 2080 Protocol In-Band Signaling in a Virtual 2081 Routing and Forwarding (VRF) Table 2082 Context."; 2083 } 2084 uses recursive-fec-attibutes; 2085 } // fec-label 2086 } // opaque-element-transit 2088 container opaque-element-bidir { 2089 description 2090 "The type of opaque value element is 2091 the generic LSP identifier"; 2092 reference 2093 "RFC6826: Multipoint LDP In-Band Signaling for 2094 Point-to-Multipoint and 2095 Multipoint-to-Multipoint Label Switched 2096 Paths."; 2097 list fec-label { 2098 key 2099 "root-address rp group-address rd recur-root-address " 2100 + "recur-rd"; 2101 description 2102 "List of FEC to label bindings"; 2103 leaf root-address { 2104 type inet:ipv4-address; 2105 description 2106 "Root address"; 2107 } 2108 leaf rp { 2109 type inet:ip-address; 2110 description 2111 "Rendezvous-Point (RP) address"; 2112 } 2113 leaf group-address { 2114 type inet:ip-address-no-zone; 2115 description 2116 "Group address"; 2117 } 2118 leaf rd { 2119 type rt-types:route-distinguisher; 2120 description 2121 "Route Distinguisher"; 2122 reference 2123 "RFC7246: Multipoint Label Distribution 2124 Protocol In-Band Signaling in a Virtual 2125 Routing and Forwarding (VRF) Table 2126 Context."; 2127 } 2128 uses recursive-fec-attibutes; 2129 } // fec-label 2130 } // opaque-element-bidir 2131 } 2133 // IPv6 config 2134 augment "/rt:routing/rt:control-plane-protocols/" 2135 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2136 + "mldp:address-families/ipv6" { 2137 description "Augmentation for MLDP IPv4 configuration"; 2138 uses mldp-ext-per-af-config-attibutes; 2139 } 2141 // Global forwarding-nexthop 2142 augment "/rt:routing/rt:control-plane-protocols/" 2143 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" 2144 + "ldp-ext:forwarding-nexthop/ldp-ext:interfaces/" 2145 + "ldp-ext:interface/ldp-ext:address-family" { 2146 description 2147 "Augmentation for MLDP nexthop forwarding interface"; 2148 leaf mldp-disable { 2149 type boolean; 2150 description 2151 "Disable mLDP forwarding on this interface"; 2152 } 2153 } 2155 /* 2156 * Operational state data nodes 2157 */ 2158 // IPv4 state for per peer bindings 2159 augment "/rt:routing/rt:control-plane-protocols/" 2160 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2161 + "mldp:address-families/mldp:ipv4/mldp:roots/mldp:root/" 2162 + "mldp:bindings/mldp:opaque-element-lspid/mldp:fec-label/" 2163 + "mldp:peer" { 2164 description "Augmentation for MLDP IPv4 state"; 2166 leaf mofrr-role { 2167 when "../mldp:direction = 'upstream'" { 2168 description 2169 "For upstream"; 2170 } 2171 type mofrr-role; 2172 description 2173 "The MOFRR status of this LSP"; 2174 } 2175 } 2177 // Peer capability state 2178 augment "/rt:routing/rt:control-plane-protocols/" 2179 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/" 2180 + "ldp:received-peer-state/ldp:capability/mldp:mldp" { 2181 description 2182 "Augmentation for MLDP received peer state capability."; 2183 container hub-and-spoke { 2184 description 2185 "Configure hub-and-spoke-multipoint capability."; 2186 reference 2187 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 2188 Label Switched Path"; 2189 leaf enabled { 2190 type boolean; 2191 description 2192 "Enable hub-and-spoke-multipoint"; 2193 } 2194 } 2195 container node-protection { 2196 description 2197 "Configure node-protection capability"; 2198 reference 2199 "RFC7715: mLDP Node Protection."; 2200 leaf plr { 2201 type boolean; 2202 description 2203 "Point of Local Repair (PLR) capable for Multipoint LSP 2204 node protection"; 2206 } 2207 leaf merge-point { 2208 type boolean; 2209 description 2210 "Merge Point capable for Multipoint LSP node protection"; 2211 } // merge-point 2212 } // node-protection 2213 } 2215 // IPv4 bindings state 2216 augment "/rt:routing/rt:control-plane-protocols/" 2217 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2218 + "mldp:address-families/mldp:ipv4/mldp:roots/mldp:root/" 2219 + "mldp:bindings" { 2220 description "Augmentation for MLDP IPv4 bindings."; 2221 container opaque-element-transit { 2222 description 2223 "The type of opaque value element is the transit IPv4 2224 source."; 2225 reference 2226 "RFC6826: Multipoint LDP In-Band Signaling for 2227 Point-to-Multipoint and 2228 Multipoint-to-Multipoint Label Switched Paths."; 2229 list fec-label { 2230 key 2231 "source-address group-address " 2232 + "rd recur-root-address recur-rd"; 2233 description 2234 "List of FEC to label bindings"; 2235 leaf source-address { 2236 type inet:ip-address; 2237 description 2238 "Source address"; 2239 } 2240 leaf group-address { 2241 type inet:ip-address-no-zone; 2242 description 2243 "Group address"; 2244 } 2245 leaf rd { 2246 type rt-types:route-distinguisher; 2247 description 2248 "Route Distinguisher"; 2249 reference 2250 "RFC7246: Multipoint Label Distribution 2251 Protocol In-Band Signaling in a Virtual 2252 Routing and Forwarding (VRF) Table 2253 Context."; 2255 } 2256 uses recursive-fec-attibutes; 2257 uses mldp-ext-binding-label-peer-state; 2258 } // fec-label 2259 } // opaque-element-transit 2261 container opaque-element-bidir { 2262 description 2263 "The type of opaque value element is 2264 the generic LSP identifier."; 2265 reference 2266 "RFC6826: Multipoint LDP In-Band Signaling for 2267 Point-to-Multipoint and 2268 Multipoint-to-Multipoint Label Switched 2269 Paths."; 2270 list fec-label { 2271 key 2272 "rp group-address rd recur-root-address recur-rd"; 2273 description 2274 "List of FEC to label bindings"; 2275 leaf rp { 2276 type inet:ip-address; 2277 description 2278 "Rendezvous Point (RP) address"; 2279 } 2280 leaf group-address { 2281 type inet:ip-address-no-zone; 2282 description 2283 "Group address"; 2284 } 2285 leaf rd { 2286 type rt-types:route-distinguisher; 2287 description 2288 "Route Distinguisher"; 2289 reference 2290 "RFC7246: Multipoint Label Distribution 2291 Protocol In-Band Signaling in a Virtual 2292 Routing and Forwarding (VRF) Table 2293 Context."; 2294 } 2295 uses recursive-fec-attibutes; 2296 uses mldp-ext-binding-label-peer-state; 2297 } // fec-label 2298 } // opaque-element-bidir 2299 } 2301 // IPv6 bindings state 2302 augment "/rt:routing/rt:control-plane-protocols/" 2303 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2304 + "mldp:address-families/ipv6/roots/root/bindings" { 2305 description "Augmentation for MLDP IPv6 bindings."; 2306 container opaque-element-transit { 2307 config false; 2308 description 2309 "The type of opaque value element is the transit IPv6 2310 source."; 2311 reference 2312 "RFC6826: Multipoint LDP In-Band Signaling for 2313 Point-to-Multipoint and 2314 Multipoint-to-Multipoint Label Switched 2315 Paths."; 2316 list fec-label { 2317 key 2318 "source-address group-address " 2319 + "rd recur-root-address recur-rd"; 2320 description 2321 "List of FEC to label bindings"; 2322 leaf source-address { 2323 type inet:ip-address; 2324 description 2325 "Source address"; 2326 } 2327 leaf group-address { 2328 type inet:ip-address-no-zone; 2329 description 2330 "Group address"; 2331 } 2332 leaf rd { 2333 type rt-types:route-distinguisher; 2334 description 2335 "Route Distinguisher"; 2336 reference 2337 "RFC7246: Multipoint Label Distribution 2338 Protocol In-Band Signaling in a Virtual 2339 Routing and Forwarding (VRF) Table 2340 Context."; 2341 } 2342 uses recursive-fec-attibutes; 2343 uses mldp-ext-binding-label-peer-state; 2344 } // fec-label 2345 } // opaque-element-transit 2347 container opaque-element-bidir { 2348 config false; 2349 description 2350 "The type of opaque value element is 2351 the generic LSP identifier"; 2352 reference 2353 "RFC6826: Multipoint LDP In-Band Signaling for 2354 Point-to-Multipoint and 2355 Multipoint-to-Multipoint Label Switched 2356 Paths."; 2357 list fec-label { 2358 key 2359 "rp group-address rd recur-root-address recur-rd"; 2360 description 2361 "List of FEC to label bindings"; 2362 leaf rp { 2363 type inet:ip-address; 2364 description 2365 "Rendezvous Point (RP) address"; 2366 } 2367 leaf group-address { 2368 type inet:ip-address-no-zone; 2369 description 2370 "Group address"; 2371 } 2372 leaf rd { 2373 type rt-types:route-distinguisher; 2374 description 2375 "Route Distinguisher"; 2376 reference 2377 "RFC7246: Multipoint Label Distribution 2378 Protocol In-Band Signaling in a Virtual 2379 Routing and Forwarding (VRF) Table 2380 Context."; 2381 } 2382 uses recursive-fec-attibutes; 2383 uses mldp-ext-binding-label-peer-state; 2384 } // fec-label 2385 } // opaque-element-bidir 2386 } 2388 // IPv4 bindings opaque-element-lspid state 2389 augment "/rt:routing/rt:control-plane-protocols/" 2390 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2391 + "mldp:address-families/mldp:ipv4/mldp:roots/mldp:root/" 2392 + "mldp:bindings/mldp:opaque-element-lspid/mldp:fec-label" { 2393 description 2394 "Augmentation for MLDP IPv4 bindings with opaque type LSP ID."; 2395 list recursive-fec { 2396 key 2397 "recur-root-address recur-rd"; 2398 description 2399 "List of recursive opaque values"; 2400 uses recursive-fec-attibutes; 2401 uses mldp-ext-binding-label-recursive-fec-peer-state; 2402 } // fec-label 2403 } 2405 // IPv6 bindings opaque-element-lspid state 2406 augment "/rt:routing/rt:control-plane-protocols/" 2407 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2408 + "mldp:address-families/ipv6/roots/root/bindings/" 2409 + "opaque-element-lspid/fec-label" { 2410 description 2411 "Augmentation for MLDP IPv6 bindings with opaque type LSP ID."; 2412 list recursive-fec { 2413 key "recur-root-address recur-rd"; 2414 config false; 2415 description 2416 "List of recursive opaque values"; 2417 uses recursive-fec-attibutes; 2418 uses mldp-ext-binding-label-recursive-fec-peer-state; 2419 } // fec-label 2420 } 2422 /* 2423 * Per AF augmentation 2424 */ 2425 // IPv6 augmentation 2426 augment "/rt:routing/rt:control-plane-protocols/" 2427 + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/mldp:mldp/" 2428 + "mldp:address-families" { 2429 description "Augmentation for MLDP IPv6 address family."; 2430 container ipv6 { 2431 presence 2432 "Present if IPv6 is enabled."; 2433 description 2434 "IPv6 information"; 2436 container roots { 2437 config false; 2438 description 2439 "IPv6 multicast LSP roots"; 2440 list root { 2441 key "root-address"; 2442 description 2443 "List of roots for configured multicast LSPs"; 2445 leaf root-address { 2446 type inet:ipv6-address; 2447 description 2448 "Root address"; 2449 } 2451 leaf is-self { 2452 type boolean; 2453 description 2454 "This is the root"; 2455 } 2457 list reachability { 2458 key "address interface"; 2459 description 2460 "A next-hop for reachability to root, 2461 as a RIB view"; 2462 leaf address { 2463 type inet:ipv6-address; 2464 description 2465 "The next-hop address to reach root"; 2466 } 2467 leaf interface { 2468 type if:interface-ref; 2469 description 2470 "Interface connecting to next-hop"; 2471 } 2472 leaf peer { 2473 type leafref { 2474 path 2475 "../../../../../../../../ldp:peers/" 2476 + "ldp:peer/ldp:lsr-id"; 2477 } 2478 description 2479 "LDP peer from which this next-hop can be 2480 reached"; 2481 } 2482 } 2484 container bindings { 2485 description 2486 "mLDP FEC to label bindings"; 2487 container opaque-element-lspid { 2488 description 2489 "The type of opaque value element is 2490 the generic LSP identifier"; 2491 reference 2492 "RFC6388: Label Distribution Protocol 2493 Extensions for Point-to-Multipoint and 2494 Multipoint-to-Multipoint Label Switched 2495 Paths."; 2496 list fec-label { 2497 key 2498 "lsp-id"; 2499 description 2500 "List of FEC to label bindings"; 2501 leaf lsp-id { 2502 type uint32; 2503 description "ID to identify the LSP"; 2504 } 2505 leaf multipoint-type { 2506 type mldp:multipoint-type; 2507 description 2508 "The type of mutipoint: p2mp or mp2mp"; 2509 } 2511 uses mldp-ext-binding-label-peer-state; 2512 } // fec-label 2513 } // opaque-element-lspid 2514 } // bindings 2515 } // list root 2516 } // roots 2518 container configured-leaf-lsps { 2519 description 2520 "Configured multicast LSPs"; 2522 container opaque-element-lspid { 2523 description 2524 "The type of opaque value element is 2525 the generic LSP identifier"; 2526 reference 2527 "RFC6388: Label Distribution Protocol 2528 Extensions for Point-to-Multipoint and 2529 Multipoint-to-Multipoint Label Switched 2530 Paths."; 2531 list fec-label { 2532 key 2533 "root-address lsp-id"; 2534 description 2535 "List of FEC to label bindings"; 2536 leaf root-address { 2537 type inet:ipv6-address; 2538 description 2539 "Root address"; 2540 } 2541 leaf lsp-id { 2542 type uint32; 2543 description "ID to identify the LSP"; 2544 } 2545 leaf multipoint-type { 2546 type mldp:multipoint-type; 2547 description 2548 "The type of mutipoint: p2mp or mp2mp"; 2549 } 2550 list recursive-fec { 2551 key 2552 "recur-root-address recur-rd"; 2553 description 2554 "List of recursive opaque values"; 2555 uses recursive-fec-attibutes; 2556 } // fec-label 2557 } // fec-label 2558 } // opaque-element-lspid 2560 container opaque-element-transit { 2561 description 2562 "The type of opaque value element is the transit IPv4 2563 source."; 2564 reference 2565 "RFC6826: Multipoint LDP In-Band Signaling for 2566 Point-to-Multipoint and 2567 Multipoint-to-Multipoint Label Switched Paths."; 2568 list fec-label { 2569 key 2570 "root-address source-address group-address " 2571 + "rd recur-root-address recur-rd"; 2572 description 2573 "List of FEC to label bindings"; 2574 leaf root-address { 2575 type inet:ipv6-address; 2576 description 2577 "Root address"; 2578 } 2579 leaf source-address { 2580 type inet:ip-address; 2581 description 2582 "Source address"; 2583 } 2584 leaf group-address { 2585 type inet:ip-address-no-zone; 2586 description 2587 "Group address"; 2588 } 2589 leaf rd { 2590 type rt-types:route-distinguisher; 2591 description 2592 "Route Distinguisher"; 2593 reference 2594 "RFC7246: Multipoint Label Distribution 2595 Protocol In-Band Signaling in a Virtual 2596 Routing and Forwarding (VRF) Table 2597 Context."; 2598 } 2599 uses recursive-fec-attibutes; 2600 } // fec-label 2601 } // opaque-element-transit 2603 container opaque-element-bidir { 2604 description 2605 "The type of opaque value element is 2606 the generic LSP identifier"; 2607 reference 2608 "RFC6826: Multipoint LDP In-Band Signaling for 2609 Point-to-Multipoint and 2610 Multipoint-to-Multipoint Label Switched 2611 Paths."; 2612 list fec-label { 2613 key 2614 "root-address rp group-address rd recur-root-address " 2615 + "recur-rd"; 2616 description 2617 "List of FEC to label bindings."; 2618 leaf root-address { 2619 type inet:ipv6-address; 2620 description 2621 "Root address"; 2622 } 2623 leaf rp { 2624 type inet:ip-address; 2625 description 2626 "Rendezvous Point (RP) address"; 2627 } 2628 leaf group-address { 2629 type inet:ip-address-no-zone; 2630 description 2631 "Group address"; 2632 } 2633 leaf rd { 2634 type rt-types:route-distinguisher; 2635 description 2636 "Route Distinguisher"; 2637 reference 2638 "RFC7246: Multipoint Label Distribution 2639 Protocol In-Band Signaling in a Virtual 2640 Routing and Forwarding (VRF) Table 2641 Context."; 2642 } 2643 uses recursive-fec-attibutes; 2644 } // fec-label 2645 } // opaque-element-bidir 2646 } // configured-leaf-lsps 2647 } // ipv6 2648 } 2650 /* 2651 * Global augmentation 2652 */ 2653 /* 2654 * Notifications 2655 */ 2656 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element/" 2657 + "mldp:opaque-element-lspid/mldp:opaque-element-lspid" { 2658 description 2659 "Augmentation for MLDP notification for opaque-element-lspid."; 2660 container recursive-fec { 2661 description 2662 "Container of recursive opaque values"; 2663 uses recursive-fec-attibutes; 2664 } // fec-label 2665 } 2667 augment "/mldp:mpls-mldp-fec-event/mldp:opaque-element" { 2668 description 2669 "Augmentation for MLDP notification."; 2670 case opaque-element-transit { 2671 container opaque-element-transit { 2672 description 2673 "The type of opaque value element is the transit IPv4 2674 source."; 2675 reference 2676 "RFC6826: Multipoint LDP In-Band Signaling for 2677 Point-to-Multipoint and 2678 Multipoint-to-Multipoint Label Switched Paths."; 2679 leaf root-address { 2680 type inet:ip-address; 2681 description 2682 "Root address"; 2683 } 2684 leaf source-address { 2685 type inet:ip-address; 2686 description 2687 "Source address"; 2688 } 2689 leaf group-address { 2690 type inet:ip-address-no-zone; 2691 description 2692 "Group address"; 2693 } 2694 leaf rd { 2695 type rt-types:route-distinguisher; 2696 description 2697 "Route Distinguisher"; 2698 reference 2699 "RFC7246: Multipoint Label Distribution 2700 Protocol In-Band Signaling in a Virtual 2701 Routing and Forwarding (VRF) Table 2702 Context."; 2703 } 2704 uses recursive-fec-attibutes; 2705 } // opaque-element-transit 2706 } // opaque-element-transit 2708 case opaque-element-bidir { 2709 container opaque-element-bidir { 2710 description 2711 "The type of opaque value element is 2712 the generic LSP identifier"; 2713 reference 2714 "RFC6826: Multipoint LDP In-Band Signaling for 2715 Point-to-Multipoint and 2716 Multipoint-to-Multipoint Label Switched 2717 Paths."; 2718 leaf root-address { 2719 type inet:ip-address; 2720 description 2721 "Root address"; 2722 } 2723 leaf rp { 2724 type inet:ip-address; 2725 description 2726 "Rendezvous Point (RP) address"; 2727 } 2728 leaf group-address { 2729 type inet:ip-address-no-zone; 2730 description 2731 "Group address"; 2732 } 2733 leaf rd { 2734 type rt-types:route-distinguisher; 2735 description 2736 "Route Distinguisher"; 2737 reference 2738 "RFC7246: Multipoint Label Distribution 2739 Protocol In-Band Signaling in a Virtual 2740 Routing and Forwarding (VRF) Table 2741 Context."; 2742 } 2743 uses recursive-fec-attibutes; 2744 } // opaque-element-bidir 2745 } // opaque-element-bidir 2746 } 2747 } 2749 2751 Figure 11: mLDP extended module 2753 10. Security Considerations 2755 This specification also inherits the security considerations captured 2756 in [RFC5920] and mLDP protocol specification documents, namely base 2757 mLDP [RFC6388], targeted mLDP [RFC7060], mLDP Recursive FEC 2758 [RFC6512], Multicast-only FRR [RFC7431], mLDP Node Protection 2759 [RFC7715], mLDP In-band Signaling [RFC6826] [RFC7246] [RFC7438], and 2760 Hub-and-Spoke Multipoint LSPs [RFC7140]. 2762 10.1. YANG Data Model 2764 The YANG modules specified in this document define a schema for data 2765 that is designed to be accessed via network management protocols such 2766 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 2767 is the secure transport layer, and the mandatory-to-implement secure 2768 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 2769 is HTTPS, and the mandatory-to-implement secure transport is TLS 2770 [RFC8446]. 2772 The Network Configuration Access Control Model (NACM) [RFC8341] 2773 provides the means to restrict access for particular NETCONF or 2774 RESTCONF users to a preconfigured subset of all available NETCONF or 2775 RESTCONF protocol operations and content. 2777 The following sub sections capture the security considerations with 2778 respect to mLDP data nodes defined in mLDP YANG modules. This goes 2779 without saying that LDP data nodes security considerations, as 2780 captured in in LDP YANG specification [I-D.ietf-mpls-ldp-yang], apply 2781 orthogonally to mLDP as well. 2783 10.1.1. Writable Nodes 2785 There are a number of data nodes defined in this YANG module that are 2786 writable/creatable/deletable (i.e., config true, which is the 2787 default). These data nodes may be considered sensitive or vulnerable 2788 in some network environments. Write operations (e.g., edit-config) 2789 to these data nodes without proper protection can have a negative 2790 effect on network operations. 2792 For mLDP, the ability to modify MPLS mLDP configuration may allow the 2793 entire MPLS mLDP domain to be compromised including forming LDP 2794 adjacencies and/or peer sessions with unauthorized routers to mount a 2795 massive Denial-of-Service (DoS) attack. 2797 In particular, the subtrees and data nodes that are sensitivite and 2798 vulnerable are same as captured in [I-D.ietf-mpls-ldp-yang] section 2799 10.1.1 2801 10.1.2. Readable Nodes 2803 Some of the readable data nodes in this YANG module may be considered 2804 sensitive or vulnerable in some network environments. It is thus 2805 important to control read access (e.g., via get, get-config, or 2806 notification) to these data nodes. The following text lists the 2807 subtrees and data nodes alongwith their sensitivity/vulnerability: 2809 The exposure of mLDP databases (such as mLDP peers, mLDP Roots, mLDP 2810 FEC-Label bindings) as well LDP databases (such as hello adjacencies, 2811 TCP sessions, and address bindings) beyond the scope of the mLDP 2812 admin domain may be undesirable. The relevant subtrees and data 2813 nodes for LDP are captured in [I-D.ietf-mpls-ldp-yang] section 2814 10.1.2, whereas the relevant subtrees and data nodes for mLDP are as 2815 follows: 2817 * /mpls-ldp/global/mldp/address-families/ipv4/roots 2819 * /mpls-ldp/global/mldp/address-families/ipv6/roots 2821 * /mpls-ldp/global/mldp/address-families/ipv4/roots/root/bindings 2823 * /mpls-ldp/global/mldp/address-families/ipv6/roots/root/bindings 2825 * /mpls-ldp/peers/peer/received-peer-state/capability/mldp 2827 10.1.3. Notifications 2829 The mLDP implementations must rate-limit the generation of mLDP 2830 notifications to avoid creating significant notification load and 2831 possible side effects on the system stability. 2833 11. IANA Considerations 2835 This document requests the registration of the following URIs in the 2836 IETF "XML registry" [RFC3688]: 2838 +====================================================+==========+===+ 2839 |URI |Registrant|XML| 2840 +====================================================+==========+===+ 2841 |urn:ietf:params:xml:ns:yang:ietf-mpls-mldp |The IESG |N/A| 2842 +----------------------------------------------------+----------+---+ 2843 |urn:ietf:params:xml:ns:yang:ietf-mpls-mldp-extended |The IESG |N/A| 2844 +----------------------------------------------------+----------+---+ 2846 Table 2: URIs 2848 This document requests the registration of the following YANG modules 2849 in the "YANG Module Names" registry [RFC6020]: 2851 +==========+===================================+========+===========+ 2852 |Name | Namespace |Prefix | Reference | 2853 +==========+===================================+========+===========+ 2854 |ietf-mpls-| urn:ietf:params:xml:ns:yang:ietf- |mldp | This | 2855 |mldp | mpls-mldp | | document | 2856 +----------+-----------------------------------+--------+-----------+ 2857 |ietf-mpls-| urn:ietf:params:xml:ns:yang:ietf- |mldp-ext| This | 2858 |mldp- | mpls-mldp-extended | | document | 2859 |extended | | | | 2860 +----------+-----------------------------------+--------+-----------+ 2862 Table 3: YANG Modules 2864 -- RFC Editor: Replace "This document" with the document RFC number 2865 at time of publication, and remove this note. 2867 12. Normative References 2869 [I-D.ietf-mpls-ldp-yang] 2870 Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. 2871 Shah, "YANG Data Model for MPLS LDP", Work in Progress, 2872 Internet-Draft, draft-ietf-mpls-ldp-yang-09, 20 March 2873 2020, . 2876 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 2877 DOI 10.17487/RFC3688, January 2004, 2878 . 2880 [RFC5920] Fang, L., Ed., "Security Framework for MPLS and GMPLS 2881 Networks", RFC 5920, DOI 10.17487/RFC5920, July 2010, 2882 . 2884 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2885 the Network Configuration Protocol (NETCONF)", RFC 6020, 2886 DOI 10.17487/RFC6020, October 2010, 2887 . 2889 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2890 and A. Bierman, Ed., "Network Configuration Protocol 2891 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2892 . 2894 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2895 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2896 . 2898 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 2899 Thomas, "Label Distribution Protocol Extensions for Point- 2900 to-Multipoint and Multipoint-to-Multipoint Label Switched 2901 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 2902 . 2904 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 2905 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 2906 November 2011, . 2908 [RFC6512] Wijnands, IJ., Rosen, E., Napierala, M., and N. Leymann, 2909 "Using Multipoint LDP When the Backbone Has No Route to 2910 the Root", RFC 6512, DOI 10.17487/RFC6512, February 2012, 2911 . 2913 [RFC6826] Wijnands, IJ., Ed., Eckert, T., Leymann, N., and M. 2914 Napierala, "Multipoint LDP In-Band Signaling for Point-to- 2915 Multipoint and Multipoint-to-Multipoint Label Switched 2916 Paths", RFC 6826, DOI 10.17487/RFC6826, January 2013, 2917 . 2919 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 2920 RFC 6991, DOI 10.17487/RFC6991, July 2013, 2921 . 2923 [RFC7060] Napierala, M., Rosen, E., and IJ. Wijnands, "Using LDP 2924 Multipoint Extensions on Targeted LDP Sessions", RFC 7060, 2925 DOI 10.17487/RFC7060, November 2013, 2926 . 2928 [RFC7140] Jin, L., Jounay, F., Wijnands, IJ., and N. Leymann, "LDP 2929 Extensions for Hub and Spoke Multipoint Label Switched 2930 Path", RFC 7140, DOI 10.17487/RFC7140, March 2014, 2931 . 2933 [RFC7246] Wijnands, IJ., Ed., Hitchen, P., Leymann, N., Henderickx, 2934 W., Gulko, A., and J. Tantsura, "Multipoint Label 2935 Distribution Protocol In-Band Signaling in a Virtual 2936 Routing and Forwarding (VRF) Table Context", RFC 7246, 2937 DOI 10.17487/RFC7246, June 2014, 2938 . 2940 [RFC7431] Karan, A., Filsfils, C., Wijnands, IJ., Ed., and B. 2941 Decraene, "Multicast-Only Fast Reroute", RFC 7431, 2942 DOI 10.17487/RFC7431, August 2015, 2943 . 2945 [RFC7438] Wijnands, IJ., Ed., Rosen, E., Gulko, A., Joorde, U., and 2946 J. Tantsura, "Multipoint LDP (mLDP) In-Band Signaling with 2947 Wildcards", RFC 7438, DOI 10.17487/RFC7438, January 2015, 2948 . 2950 [RFC7715] Wijnands, IJ., Ed., Raza, K., Atlas, A., Tantsura, J., and 2951 Q. Zhao, "Multipoint LDP (mLDP) Node Protection", 2952 RFC 7715, DOI 10.17487/RFC7715, January 2016, 2953 . 2955 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2956 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 2957 . 2959 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 2960 "Common YANG Data Types for the Routing Area", RFC 8294, 2961 DOI 10.17487/RFC8294, December 2017, 2962 . 2964 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 2965 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 2966 . 2968 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 2969 Access Control Model", STD 91, RFC 8341, 2970 DOI 10.17487/RFC8341, March 2018, 2971 . 2973 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 2974 and R. Wilton, "Network Management Datastore Architecture 2975 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 2976 . 2978 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 2979 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 2980 . 2982 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 2983 Routing Management (NMDA Version)", RFC 8349, 2984 DOI 10.17487/RFC8349, March 2018, 2985 . 2987 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 2988 Documents Containing YANG Data Models", BCP 216, RFC 8407, 2989 DOI 10.17487/RFC8407, October 2018, 2990 . 2992 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 2993 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 2994 . 2996 13. Informative References 2998 [RFC7473] Raza, K. and S. Boutros, "Controlling State Advertisements 2999 of Non-negotiated LDP Applications", RFC 7473, 3000 DOI 10.17487/RFC7473, March 2015, 3001 . 3003 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 3004 RFC 7951, DOI 10.17487/RFC7951, August 2016, 3005 . 3007 Appendix A. Data Tree Example 3009 This section contains an example of an instance data tree in the JSON 3010 encoding [RFC7951], containing both configuration and state data. 3012 lo0: 2001:db8:0:200::1 (Root Address) 3013 +-------+ 3014 | | Router| | 3015 eth21 +---+ R2 +---+ eth23 3016 | | (Root)| | 3017 | +-------+ | lo0: 2001:db8:0:300::1 3018 | +-------+ | | +-------+ | 3019 | | Router| | | | Router| | 3020 eth10 +--+ R1 +---+ eth12 eth32 +---+ R3 +--+ eth30 3021 | | | | | | | | 3022 | +-------+ | | +-------+ | 3023 lo0: 2001:db8:0:200::1 (Root Address) 3025 Figure 12 3027 The configuration instance data tree for Router R3 in the above 3028 figure could be as follows: 3030 { 3031 "ietf-interfaces:interfaces": { 3032 "interface": [ 3033 { 3034 "name": "lo0", 3035 "description": "R3 loopback interface.", 3036 "type": "iana-if-type:softwareLoopback", 3037 "ietf-ip:ipv6": { 3038 "address": [ 3039 { 3040 "ip": "2001:db8:0:300::1", 3041 "prefix-length": 64 3042 } 3043 ] 3044 } 3045 }, 3046 { 3047 "name": "eth30", 3048 "description": "An interface connected to client routers.", 3049 "type": "iana-if-type:ethernetCsmacd", 3050 "ietf-ip:ipv6": { 3051 "forwarding": true 3052 } 3053 }, 3054 { 3055 "name": "eth32", 3056 "description": "An interface connected to root (R2).", 3057 "type": "iana-if-type:ethernetCsmacd", 3058 "ietf-ip:ipv6": { 3059 "forwarding": true 3060 } 3061 } 3062 ] 3063 }, 3064 "ietf-routing:routing": { 3065 "router-id": "203.0.113.3", 3066 "control-plane-protocols": { 3067 "ietf-mpls-ldp:mpls-ldp": { 3068 "global": { 3069 "address-families": { 3070 "ietf-mpls-ldp-extended:ipv6": { 3071 "enable": true 3072 } 3073 }, 3074 "capability": { 3075 "ietf-mpls-mldp:mldp": { 3076 "mp2mp": { 3077 "enable": true 3078 } 3079 } 3080 }, 3081 "ietf-mpls-mldp:mldp": { 3082 "enable": true, 3083 "address-families": { 3084 "ietf-mpls-mldp-extended:ipv6": { 3085 "configured-leaf-lsps": { 3086 "opaque-element-lspid": { 3087 "fec-label": [ 3088 { 3089 "root-address": "2001:db8:0:200::1", 3090 "lsp-id": 201, 3091 "multipoint-type": "mp2mp" 3092 } 3093 ] 3094 } 3095 } 3096 } 3097 } 3098 } 3099 }, 3100 "discovery": { 3101 "interfaces": { 3102 "interface": [ 3103 { 3104 "name": "eth30", 3105 "address-families": { 3106 "ietf-mpls-ldp-extended:ipv6": { 3107 "enable": true 3108 } 3109 } 3110 }, 3111 { 3112 "name": "eth32", 3113 "address-families": { 3114 "ietf-mpls-ldp-extended:ipv6": { 3115 "enable": true 3116 } 3117 } 3118 } 3119 ] 3120 } 3121 } 3122 } 3123 } 3124 } 3125 } 3127 Figure 13 3129 The cooresponding operational state data for Router R3 could be as 3130 follows: 3132 { 3133 "ietf-interfaces:interfaces": { 3134 "interface": [ 3135 { 3136 "name": "lo0", 3137 "description": "R3 loopback interface.", 3138 "type": "iana-if-type:softwareLoopback", 3139 "phys-address": "00:00:5e:00:53:03", 3140 "oper-status": "up", 3141 "statistics": { 3142 "discontinuity-time": "2018-10-15T12:34:56-05:00" 3143 }, 3144 "ietf-ip:ipv6": { 3145 "mtu": 1500, 3146 "address": [ 3147 { 3148 "ip": "2001:db8:0:300::1", 3149 "prefix-length": 64, 3150 "origin": "static", 3151 "status": "preferred" 3152 }, 3153 { 3154 "ip": "fe80::200:5eff:fe00:5303", 3155 "prefix-length": 64, 3156 "origin": "link-layer", 3157 "status": "preferred" 3158 } 3159 ], 3160 "neighbor": [ 3161 ] 3162 } 3163 }, 3164 { 3165 "name": "eth30", 3166 "description": "An interface connected to client routers.", 3167 "type": "iana-if-type:ethernetCsmacd", 3168 "phys-address": "00:00:5e:00:53:30", 3169 "oper-status": "up", 3170 "statistics": { 3171 "discontinuity-time": "2018-10-15T12:34:56-05:00" 3172 }, 3173 "ietf-ip:ipv6": { 3174 "forwarding": true, 3175 "mtu": 1500, 3176 "address": [ 3177 { 3178 "ip": "fe80::200:5eff:fe00:5330", 3179 "prefix-length": 64, 3180 "origin": "link-layer", 3181 "status": "preferred" 3182 } 3183 ], 3184 "neighbor": [ 3185 ] 3186 } 3187 }, 3188 { 3189 "name": "eth32", 3190 "description": "An interface connected to root (R2).", 3191 "type": "iana-if-type:ethernetCsmacd", 3192 "phys-address": "00:00:5e:00:53:32", 3193 "oper-status": "up", 3194 "statistics": { 3195 "discontinuity-time": "2018-10-15T12:34:56-05:00" 3196 }, 3197 "ietf-ip:ipv6": { 3198 "forwarding": true, 3199 "mtu": 1500, 3200 "address": [ 3201 { 3202 "ip": "fe80::200:5eff:fe00:5332", 3203 "prefix-length": 64, 3204 "origin": "link-layer", 3205 "status": "preferred" 3206 } 3207 ], 3208 "neighbor": [ 3209 { 3210 "ip": "fe80::200:5eff:fe00:5323", 3211 "link-layer-address": "00:00:5e:00:53:23", 3212 "origin": "dynamic", 3213 "is-router": [null], 3214 "state": "reachable" 3215 } 3216 ] 3217 } 3218 } 3219 ] 3220 }, 3221 "ietf-routing:routing": { 3222 "router-id": "203.0.113.3", 3223 "interfaces": { 3224 "interface": [ 3225 "lo0", 3226 "eth30", 3227 "eth32" 3228 ] 3229 }, 3230 "control-plane-protocols": { 3231 "ietf-mpls-ldp:mpls-ldp": { 3232 "global": { 3233 "address-families": { 3234 "ietf-mpls-ldp-extended:ipv6": { 3235 "enable": true 3236 } 3237 }, 3238 "capability": { 3239 "ietf-mpls-mldp:mldp": { 3240 "mp2mp": { 3241 "enable": true 3242 } 3243 } 3244 }, 3245 "ietf-mpls-mldp:mldp": { 3246 "enable": true, 3247 "address-families": { 3248 "ietf-mpls-mldp-extended:ipv6": { 3249 "configured-leaf-lsps": { 3250 "opaque-element-lspid": { 3251 "fec-label": [ 3252 { 3253 "root-address": "2001:db8:0:200::1", 3254 "lsp-id": 201, 3255 "multipoint-type": "mp2mp" 3256 } 3257 ] 3258 } 3259 }, 3260 "roots": { 3261 "root": [ 3262 { 3263 "root-address": "2001:db8:0:200::1", 3264 "is-self": false, 3265 "reachability": [ 3266 { 3267 "address": "fe80::200:5eff:fe00:5323", 3268 "interface": "eth32", 3269 "peer": "203.0.113.2" 3270 } 3271 ], 3272 "bindings": { 3273 "opaque-element-lspid": { 3274 "fec-label": [ 3275 { 3276 "lsp-id": 201, 3277 "multipoint-type": "mp2mp", 3278 "peer": [ 3279 { 3280 "direction": "upstream", 3281 "peer": "203.0.113.2", 3282 "advertisement-type": "advertised", 3283 "label": 3201 3284 }, 3285 { 3286 "direction": "upstream", 3287 "peer": "203.0.113.2", 3288 "advertisement-type": "received", 3289 "label": 2301 3290 } 3291 ] 3292 } 3293 ] 3294 } 3295 } 3296 } 3297 ] 3298 } 3300 } 3301 } 3302 } 3303 }, 3304 "discovery": { 3305 "interfaces": { 3306 "interface": [ 3307 { 3308 "name": "eth30", 3309 "address-families": { 3310 "ietf-mpls-ldp-extended:ipv6": { 3311 "enable": true, 3312 "hello-adjacencies": { 3313 "hello-adjacency": [ 3314 ] 3315 } 3316 } 3317 } 3318 }, 3319 { 3320 "name": "eth32", 3321 "address-families": { 3322 "ietf-mpls-ldp-extended:ipv6": { 3323 "enable": true, 3324 "hello-adjacencies": { 3325 "hello-adjacency": [ 3326 { 3327 "adjacent-address": 3328 "fe80::200:5eff:fe00:5323", 3329 "flag": ["adjacency-flag-active"], 3330 "hello-holdtime": { 3331 "adjacent": 15, 3332 "negotiated": 15, 3333 "remaining": 9 3334 }, 3335 "next-hello": 3, 3336 "statistics": { 3337 "discontinuity-time": 3338 "2018-10-15T12:34:56-05:00" 3339 }, 3340 "peer": { 3341 "lsr-id": "203.0.113.2", 3342 "label-space-id": 0 3343 } 3344 } 3345 ] 3346 } 3347 } 3349 } 3350 } 3351 ] 3352 } 3353 }, 3354 "peers": { 3355 "peer": [ 3356 { 3357 "lsr-id": "203.0.113.2", 3358 "label-space-id": 0, 3359 "label-advertisement-mode": { 3360 "local": "downstream-unsolicited", 3361 "peer": "downstream-unsolicited", 3362 "negotiated": "downstream-unsolicited" 3363 }, 3364 "next-keep-alive": 5, 3365 "session-holdtime": { 3366 "peer": 180, 3367 "negotiated": 180, 3368 "remaining": 78 3369 }, 3370 "session-state": "operational", 3371 "tcp-connection": { 3372 "local-address": "fe80::200:5eff:fe00:5332", 3373 "local-port": 646, 3374 "remote-address": "fe80::200:5eff:fe00:5323", 3375 "remote-port": 646 3376 }, 3377 "up-time": "P2H33M5S", 3378 "statistics": { 3379 "discontinuity-time": "2018-10-15T12:34:56-05:00" 3380 }, 3381 "received-peer-state": { 3382 "capability": { 3383 "ietf-mpls-mldp:mldp": { 3384 "mp2mp": { 3385 "enable": true 3386 } 3387 } 3388 } 3389 } 3390 } 3391 ] 3392 } 3393 } 3394 } 3395 } 3396 } 3397 Figure 14 3399 Appendix B. Acknowledgments 3401 The authors would like to acknowledge Ladislav Lhotka and Acee Lindem 3402 for their review and comments during WG. 3404 Appendix C. Contributors 3406 Matthew Bocci 3407 Nokia 3408 Email: matthew.bocci@nokia.com 3410 Authors' Addresses 3412 Kamran Raza (editor) 3413 Cisco Systems 3414 Email: skraza@cisco.com 3416 Xufeng Liu 3417 Volta Networks 3418 Email: xufeng.liu.ietf@gmail.com 3420 Santosh Esale 3421 Juniper Networks 3422 Email: santosh_easale@berkeley.edu 3424 Loa Andersson 3425 Huawei Technologies 3426 Email: loa@pi.nu 3428 Jeff Tantsura 3429 Microsoft Corporation 3430 Email: jefftant.ietf@gmail.com 3432 Sowmya Krishnaswamy 3433 Individual 3434 Email: krishnaswamy.sowmya@gmail.com 3435 Rajiv Asati 3436 Cisco Systems 3437 Email: rajiva@cisco.com 3439 Xia Chen 3440 Huawei Technologies 3441 Email: jescia.chenxia@huawei.com 3443 Himanshu Shah 3444 Ciena Corporation 3445 Email: hshah@ciena.com