idnits 2.17.1 draft-raza-mpls-ldp-mldp-yang-04.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: ---------------------------------------------------------------------------- == The page length should not exceed 58 lines per page, but there was 1 longer page, the longest (page 113) being 82 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 116 instances of too long lines in the document, the longest one being 46 characters in excess of 72. == There are 18 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. == There are 21 instances of lines with private range IPv4 addresses in the document. If these are generic example addresses, they should be changed to use any of the ranges defined in RFC 6890 (or successor): 192.0.2.x, 198.51.100.x or 203.0.113.x. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 398 has weird spacing: '...address ine...' == Line 404 has weird spacing: '...address ine...' == Line 445 has weird spacing: '... lsr-id yan...' == Line 664 has weird spacing: '...nt-type adv...' == Line 678 has weird spacing: '...nt-type adv...' == (45 more instances...) -- The document date (July 8, 2016) is 2848 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: A later version (-25) exists of draft-ietf-netmod-routing-cfg-22 ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-31) exists of draft-ietf-rtgwg-policy-model-01 == Outdated reference: A later version (-04) exists of draft-iwijnand-mpls-mldp-multi-topology-03 Summary: 2 errors (**), 0 flaws (~~), 13 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 MPLS Working Group K. Raza 2 Internet-Draft R. Asati 3 Intended status: Standards Track Cisco Systems, Inc. 4 Expires: January 9, 2017 5 X. Liu 6 Ericsson 8 S. Esale 9 Juniper Networks 11 X. Chen 12 Huawei Technologies 14 H. Shah 15 Ciena Corporation 17 July 8, 2016 19 YANG Data Model for MPLS LDP and mLDP 20 draft-raza-mpls-ldp-mldp-yang-04 22 Abstract 24 This document describes a YANG data model for Multi-Protocol Label 25 Switching (MPLS) Label Distribution Protocol (LDP) and Multipoint LDP 26 (mLDP). 28 Status of This Memo 30 This Internet-Draft is submitted in full conformance with the 31 provisions of BCP 78 and BCP 79. 33 Internet-Drafts are working documents of the Internet Engineering 34 Task Force (IETF). Note that other groups may also distribute 35 working documents as Internet-Drafts. The list of current Internet- 36 Drafts is at http://datatracker.ietf.org/drafts/current/. 38 Internet-Drafts are draft documents valid for a maximum of six months 39 and may be updated, replaced, or obsoleted by other documents at any 40 time. It is inappropriate to use Internet-Drafts as reference 41 material or to cite them other than as "work in progress." 43 This Internet-Draft will expire on January 9, 2017. 45 Copyright Notice 47 Copyright (c) 2016 IETF Trust and the persons identified as the 48 document authors. All rights reserved. 50 This document is subject to BCP 78 and the IETF Trust's Legal 51 Provisions Relating to IETF Documents 52 (http://trustee.ietf.org/license-info) in effect on the date of 53 publication of this document. Please review these documents 54 carefully, as they describe your rights and restrictions with respect 55 to this document. Code Components extracted from this document must 56 include Simplified BSD License text as described in Section 4.e of 57 the Trust Legal Provisions and are provided without warranty as 58 described in the Simplified BSD License. 60 Table of Contents 62 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 63 2. Specification of Requirements . . . . . . . . . . . . . . . . 3 64 3. LDP YANG Model . . . . . . . . . . . . . . . . . . . . . . . 3 65 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 66 3.2. Configuration . . . . . . . . . . . . . . . . . . . . . . 7 67 3.2.1. Configuration Hierarchy . . . . . . . . . . . . . . . 11 68 3.2.2. All-VRFs Configuration . . . . . . . . . . . . . . . 14 69 3.3. Operational State . . . . . . . . . . . . . . . . . . . . 14 70 3.3.1. Derived States . . . . . . . . . . . . . . . . . . . 21 71 3.4. Notifications . . . . . . . . . . . . . . . . . . . . . . 26 72 3.5. Actions . . . . . . . . . . . . . . . . . . . . . . . . . 26 73 4. mLDP YANG Model . . . . . . . . . . . . . . . . . . . . . . . 27 74 4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 27 75 4.2. Configuration . . . . . . . . . . . . . . . . . . . . . . 28 76 4.2.1. Configuration Hierarchy . . . . . . . . . . . . . . . 28 77 4.2.2. mldp container . . . . . . . . . . . . . . . . . . . 30 78 4.2.3. Leveraging LDP containers . . . . . . . . . . . . . . 31 79 4.2.4. YANG tree . . . . . . . . . . . . . . . . . . . . . . 31 80 4.3. Operational State . . . . . . . . . . . . . . . . . . . . 33 81 4.3.1. Derived states . . . . . . . . . . . . . . . . . . . 38 82 4.4. Notifications . . . . . . . . . . . . . . . . . . . . . . 42 83 4.5. Actions . . . . . . . . . . . . . . . . . . . . . . . . . 43 84 5. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 43 85 6. YANG Specification . . . . . . . . . . . . . . . . . . . . . 43 86 7. Security Considerations . . . . . . . . . . . . . . . . . . . 110 87 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 110 88 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 110 89 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 110 90 10.1. Normative References . . . . . . . . . . . . . . . . . . 110 91 10.2. Informative References . . . . . . . . . . . . . . . . . 113 92 Appendix A. Additional Contributors . . . . . . . . . . . . . . 113 93 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 113 95 1. Introduction 97 The Network Configuration Protocol (NETCONF) [RFC6241] is one of the 98 network management protocols that defines mechanisms to manage 99 network devices. YANG [RFC6020] is a modular language that 100 represents data structures in an XML tree format, and is used as a 101 data modelling language for the NETCONF. 103 This document introduces a YANG data model for MPLS Label 104 Distribution Protocol (LDP) [RFC5036] and Multipoint LDP (mLDP) 105 [RFC6388]. For LDP, it also covers LDP IPv6 [RFC7552] and LDP 106 capabilities [RFC5561]. 108 The data model is defined for following constructs that are used for 109 managing the protocol: 111 o Configuration 113 o Operational State 115 o Executables (Actions) 117 o Notifications 119 This document is organized to define the data model for each of the 120 above constructs (configuration, state, action, and notifications) in 121 the sequence as listed earlier. Given that mLDP is tightly coupled 122 with LDP, mLDP data model is defined under LDP tree and in the same 123 sequence as listed above. 125 2. Specification of Requirements 127 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 128 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 129 document are to be interpreted as described in [RFC2119]. 131 In this document, the word "IP" is used to refer to both IPv4 and 132 IPv6, unless otherwise explicitly stated. For example, "IP address 133 family" means and be read as "IPv4 and/or IPv6 address family" 135 3. LDP YANG Model 136 3.1. Overview 138 This document defines a new module named "ietf-mpls-ldp" for LDP/mLDP 139 data model where this module augments /rt:routing/rt:control-plane- 140 protocols that is defined in [I-D.ietf-netmod-routing-cfg]. 142 There are four main containers in "ietf-mpls-ldp" module as follows: 144 o Read-Write parameters for configuration (Discussed in Section 3.2) 146 o Read-only parameters for operational state (Discussed in 147 Section 3.3) 149 o Notifications for events (Discussed in Section 3.4) 151 o RPCs for executing commands to perform some action (Discussed in 152 Section 3.5) 154 For the configuration and state data, this model follows the similar 155 approach described in [I-D.openconfig-netmod-opstate] to represent 156 the configuration (intended state) and operational (applied and 157 derived) state. This means that for every configuration (rw) item, 158 there is an associated (ro) item under "state" container to represent 159 the applied state. Furthermore, protocol derived state is also kept 160 under "state" tree corresponding to the protocol area (discovery, 161 peer etc.). [Ed note: This document will be (re-)aligned with 162 [I-D.openconfig-netmod-opstate] once that specification is adopted as 163 a WG document] 165 Following diagram depicts high level LDP yang tree organization and 166 hierarchy: 168 module: ietf-mpls-ldp 169 +-- rw routing 170 +-- rw control-plane-protocols 171 +-- rw mpls-ldp 172 +-- rw global 173 | +-- rw config 174 | +-- rw ... 175 | +-- ro state 176 | +-- ro ... 177 | . 178 +-- rw ... 179 | 180 | 181 +-- rw ... 182 ... 184 rpcs: 185 +-- x mpls-ldp-rpc 186 +-- x . . . . . 188 notifications: 189 +--- n mpls-ldp-notif 190 +--- n ... 192 Figure 1 194 Before going into data model details, it is important to take note of 195 the following points: 197 o This module aims to address only the core LDP/mLDP parameters as 198 per RFC specification, as well as some widely used and deployed 199 non-RFC features (such as label policies, session authentication 200 etc). Any vendor specific feature should be defined in a vendor- 201 specific augmentation of this model. 203 o Multi-topology LDP [RFC7307] and Multi-topology mLDP 204 [I-D.iwijnand-mpls-mldp-multi-topology] are beyond the scope of 205 this document. 207 o This module does not cover any applications running on top of LDP 208 and mLDP, nor does it cover any OAM procedures for LDP and mLDP. 210 o This model is a VPN Forwarding and Routing (VRF)-centric model. 211 It is important to note that [RFC4364] defines VRF tables and 212 default forwarding tables as different, however from a yang 213 modelling perspective this introduces unnecessary complications, 214 hence we are treating the default forwarding table as just another 215 VRF. 217 o A "network-instance" as defined in [I-D.rtgyangdt-rtgwg-ni-model] 218 refers to a VRF instance (both default and non-default) within the 219 scope of this model. 221 o This model supports two address-families, namely "ipv4" and 222 "ipv6". 224 o This model assumes platform-wide label space (i.e. label space Id 225 of zero). However, when Upstream Label assignment [RFC6389] is in 226 use, an upstream assigned label is looked up in a Context-Specific 227 label space as defined in [RFC5331]. 229 o The label and peer policies (including filters) are defined using 230 a prefix-list. When used for a peer policy, the prefix refers to 231 the LSR Id of the peer. The prefix-list is referenced from 232 routing-policy model as defined in [I-D.ietf-rtgwg-policy-model]. 234 o The use of grouping (templates) for bundling and grouping the 235 configuration items is not employed in current revision, and is a 236 subject for consideration in future. 238 o This model uses the terms LDP "neighbor"/"adjacency", "session", 239 and "peer" with the following semantics: 241 * Neighbor/Adjacency: An LDP enabled LSR that is discovered 242 through LDP discovery mechanisms. 244 * Session: An LDP neighbor with whom a TCP connection has been 245 established. 247 * Peer: An LDP session which has successfully progressed beyond 248 its initialization phase and is either already exchanging the 249 bindings or is ready to do so. 251 It is to be noted that LDP Graceful Restart mechanisms defined in 252 [RFC3478] allow keeping the exchanged bindings for some time after 253 a session goes down with a peer. We call such a state -- i.e. 254 keeping peer bindings without established or recovered peering -- 255 a "stale" peer. When used in this document, the above terms will 256 refer strictly to the semantics and definitions defined for them. 258 A graphical representation of LDP YANG data model is presented in 259 Figure 3, Figure 5, Figure 11, and Figure 12. Whereas, the actual 260 model definition in YANG is captured in Section 6. 262 While presenting the YANG tree view and actual .yang specification, 263 this document assumes the reader is familiar with the concepts of 264 YANG modeling, its presentation and its compilation. 266 3.2. Configuration 268 This specification defines the configuration parameters for base LDP 269 as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it 270 incorporates provisions to enable LDP Capabilities [RFC5561], and 271 defines some of the most significant and commonly used capabilities 272 such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP 273 Upstream Label Assignment [RFC6389]. 275 This specification supports VRF-centric configuration. For 276 implementations that support protocol-centric configuration, with 277 provision for inheritance and items that apply to all vrfs, we 278 recommend an augmentation of this model such that any protocol- 279 centric or all-vrf configuration is defined under their designated 280 containers within the standard network-instance (please see 281 Section 3.2.2) 283 This model augments /rt:routing/rt:control-plane-protocols that is 284 defined in [I-D.ietf-netmod-routing-cfg]. For LDP interfaces, this 285 model refers the MPLS interface as defined under MPLS base 286 specification [I-D.saad-mpls-base-yang]. Furthermore, as mentioned 287 earlier, the configuration tree presents read-write intended 288 configuration leave/items as well as read-only state of the applied 289 configuration. The former is listed under "config" container and 290 latter under "state" container. 292 Following is high-level configuration organization for LDP/mLDP: 294 module: ietf-mpls-ldp 295 +-- routing 296 +-- control-plane-protocols 297 +-- mpls-ldp 298 +-- global 299 | +-- ... 300 | +-- ... 301 | +-- address-family* [afi] 302 | +-- . . . 303 | +-- . . . 304 | +-- discovery 305 | +-- . . . 306 +-- peers 307 +-- ... 308 +-- ... 310 Figure 2 312 Given the configuration hierarchy, the model allows inheritance such 313 that an item in a child tree is able to derive value from a similar 314 or related item in one of the parent. For instance, hello holdtime 315 can be configured per-VRF or per-VRF-interface, thus allowing 316 inheritance as well flexibility to override with a different value at 317 any child level. 319 Following is a simplified graphical representation of the data model 320 for LDP configuration 322 +--rw mpls-ldp! 323 +--rw global 324 | +--rw config 325 | | +--rw capability 326 | | | +--rw end-of-lib {capability-end-of-lib}? 327 | | | | +--rw enable? boolean 328 | | | +--rw typed-wildcard-fec {capability-typed-wildcard-fec}? 329 | | | | +--rw enable? boolean 330 | | | +--rw upstream-label-assignment {capability-upstream-label-assignment}? 331 | | | +--rw enable? boolean 332 | | +--rw graceful-restart 333 | | | +--rw enable? boolean 334 | | | +--rw helper-enable? boolean {graceful-restart-helper-mode}? 335 | | | +--rw reconnect-time? uint16 336 | | | +--rw recovery-time? uint16 337 | | | +--rw forwarding-holdtime? uint16 338 | | +--rw igp-synchronization-delay? uint16 339 | | +--rw lsr-id? yang:dotted-quad 340 | +--rw address-family* [afi] 341 | | +--rw afi ldp-address-family 342 | | +--rw config 343 | | +--rw enable? boolean 344 | | +--rw label-policy 345 | | | +--rw independent-mode 346 | | | | +--rw assign {policy-label-assignment-config}? 347 | | | | | +--rw (prefix-option)? 348 | | | | | | +--rw prefix-list? prefix-list-ref 349 | | | | | +--rw host-routes-only? boolean 350 | | | | +--rw advertise 351 | | | | | +--rw explicit-null 352 | | | | | | +--rw enable? boolean 353 | | | | | | +--rw prefix-list? prefix-list-ref 354 | | | | | +--rw prefix-list? prefix-list-ref 355 | | | | +--rw accept 356 | | | | +--rw prefix-list? prefix-list-ref 357 | | | +--rw ordered-mode {policy-ordered-label-config}? 358 | | | +--rw egress-lsr 359 | | | | +--rw prefix-list? prefix-list-ref 360 | | | +--rw advertise 361 | | | | +--rw prefix-list? prefix-list-ref 362 | | | +--rw accept 363 | | | +--rw prefix-list? prefix-list-ref 364 | | +--rw ipv4 365 | | | +--rw transport-address? inet:ipv4-address 366 | | +--rw ipv6 367 | | +--rw transport-address? inet:ipv6-address 368 | +--rw discovery 369 | | +--rw interfaces 370 | | | +--rw config 371 | | | | +--rw hello-holdtime? uint16 372 | | | | +--rw hello-interval? uint16 373 | | | +--rw interface* [interface] 374 | | | +--rw interface mpls-interface-ref 375 | | | +--rw config 376 | | | | +--rw hello-holdtime? uint16 377 | | | | +--rw hello-interval? uint16 378 | | | | +--rw igp-synchronization-delay? uint16 {per-interface-timer-config}? 379 | | | +--rw address-family* [afi] 380 | | | +--rw afi ldp-address-family 381 | | | +--rw config 382 | | | +--rw enable? boolean 383 | | | +--rw ipv4 384 | | | | +--rw transport-address? union 385 | | | +--rw ipv6 386 | | | +--rw transport-address? union 387 | | +--rw targeted 388 | | +--rw config 389 | | | +--rw hello-holdtime? uint16 390 | | | +--rw hello-interval? uint16 391 | | | +--rw hello-accept {policy-extended-discovery-config}? 392 | | | +--rw enable? boolean 393 | | | +--rw neighbor-list? neighbor-list-ref 394 | | +--rw address-family* [afi] 395 | | +--rw afi ldp-address-family 396 | | +--rw ipv4 397 | | | +--rw target* [adjacent-address] 398 | | | +--rw adjacent-address inet:ipv4-address 399 | | | +--rw config 400 | | | +--rw enable? boolean 401 | | | +--rw local-address? inet:ipv4-address 402 | | +--rw ipv6 403 | | +--rw target* [adjacent-address] 404 | | +--rw adjacent-address inet:ipv6-address 405 | | +--rw config 406 | | +--rw enable? boolean 407 | | +--rw local-address? inet:ipv6-address 408 | +--rw forwarding-nexthop {forwarding-nexthop-config}? 409 | | +--rw interfaces 410 | | +--rw interface* [interface] 411 | | +--rw interface mpls-interface-ref 412 | | +--rw address-family* [afi] 413 | | +--rw afi ldp-address-family 414 | | +--rw config 415 | | +--rw ldp-disable? boolean 416 | +--rw label-policy 417 | +--rw independent-mode 418 | | +--rw assign {policy-label-assignment-config}? 419 | | | +--rw (prefix-option)? 420 | | | +--rw prefix-list? prefix-list-ref 421 | | | +--rw host-routes-only? boolean 422 | | +--rw advertise 423 | | | +--rw explicit-null 424 | | | | +--rw enable? boolean 425 | | | | +--rw prefix-list? prefix-list-ref 426 | | | +--rw prefix-list? prefix-list-ref 427 | | +--rw accept 428 | | +--rw prefix-list? prefix-list-ref 429 | +--rw ordered-mode {policy-ordered-label-config}? 430 | +--rw egress-lsr 431 | | +--rw prefix-list? prefix-list-ref 432 | +--rw advertise 433 | | +--rw prefix-list? prefix-list-ref 434 | +--rw accept 435 | +--rw prefix-list? prefix-list-ref 436 +--rw peers 437 +--rw config 438 | +--rw session-authentication-md5-password? string 439 | +--rw session-ka-holdtime? uint16 440 | +--rw session-ka-interval? uint16 441 | +--rw session-downstream-on-demand {session-downstream-on-demand-config}? 442 | +--rw enable? boolean 443 | +--rw peer-list? peer-list-ref 444 +--rw peer* [lsr-id] 445 +--rw lsr-id yang:dotted-quad 446 +--rw config 447 +--rw admin-down? boolean 448 +--rw capability 449 +--rw label-policy 450 | +--rw advertise 451 | | +--rw prefix-list? prefix-list-ref 452 | +--rw accept 453 | +--rw prefix-list? prefix-list-ref 454 +--rw session-authentication-md5-password? string 455 +--rw graceful-restart 456 | +--rw enable? boolean 457 | +--rw reconnect-time? uint16 458 | +--rw recovery-time? uint16 459 +--rw session-ka-holdtime? uint16 460 +--rw session-ka-interval? uint16 461 +--rw address-family 462 +--rw ipv4 463 | +--rw label-policy 464 | +--rw advertise 465 | | +--rw prefix-list? prefix-list-ref 466 | +--rw accept 467 | +--rw prefix-list? prefix-list-ref 468 +--rw ipv6 469 +--rw label-policy 470 +--rw advertise 471 | +--rw prefix-list? prefix-list-ref 472 +--rw accept 473 +--rw prefix-list? prefix-list-ref 475 Figure 3 477 3.2.1. Configuration Hierarchy 479 The LDP configuration container is logically divided into following 480 high-level config areas: 482 Per-VRF parameters 483 o Global parameters 484 o Per-address-family parameters 485 o LDP Capabilities parameters 486 o Hello Discovery parameters 487 - interfaces 488 - Per-interface: 489 Global 490 Per-address-family 491 - targeted 492 - Per-target 493 o Peer parameters 494 - Global 495 - Per-peer 496 Per-address-family 497 Capabilities parameters 498 o Forwarding parameters 500 Figure 4 502 Following subsections briefly explain these configuration areas. 504 3.2.1.1. Per-VRF parameters 506 LDP module resides under an network-instance and the scope of any LDP 507 configuration defined under this tree is per network-instance (per- 508 VRF). This configuration is further divided into sub categories as 509 follows. 511 3.2.1.1.1. Per-VRF global parameters 513 There are configuration items that are available directly under a VRF 514 instance and do not fall under any other sub tree. Example of such a 515 parameter is LDP LSR id that is typically configured per VRF. To 516 keep legacy LDP features and applications working in an LDP IPv4 517 networks with this model, this document recommends an operator to 518 pick a routable IPv4 unicast address as an LSR Id. 520 3.2.1.1.2. Per-VRF Capabilities parameters 522 This container falls under global tree and holds the LDP capabilities 523 that are to be enabled for certain features. By default, an LDP 524 capability is disabled unless explicitly enabled. These capabilities 525 are typically used to negotiate with LDP peer(s) the support/non- 526 support related to a feature and its parameters. The scope of a 527 capability enabled under this container applies to all LDP peers in 528 the given VRF instance. There is also a peer level capability 529 container that is provided to override a capability that is enabled/ 530 specified at VRF level. 532 3.2.1.1.3. Per-VRF Per-Address-Family parameters 534 Any LDP configuration parameter related to IP address family (AF) 535 whose scope is VRF wide is configured under this tree. The examples 536 of per-AF parameters include enabling LDP for an address family, 537 prefix-list based label policies, and LDP transport address. 539 3.2.1.1.4. Per-VRF Hello Discovery parameters 541 This container is used to hold LDP configuration related to Hello and 542 discovery process for both basic (link) and extended (targeted) 543 discovery. 545 The "interfaces" is a container to configure parameters related to 546 VRF interfaces. There are parameters that apply to all interfaces 547 (such as hello timers), as well as parameters that can be configured 548 per-interface. Hence, an interface list is defined under 549 "interfaces" container. The model defines parameters to configure 550 per-interface non AF related items, as well as per-interface per-AF 551 items. The example of former is interface hello timers, and example 552 of latter is enabling hellos for a given AF under an interface. 554 The "targeted" container under a VRF instance allows to configure LDP 555 targeted discovery related parameters. Within this container, the 556 "target" list provides a mean to configure multiple target addresses 557 to perform extended discovery to a specific destination target, as 558 well as to fine-tune the per-target parameters. 560 3.2.1.1.5. Per-VRF Peer parameters 562 This container is used to hold LDP configuration related to LDP 563 sessions and peers under a VRF instance. This container allows to 564 configure parameters that either apply on VRF's all peers or a subset 565 (peer-list) of VRF peers. The example of such parameters include 566 authentication password, session KA timers etc. Moreover, the model 567 also allows per-peer parameter tuning by specifying a "peer" list 568 under the "peers" container. A peer is uniquely identified using its 569 LSR Id and hence LSR Id is the key for peer list 571 Like per-interface parameters, some per-peer parameters are AF- 572 agnostic (i.e. either non AF related or apply to both IP address 573 families), and some that belong to an AF. The example of former is 574 per-peer session password configuration, whereas the example of 575 latter is prefix-list based label policies (inbound and outbound) 576 that apply to a given peer. 578 3.2.1.1.6. Per-VRF Forwarding parameters 580 This container is used to hold configuration used to control LDP 581 forwarding behavior under a VRF instance. One example of a 582 configuration under this container is when a user wishes to enable 583 neighbor discovery on an interface but wishes to disable use of the 584 same interface as forwarding nexthop. This example configuration 585 makes sense only when there are more than one LDP enabled interfaces 586 towards the neighbor. 588 3.2.2. All-VRFs Configuration 590 [Ed note: TODO] 592 3.3. Operational State 594 Operational state of LDP can be queried and obtained from read-only 595 state containers that fall under the same tree (/rt:routing/ 596 rt:control-plane-protocols/) as the configuration. 598 Please note this state tree refers both the configuration "applied" 599 state as well as the "derived" state related to the protocol. [Ed 600 note: This is where this model differs presently from 601 [I-D.openconfig-netmod-opstate] and subject to alignment in later 602 revisions] 604 Following is a simplified graphical representation of the data model 605 for LDP operational state. 607 module: ietf-mpls-ldp 608 augment /rt:routing/rt:control-plane-protocols: 609 +--rw mpls-ldp! 610 +--rw global 611 | +--ro state 612 | | +--ro capability 613 | | | +--ro end-of-lib {capability-end-of-lib}? 614 | | | | +--ro enable? boolean 615 | | | +--ro typed-wildcard-fec {capability-typed-wildcard-fec}? 616 | | | | +--ro enable? boolean 617 | | | +--ro upstream-label-assignment {capability-upstream-label-assignment}? 618 | | | | +--ro enable? boolean 619 | | +--ro graceful-restart 620 | | | +--ro enable? boolean 621 | | | +--ro helper-enable? boolean {graceful-restart-helper-mode}? 622 | | | +--ro reconnect-time? uint16 623 | | | +--ro recovery-time? uint16 624 | | | +--ro forwarding-holdtime? uint16 625 | | +--ro igp-synchronization-delay? uint16 626 | | +--ro lsr-id? yang:dotted-quad 627 | +--rw address-family* [afi] 628 | | +--rw afi ldp-address-family 629 | | +--ro state 630 | | +--ro enable? boolean 631 | | +--ro label-policy 632 | | | +--ro independent-mode 633 | | | | +--ro assign {policy-label-assignment-config}? 634 | | | | | +--ro (prefix-option)? 635 | | | | | +--:(prefix-list) 636 | | | | | | +--ro prefix-list? prefix-list-ref 637 | | | | | +--:(host-routes-only) 638 | | | | | +--ro host-routes-only? boolean 639 | | | | +--ro advertise 640 | | | | | +--ro explicit-null 641 | | | | | | +--ro enable? boolean 642 | | | | | | +--ro prefix-list? prefix-list-ref 643 | | | | | +--ro prefix-list? prefix-list-ref 644 | | | | +--ro accept 645 | | | | +--ro prefix-list? prefix-list-ref 646 | | | +--ro ordered-mode {policy-ordered-label-config}? 647 | | | +--ro egress-lsr 648 | | | | +--ro prefix-list? prefix-list-ref 649 | | | +--ro advertise 650 | | | | +--ro prefix-list? prefix-list-ref 651 | | | +--ro accept 652 | | | +--ro prefix-list? prefix-list-ref 653 | | +--ro ipv4 654 | | | +--ro transport-address? inet:ipv4-address 655 | | | +--ro bindings 656 | | | +--ro address* [address] 657 | | | | +--ro address inet:ipv4-address 658 | | | | +--ro advertisement-type? advertised-received 659 | | | | +--ro peer? leafref 660 | | | +--ro fec-label* [fec] 661 | | | +--ro fec inet:ipv4-prefix 662 | | | +--ro peer* [peer advertisement-type] 663 | | | +--ro peer leafref 664 | | | +--ro advertisement-type advertised-received 665 | | | +--ro label? mpls:mpls-label 666 | | | +--ro used-in-forwarding? boolean 667 | | +--ro ipv6 668 | | +--ro transport-address? inet:ipv6-address 669 | | +--ro binding 670 | | +--ro address* [address] 671 | | | +--ro address inet:ipv6-address 672 | | | +--ro advertisement-type? advertised-received 673 | | | +--ro peer? leafref 674 | | +--ro fec-label* [fec] 675 | | +--ro fec inet:ipv6-prefix 676 | | +--ro peer* [peer advertisement-type] 677 | | +--ro peer leafref 678 | | +--ro advertisement-type advertised-received 679 | | +--ro label? mpls:mpls-label 680 | | +--ro used-in-forwarding? boolean 681 | +--rw discovery 682 | | +--rw interfaces 683 | | | +--ro state 684 | | | | +--ro hello-holdtime? uint16 685 | | | | +--ro hello-interval? uint16 686 | | | +--rw interface* [interface] 687 | | | +--ro state 688 | | | | +--ro hello-holdtime? uint16 689 | | | | +--ro hello-interval? uint16 690 | | | | +--ro igp-synchronization-delay? uint16 {per-interface-timer-config}? 691 | | | | +--ro next-hello? uint16 692 | | | +--rw address-family* [afi] 693 | | | +--rw afi ldp-address-family 694 | | | +--ro state 695 | | | +--ro enable? boolean 696 | | | +--ro ipv4 697 | | | | +--ro transport-address? union 698 | | | | +--ro hello-adjacencies* [adjacent-address] 699 | | | | +--ro adjacent-address inet:ipv4-address 700 | | | | +--ro flag* identityref 701 | | | | +--ro hello-holdtime 702 | | | | | +--ro adjacent? uint16 703 | | | | | +--ro negotiated? uint16 704 | | | | | +--ro remaining? uint16 705 | | | | +--ro next-hello? uint16 706 | | | | +--ro statistics 707 | | | | | +--ro discontinuity-time yang:date-and-time 708 | | | | | +--ro hello-received? yang:counter64 709 | | | | | +--ro hello-dropped? yang:counter64 710 | | | | +--ro peer? leafref 711 | | | +--ro ipv6 712 | | | +--ro transport-address? union 713 | | | +--ro hello-adjacencies* [adjacent-address] 714 | | | +--ro adjacent-address inet:ipv6-address 715 | | | +--ro flag* identityref 716 | | | +--ro hello-holdtime 717 | | | | +--ro adjacent? uint16 718 | | | | +--ro negotiated? uint16 719 | | | | +--ro remaining? uint16 720 | | | +--ro next-hello? uint16 721 | | | +--ro statistics 722 | | | | +--ro discontinuity-time yang:date-and-time 723 | | | | +--ro hello-received? yang:counter64 724 | | | | +--ro hello-dropped? yang:counter64 725 | | | +--ro peer? leafref 726 | | +--rw targeted 727 | | +--ro state 728 | | | +--ro hello-holdtime? uint16 729 | | | +--ro hello-interval? uint16 730 | | | +--ro hello-accept {policy-extended-discovery-config}? 731 | | | +--ro enable? boolean 732 | | | +--ro neighbor-list? neighbor-list-ref 733 | | +--rw address-family* [afi] 734 | | +--rw afi ldp-address-family 735 | | +--ro state 736 | | | +--ro ipv4 737 | | | | +--ro hello-adjacencies* [local-address adjacent-address] 738 | | | | +--ro local-address inet:ipv4-address 739 | | | | +--ro adjacent-address inet:ipv4-address 740 | | | | +--ro flag* identityref 741 | | | | +--ro hello-holdtime 742 | | | | | +--ro adjacent? uint16 743 | | | | | +--ro negotiated? uint16 744 | | | | | +--ro remaining? uint16 745 | | | | +--ro next-hello? uint16 746 | | | | +--ro statistics 747 | | | | | +--ro discontinuity-time yang:date-and-time 748 | | | | | +--ro hello-received? yang:counter64 749 | | | | | +--ro hello-dropped? yang:counter64 750 | | | | +--ro peer? leafref 751 | | | +--ro ipv6 752 | | | +--ro hello-adjacencies* [local-address adjacent-address] 753 | | | +--ro local-address inet:ipv6-address 754 | | | +--ro adjacent-address inet:ipv6-address 755 | | | +--ro flag* identityref 756 | | | +--ro hello-holdtime 757 | | | | +--ro adjacent? uint16 758 | | | | +--ro negotiated? uint16 759 | | | | +--ro remaining? uint16 760 | | | +--ro next-hello? uint16 761 | | | +--ro statistics 762 | | | | +--ro discontinuity-time yang:date-and-time 763 | | | | +--ro hello-received? yang:counter64 764 | | | | +--ro hello-dropped? yang:counter64 765 | | | +--ro peer? leafref 766 | | +--rw ipv4 767 | | | +--rw target* [adjacent-address] 768 | | | +--rw adjacent-address inet:ipv4-address 769 | | | +--ro state 770 | | | +--ro enable? boolean 771 | | | +--ro local-address? inet:ipv4-address 772 | | +--rw ipv6 773 | | +--rw target* [adjacent-address] 774 | | +--rw adjacent-address inet:ipv6-address 775 | | +--ro state 776 | | +--ro enable? boolean 777 | | +--ro local-address? inet:ipv6-address 778 | +--rw forwarding-nexthop {forwarding-nexthop-config}? 779 | | +--rw interfaces 780 | | +--rw interface* [interface] 781 | | +--rw interface mpls-interface-ref 782 | | +--rw address-family* [afi] 783 | | +--rw afi ldp-address-family 784 | | +--ro state 785 | | +--ro ldp-disable? boolean 786 +--rw peers 787 +--ro state 788 | +--ro session-authentication-md5-password? string 789 | +--ro session-ka-holdtime? uint16 790 | +--ro session-ka-interval? uint16 791 | +--ro session-downstream-on-demand {session-downstream-on-demand-config}? 792 | +--ro enable? boolean 793 | +--ro peer-list? peer-list-ref 794 +--rw peer* [lsr-id] 795 +--rw lsr-id yang:dotted-quad 796 +--ro state 797 +--ro admin-down? boolean 798 +--ro capability 799 +--ro label-policy 800 | +--ro advertise 801 | | +--ro prefix-list? prefix-list-ref 802 | +--ro accept 803 | +--ro prefix-list? prefix-list-ref 804 +--ro session-authentication-md5-password? string 805 +--ro graceful-restart 806 | +--ro enable? boolean 807 | +--ro reconnect-time? uint16 808 | +--ro recovery-time? uint16 809 +--ro session-ka-holdtime? uint16 810 +--ro session-ka-interval? uint16 811 +--ro address-family 812 | +--ro ipv4 813 | | +--ro label-policy 814 | | | +--ro advertise 815 | | | | +--ro prefix-list? prefix-list-ref 816 | | | +--ro accept 817 | | | +--ro prefix-list? prefix-list-ref 818 | | +--ro hello-adjacencies* [local-address adjacent-address] 819 | | +--ro local-address inet:ipv4-address 820 | | +--ro adjacent-address inet:ipv4-address 821 | | +--ro flag* identityref 822 | | +--ro hello-holdtime 823 | | | +--ro adjacent? uint16 824 | | | +--ro negotiated? uint16 825 | | | +--ro remaining? uint16 826 | | +--ro next-hello? uint16 827 | | +--ro statistics 828 | | | +--ro discontinuity-time yang:date-and-time 829 | | | +--ro hello-received? yang:counter64 830 | | | +--ro hello-dropped? yang:counter64 831 | | +--ro interface? mpls-interface-ref 832 | +--ro ipv6 833 | +--ro label-policy 834 | | +--ro advertise 835 | | | +--ro prefix-list? prefix-list-ref 836 | | +--ro accept 837 | | +--ro prefix-list? prefix-list-ref 838 | +--ro hello-adjacencies* [local-address adjacent-address] 839 | +--ro local-address inet:ipv6-address 840 | +--ro adjacent-address inet:ipv6-address 841 | +--ro flag* identityref 842 | +--ro hello-holdtime 843 | | +--ro adjacent? uint16 844 | | +--ro negotiated? uint16 845 | | +--ro remaining? uint16 846 | +--ro next-hello? uint16 847 | +--ro statistics 848 | | +--ro discontinuity-time yang:date-and-time 849 | | +--ro hello-received? yang:counter64 850 | | +--ro hello-dropped? yang:counter64 851 | +--ro interface? mpls-interface-ref 852 +--ro label-advertisement-mode 853 | +--ro local? label-adv-mode 854 | +--ro peer? label-adv-mode 855 | +--ro negotiated? label-adv-mode 856 +--ro next-keep-alive? uint16 857 +--ro peer-ldp-id? yang:dotted-quad 858 +--ro received-peer-state 859 | +--ro graceful-restart 860 | | +--ro enable? boolean 861 | | +--ro reconnect-time? uint16 862 | | +--ro recovery-time? uint16 863 | +--ro capability 864 | +--ro end-of-lib 865 | | +--ro enable? boolean 866 | +--ro typed-wildcard-fec 867 | | +--ro enable? boolean 868 | +--ro upstream-label-assignment 869 | +--ro enable? boolean 870 +--ro session-holdtime 871 | +--ro peer? uint16 872 | +--ro negotiated? uint16 873 | +--ro remaining? uint16 874 +--ro session-state? enumeration 875 +--ro tcp-connection 876 | +--ro local-address? inet:ip-address 877 | +--ro local-port? inet:port-number 878 | +--ro remote-address? inet:ip-address 879 | +--ro remote-port? inet:port-number 880 +--ro up-time? string 881 +--ro statistics 882 +--ro discontinuity-time yang:date-and-time 883 +--ro received 884 | +--ro total-octets? yang:counter64 885 | +--ro total-messages? yang:counter64 886 | +--ro address? yang:counter64 887 | +--ro address-withdraw? yang:counter64 888 | +--ro initialization? yang:counter64 889 | +--ro keepalive? yang:counter64 890 | +--ro label-abort-request? yang:counter64 891 | +--ro label-mapping? yang:counter64 892 | +--ro label-release? yang:counter64 893 | +--ro label-request? yang:counter64 894 | +--ro label-withdraw? yang:counter64 895 | +--ro notification? yang:counter64 896 +--ro sent 897 | +--ro total-octets? yang:counter64 898 | +--ro total-messages? yang:counter64 899 | +--ro address? yang:counter64 900 | +--ro address-withdraw? yang:counter64 901 | +--ro initialization? yang:counter64 902 | +--ro keepalive? yang:counter64 903 | +--ro label-abort-request? yang:counter64 904 | +--ro label-mapping? yang:counter64 905 | +--ro label-release? yang:counter64 906 | +--ro label-request? yang:counter64 907 | +--ro label-withdraw? yang:counter64 908 | +--ro notification? yang:counter64 909 +--ro total-addresses? uint32 910 +--ro total-labels? uint32 911 +--ro total-fec-label-bindings? uint32 912 Figure 5 914 3.3.1. Derived States 916 Following are main areas for which LDP operational "derived" state is 917 defined: 919 Neighbor Adjacencies 921 Peer 923 Bindings (FEC-label and address) 925 Capabilities 927 3.3.1.1. Adjacency state 929 Neighbor adjacencies are per address-family hello adjacencies that 930 are formed with neighbors as result of LDP basic or extended 931 discovery. In terms of organization, there is a source of discovery 932 (e.g. interface or target address) along with its associated 933 parameters and one or more discovered neighbors along with neighbor 934 discovery related parameters. For the basic discovery, there could 935 be more than one discovered neighbor for a given source (interface), 936 whereas there is at most one discovered neighbor for an extended 937 discovery source (local-address and target-address). This is also to 938 be noted that the reason for a targeted neighbor adjacency could be 939 either an active source (locally configured targeted) or passive 940 source (to allow any incoming extended/targeted hellos). A neighbor/ 941 adjacency record also contains session-state that helps highlight 942 whether a given adjacency has progressed to subsequent session level 943 or to eventual peer level. 945 Following captures high level tree hierarchy for neighbor adjacency 946 state. 948 +--rw mpls-ldp! 949 +--rw discovery 950 +--rw interfaces 951 | +--rw interface* [interface] 952 | +--rw address-family* [af] 953 | +--ro state 954 | +--ro ipv4 (or ipv6) 955 | +--ro hello-adjacencies* [adjacent-address] 956 | +--ro adjacent-address 957 | . . . . 958 | . . . . 959 +--rw targeted 960 +--rw address-family* [afi] 961 +--rw afi address-family 962 +--ro state 963 +--ro ipv4 (or ipv6) 964 +--ro hello-adjacencies* [local-address adjacent-address] 965 +--ro local-address 966 +--ro adjacent-address 967 . . . . 968 . . . . 970 Figure 6 972 3.3.1.2. Peer state 974 Peer related derived state is presented under peers tree. This is 975 one of the core state that provides info on the session related 976 parameters (mode, authentication, KA timeout etc.), TCP connection 977 info, hello adjacencies for the peer, statistics related to messages 978 and bindings, and capabilities exchange info. 980 Following captures high level tree hierarchy for peer state. 982 +--rw mpls-ldp! 983 +--rw peers 984 +--rw peer* [lsr-id] 985 +--rw lsr-id 986 +--ro state 987 +--ro session-ka-holdtime? 988 +-- . . . . 989 +-- . . . . 990 +--ro capability 991 + +ro -- . . . 992 +--ro address-family 993 | +--ro ipv4 (or ipv6) 994 | +--ro hello-adjacencies* [local-address adjacent-address] 995 | . . . . 996 | . . . . 997 +--ro received-peer-state 998 | +--ro . . . . 999 | +--ro capability 1000 | +--ro . . . . 1001 +--ro statistics 1002 +-- . . . . 1003 +-- . . . . 1005 Figure 7 1007 3.3.1.3. Bindings state 1009 Binding state provides information on LDP FEC-label bindings as well 1010 as address binding for both inbound (received) as well as outbound 1011 (advertised) direction. FEC-label bindings are presented as a FEC- 1012 centric view, and address bindings are presented as an address- 1013 centric view: 1015 FEC-Label bindings: 1016 FEC 200.1.1.1/32: 1017 advertised: local-label 16000 1018 peer 192.168.0.2:0 1019 peer 192.168.0.3:0 1020 peer 192.168.0.4:0 1021 received: 1022 peer 192.168.0.2:0, label 16002, used-in-forwarding=Yes 1023 peer 192.168.0.3:0, label 17002, used-in-forwarding=No 1024 FEC 200.1.1.2/32: 1025 . . . . 1026 FEC 201.1.0.0/16: 1027 . . . . 1029 Address bindings: 1030 Addr 1.1.1.1: 1031 advertised 1032 Addr 1.1.1.2: 1033 advertised 1034 Addr 2.2.2.2: 1035 received, peer 192.168.0.2 1036 Addr 2.2.2.22: 1037 received, peer 192.168.0.2 1038 Addr 3.3.3.3: 1039 received, peer 192.168.0.3 1040 Addr 3.3.3.33: 1041 received, peer 192.168.0.3 1043 Figure 8 1045 Note that all local addresses are advertised to all peers and hence 1046 no need to provide per-peer information for local address 1047 advertisement. Furthermore, note that it is easy to derive a peer- 1048 centric view for the bindings from the information already provided 1049 in this model. 1051 Following captures high level tree hierarchy for bindings state. 1053 +--rw mpls-ldp! 1054 +--rw global 1055 +--rw address-family* [afi] 1056 +--rw afi address-family 1057 +--ro state 1058 +--ro ipv4 (or ipv6) 1059 +--ro bindings 1060 +--ro address* [address] 1061 | +--ro address 1062 | +--ro direction? advertised-received 1063 | +--ro peer? leafref 1064 +--ro fec-label* [fec] 1065 +--ro fec inet:ipv4-prefix 1066 +--ro peer* [peer advertisement-type] 1067 +--ro peer leafref 1068 +--ro advertisement-type advertised-received 1069 +--ro label? mpls:mpls-label 1070 +--ro used-in-forwarding? boolean 1072 Figure 9 1074 3.3.1.4. Capabilities state 1076 LDP capabilities state comprise two types of information - global 1077 information (such as timer etc.), and per-peer information. 1079 Following captures high level tree hierarchy for LDP capabilities 1080 state. 1082 +--rw mpls-ldp! 1083 +--rw global 1084 | +--ro state 1085 | +--ro capability 1086 | +--ro . . . . 1087 | +--ro . . . . 1088 +--rw peers 1089 +--rw peer* [lsr-id] 1090 +--rw lsr-id yang:dotted-quad 1091 +--ro state 1092 +--ro received-peer-state 1093 +--ro capability 1094 +--ro . . . . 1095 +--ro . . . . 1097 Figure 10 1099 3.4. Notifications 1101 This model defines a list of notifications to inform client of 1102 important events detected during the protocol operation. These 1103 events include events related to changes in the operational state of 1104 an LDP peer, hello adjacency, and FEC etc. It is to be noted that an 1105 LDP FEC is treated as operational (up) as long as it has at least 1 1106 NHLFE with outgoing label. 1108 Following is a simplified graphical representation of the data model 1109 for LDP notifications. 1111 module: ietf-mpls-ldp 1112 notifications: 1113 +---n mpls-ldp-peer-event 1114 | +--ro event-type? oper-status-event-type 1115 | +--ro peer-ref? leafref 1116 +---n mpls-ldp-hello-adjacency-event 1117 | +--ro event-type? oper-status-event-type 1118 | +--ro (hello-adjacency-type)? 1119 | +--:(targeted) 1120 | | +--ro targeted 1121 | | +--ro target-address? inet:ip-address 1122 | +--:(link) 1123 | +--ro link 1124 | +--ro next-hop-interface? mpls-interface-ref 1125 | +--ro next-hop-address? inet:ip-address 1126 +---n mpls-ldp-fec-event 1127 +--ro event-type? oper-status-event-type 1128 +--ro prefix? inet:ip-prefix 1130 Figure 11 1132 3.5. Actions 1134 This model defines a list of rpcs that allow performing an action or 1135 executing a command on the protocol. For example, it allows to clear 1136 (reset) LDP peers, hello-adjacencies, and statistics. The model 1137 makes an effort to provide different level of control so that a user 1138 is able to either clear all, or clear all for a given type, or clear 1139 a specific entity. 1141 Following is a simplified graphical representation of the data model 1142 for LDP actions. 1144 module: ietf-mpls-ldp 1145 rpcs: 1146 +---x mpls-ldp-clear-peer 1147 | +---w input 1148 | +---w lsr-id? union 1149 +---x mpls-ldp-clear-hello-adjacency 1150 | +---w input 1151 | +---w hello-adjacency 1152 | +---w (hello-adjacency-type)? 1153 | +--:(targeted) 1154 | | +---w targeted! 1155 | | +---w target-address? inet:ip-address 1156 | +--:(link) 1157 | +---w link! 1158 | +---w next-hop-interface? mpls-interface-ref 1159 | +---w next-hop-address? inet:ip-address 1160 +---x mpls-ldp-clear-peer-statistics 1161 +---w input 1162 +---w lsr-id? union 1164 Figure 12 1166 4. mLDP YANG Model 1168 4.1. Overview 1170 Due to tight dependency of mLDP on LDP, mLDP model builds on top of 1171 LDP model defined earlier in the document. Following are the main 1172 mLDP areas and documents that are within the scope of this model: 1174 o mLDP Base Specification [RFC6388] 1176 o mLDP Recursive FEC [RFC6512] 1178 o Targeted mLDP [RFC7060] 1180 o mLDP Fast-Reroute (FRR) 1182 * Node Protection [RFC7715] 1184 * Multicast-only 1186 o Hub-and-Spoke Multipoint LSPs [RFC7140] 1188 o mLDP In-band Signaling [RFC6826] (future revision) 1190 o mLDP In-band signaling in a VRF [RFC7246] 1191 o mLDP In-band Signaling with Wildcards [RFC7438] (future revision) 1193 o Configured Leaf LSPs (manually provisioned) 1195 [Ed Note: Some of the topics in the above list are to be addressed/ 1196 added in later revision of this document]. 1198 4.2. Configuration 1200 4.2.1. Configuration Hierarchy 1202 In terms of overall configuration layout, following figure highlights 1203 extensions to LDP configuration model to incorporate mLDP: 1205 +-- mpls-ldp 1206 +-- ... 1207 +-- ... 1208 +-- mldp 1209 | +-- ... 1210 | +-- ... 1211 | +-- address-family* [af] 1212 | +-- af 1213 | +-- ... 1214 | +-- ... 1215 +-- global 1216 | +-- ... 1217 | +-- capability 1218 | +-- ... 1219 | +-- ... 1220 | +-- mldp 1221 | +-- ... 1222 | +-- ... 1223 +-- discovery 1224 | +-- ... 1225 | +-- ... 1226 +-- forwarding-nexthop 1227 | +-- interfaces 1228 | +-- interface* [interface] 1229 | +-- interface 1230 | +-- address-family* [af] 1231 | +-- af 1232 | +-- ... 1233 | +-- mldp-disable 1234 +-- peers 1235 +-- ... 1236 +-- ... 1237 +-- peer* [lsr-id] 1238 +-- ... 1239 +-- ... 1240 +-- capability 1241 +-- ... 1242 +-- ... 1243 +-- mldp 1244 +-- ... 1245 +-- ... 1247 Figure 13 1249 From above hierarchy, we can categorize mLDP configuration parameters 1250 into two types: 1252 o Parameters that leverage/extend LDP containers and parameters 1254 o Parameters that are mLDP specific 1256 Following subsections first describe mLDP specific configuration 1257 parameters, followed by those leveraging LDP. 1259 4.2.2. mldp container 1261 mldp container resides directly under "mpls-ldp" and holds the 1262 configuration related to items that are mLDP specific. The main 1263 items under this container are: 1265 o mLDP enabling: To enable mLDP under a (VRF) routing instance, mldp 1266 container is enabled under LDP. Given that mLDP requires LDP 1267 signalling, it is not sensible to allow disabling LDP control 1268 plane under a (VRF) network-instance while requiring mLDP to be 1269 enabled for the same. However, if a user wishes only to allow 1270 signalling for multipoint FECs on an LDP/mLDP enabled VRF 1271 instance, he/she can use LDP label-policies to disable unicast 1272 FECs under the VRF. 1274 o mLDP per-AF features: mLDP manages its own list of IP address- 1275 families and the features enabled underneath. The per-AF mLDP 1276 configuration items include: 1278 * Multicast-only FRR: This enables Multicast-only FRR 1279 functionality for a given AF under mLDP. The feature allows 1280 route-policy to be configured for finer control/applicability 1281 of the feature. 1283 * Recursive FEC: The recursive-fec feature [RFC6512] can be 1284 enabled per AF with a route-policy. 1286 * Configured Leaf LSPs: To provision multipoint leaf LSP 1287 manually, a container is provided per-AF under LDP. The 1288 configuration is flexible and allows a user to specify MP LSPs 1289 of type p2mp or mp2mp with IPv4 or IPv6 root address(es) by 1290 using either LSP-Id or (S,G). 1292 Targeted mLDP feature specification [RFC7060] do not require any mLDP 1293 specific configuration. It, however, requires LDP upstream-label- 1294 assignment capability [RFC6389] to be enabled. 1296 4.2.3. Leveraging LDP containers 1298 mLDP configuration model leverages following configuration areas and 1299 containers that are already defined for LDP: 1301 o Capabilities: A new container "mldp" is defined under Capabilities 1302 container. This new container specifies any mLDP specific 1303 capabilities and their parameters. Moreover, a new "mldp" 1304 container is also added under per-peer capability container to 1305 override/control mLDP specific capabilities on a peer level. In 1306 the scope of this document, the most important capabilities 1307 related to mLDP are p2mp, mp2mp, make-before-break, hub-and-spoke, 1308 and node-protection. 1310 o Discovery and Peer: mLDP requires LDP discovery and peer 1311 procedures to form mLDP peering. A peer is treated as mLDP peer 1312 only when either P2MP or MP2MP capabilities have been successfully 1313 exchanged with the peer. If a user wish to selectively enable or 1314 disable mLDP with a LDP-enabled peer, he/she may use per-peer mLDP 1315 capabilities configuration. [Ed Note: The option to control mLDP 1316 enabling/disabling on a peer-list is being explored for future ]. 1317 In most common deployments, it is desirable to disable mLDP 1318 (capabilities announcements) on a targeted-only LDP peering, where 1319 targeted-only peer is the one whose discovery sources are targeted 1320 only. In future revision, a configuration option for this support 1321 will also be provided. 1323 o Forwarding: By default, mLDP is allowed to select any of the LDP 1324 enabled interface as a downstream interface towards a nexthop 1325 (LDP/mLDP peer) for MP LSP programming. However, a configuration 1326 option is provided to allow mLDP to exclude a given interface from 1327 such a selection. Note that such a configuration option will be 1328 useful only when there are more than one interfaces available for 1329 the downstream selection. 1331 This goes without saying that mLDP configuration tree follows the 1332 same approach as LDP, where the tree comprise leafs for intended 1333 configuration. 1335 4.2.4. YANG tree 1337 The following figure captures the YANG tree for mLDP configuration. 1338 To keep the focus, the figure has been simplified to display only 1339 mLDP items without any LDP items. 1341 module: ietf-mpls-ldp 1342 augment /rt:routing/rt:control-plane-protocols: 1343 +--rw mpls-ldp! 1344 +--rw global 1345 | +--rw config 1346 | | +--rw capability 1347 | | +--rw mldp {mldp}? 1348 | | +--rw p2mp 1349 | | | +--rw enable? boolean 1350 | | +--rw mp2mp 1351 | | | +--rw enable? boolean 1352 | | +--rw make-before-break 1353 | | | +--rw enable? boolean 1354 | | | +--rw switchover-delay? uint16 1355 | | | +--rw timeout? uint16 1356 | | +--rw hub-and-spoke {capability-mldp-hsmp}? 1357 | | | +--rw enable? boolean 1358 | | +--rw node-protection {capability-mldp-node-protection}? 1359 | | +--rw plr? boolean 1360 | | +--rw merge-point 1361 | | +--rw enable? boolean 1362 | | +--rw targeted-session-teardown-delay? uint16 1363 | +--rw mldp {mldp}? 1364 | | +--rw config 1365 | | | +--rw enable? boolean 1366 | | +--rw address-family* [afi] 1367 | | +--rw afi ldp-address-family 1368 | | +--rw config 1369 | | | +--rw multicast-only-frr {mldp-mofrr}? 1370 | | | | +--rw prefix-list? prefix-list-ref 1371 | | | +--rw recursive-fec 1372 | | | +--rw prefix-list? prefix-list-ref 1373 | | +--rw configured-leaf-lsps 1374 | | +--rw p2mp 1375 | | | +--rw roots-ipv4 1376 | | | | +--rw root* [root-address] 1377 | | | | +--rw root-address inet:ipv4-address 1378 | | | | +--rw lsp* [lsp-id source-address group-address] 1379 | | | | +--rw lsp-id uint16 1380 | | | | +--rw source-address inet:ipv4-address 1381 | | | | +--rw group-address inet:ipv4-address-no-zone 1382 | | | +--rw roots-ipv6 1383 | | | +--rw root* [root-address] 1384 | | | +--rw root-address inet:ipv6-address 1385 | | | +--rw lsp* [lsp-id source-address group-address] 1386 | | | +--rw lsp-id uint16 1387 | | | +--rw source-address inet:ipv6-address 1388 | | | +--rw group-address inet:ipv6-address-no-zone 1389 | | +--rw mp2mp 1390 | | +--rw roots-ipv4 1391 | | | +--rw root* [root-address] 1392 | | | +--rw root-address inet:ipv4-address 1393 | | | +--rw lsp* [lsp-id source-address group-address] 1394 | | | +--rw lsp-id uint16 1395 | | | +--rw source-address inet:ipv4-address 1396 | | | +--rw group-address inet:ipv4-address-no-zone 1397 | | +--rw roots-ipv6 1398 | | +--rw root* [root-address] 1399 | | +--rw root-address inet:ipv6-address 1400 | | +--rw lsp* [lsp-id source-address group-address] 1401 | | +--rw lsp-id uint16 1402 | | +--rw source-address inet:ipv6-address 1403 | | +--rw group-address inet:ipv6-address-no-zone 1404 | +--rw forwarding-nexthop {forwarding-nexthop-config}? 1405 | +--rw interfaces 1406 | +--rw interface* [interface] 1407 | +--rw interface if:interface-ref 1408 | +--rw address-family* [afi] 1409 | +--rw afi address-family 1410 | +--rw config 1411 | +--rw mldp-disable? boolean {mldp}? 1412 +--rw peers 1413 +--rw peer* [lsr-id] 1414 +--rw capability 1415 +--rw mldp {mldp}? 1416 +--rw p2mp 1417 | +--rw enable? boolean 1418 +--rw mp2mp 1419 | +--rw enable? boolean 1420 +--rw make-before-break 1421 | +--rw enable? boolean 1422 | +--rw switchover-delay? uint16 1423 | +--rw timeout? uint16 1424 +--rw hub-and-spoke {capability-mldp-hsmp}? 1425 | +--rw enable? boolean 1426 +--rw node-protection {capability-mldp-node-protection}? 1427 +--rw plr? boolean 1428 +--rw merge-point 1429 +--rw enable? boolean 1430 +--rw targeted-session-teardown-delay? uint16 1432 Figure 14 1434 4.3. Operational State 1436 Operational state of mLDP can be queried and obtained from this read- 1437 only container "mldp" which resides under mpls-ldp container. 1439 Please note this state tree refers both the configuration "applied" 1440 state as well as the "derived" state related to the mLDP protocol. 1442 Following is a simplified graphical representation of the data model 1443 for mLDP operational state: 1445 module: ietf-mpls-ldp 1446 augment /rt:routing/rt:control-plane-protocols: 1447 +--rw mpls-ldp! 1448 +--rw global 1449 | +--ro state 1450 | | +--ro capability 1451 | | +--ro mldp {mldp}? 1452 | | +--ro p2mp 1453 | | | +--ro enable? boolean 1454 | | +--ro mp2mp 1455 | | | +--ro enable? boolean 1456 | | +--ro make-before-break 1457 | | | +--ro enable? boolean 1458 | | | +--ro switchover-delay? uint16 1459 | | | +--ro timeout? uint16 1460 | | +--ro hub-and-spoke {capability-mldp-hsmp}? 1461 | | | +--ro enable? boolean 1462 | | +--ro node-protection {capability-mldp-node-protection}? 1463 | | +--ro plr? boolean 1464 | | +--ro merge-point 1465 | | +--ro enable? boolean 1466 | | +--ro targeted-session-teardown-delay? uint16 1467 | | 1468 | +--rw mldp {mldp}? 1469 | | +--ro state 1470 | | +--ro enable? boolean 1471 | | +--rw address-family* [afi] 1472 | | +--rw afi ldp-address-family 1473 | | +--ro state 1474 | | +--ro multicast-only-frr {mldp-mofrr}? 1475 | | | +--ro prefix-list? prefix-list-ref 1476 | | +--ro recursive-fec 1477 | | | +--ro prefix-list? prefix-list-ref 1478 | | +--ro ipv4 1479 | | | +--ro roots 1480 | | | | +--ro root* [root-address] 1481 | | | | +--ro root-address inet:ipv4-address 1482 | | | | +--ro is-self? boolean 1483 | | | | +--ro reachability* [address interface] 1484 | | | | +--ro address inet:ipv4-address 1485 | | | | +--ro interface mpls-interface-ref 1486 | | | | +--ro peer? leafref 1487 | | | +--ro bindings 1488 | | | +--ro opaque-type-lspid 1489 | | | | +--ro fec-label* [root-address lsp-id recur-root-address recur-rd] 1490 | | | | +--ro root-address inet:ipv4-address 1491 | | | | +--ro lsp-id uint32 1492 | | | | +--ro recur-root-address inet:ip-address 1493 | | | | +--ro recur-rd route-distinguisher 1494 | | | | +--ro multipoint-type? multipoint-type 1495 | | | | +--ro peer* [direction peer advertisement-type] 1496 | | | | +--ro direction downstream-upstream 1497 | | | | +--ro peer leafref 1498 | | | | +--ro advertisement-type advertised-received 1499 | | | | +--ro label? mpls:mpls-label 1500 | | | | +--ro mbb-role? enumeration 1501 | | | | +--ro mofrr-role? enumeration 1502 | | | +--ro opaque-type-src 1503 | | | | +--ro fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 1504 | | | | +--ro root-address inet:ipv4-address 1505 | | | | +--ro source-address inet:ip-address 1506 | | | | +--ro group-address inet:ip-address-no-zone 1507 | | | | +--ro rd route-distinguisher 1508 | | | | +--ro recur-root-address inet:ip-address 1509 | | | | +--ro recur-rd route-distinguisher 1510 | | | | +--ro multipoint-type? multipoint-type 1511 | | | | +--ro peer* [direction peer advertisement-type] 1512 | | | | +--ro direction downstream-upstream 1513 | | | | +--ro peer leafref 1514 | | | | +--ro advertisement-type advertised-received 1515 | | | | +--ro label? mpls:mpls-label 1516 | | | | +--ro mbb-role? enumeration 1517 | | | | +--ro mofrr-role? enumeration 1518 | | | +--ro opaque-type-bidir 1519 | | | +--ro fec-label* [root-address rp group-address rd recur-root-address recur-rd] 1520 | | | +--ro root-address inet:ipv4-address 1521 | | | +--ro rp inet:ip-address 1522 | | | +--ro group-address inet:ip-address-no-zone 1523 | | | +--ro rd route-distinguisher 1524 | | | +--ro recur-root-address inet:ip-address 1525 | | | +--ro recur-rd route-distinguisher 1526 | | | +--ro multipoint-type? multipoint-type 1527 | | | +--ro peer* [direction peer advertisement-type] 1528 | | | +--ro direction downstream-upstream 1529 | | | +--ro peer leafref 1530 | | | +--ro advertisement-type advertised-received 1531 | | | +--ro label? mpls:mpls-label 1532 | | | +--ro mbb-role? enumeration 1533 | | | +--ro mofrr-role? enumeration 1534 | | +--ro ipv6 1535 | | +--ro roots 1536 | | | +--ro root* [root-address] 1537 | | | +--ro root-address inet:ipv6-address 1538 | | | +--ro is-self? boolean 1539 | | | +--ro reachability* [address interface] 1540 | | | +--ro address inet:ipv6-address 1541 | | | +--ro interface mpls-interface-ref 1542 | | | +--ro peer? leafref 1543 | | +--ro bindings 1544 | | +--ro opaque-type-lspid 1545 | | | +--ro fec-label* [root-address lsp-id recur-root-address recur-rd] 1546 | | | +--ro root-address inet:ipv6-address 1547 | | | +--ro lsp-id uint32 1548 | | | +--ro recur-root-address inet:ip-address 1549 | | | +--ro recur-rd route-distinguisher 1550 | | | +--ro multipoint-type? multipoint-type 1551 | | | +--ro peer* [direction peer advertisement-type] 1552 | | | +--ro direction downstream-upstream 1553 | | | +--ro peer leafref 1554 | | | +--ro advertisement-type advertised-received 1555 | | | +--ro label? mpls:mpls-label 1556 | | | +--ro mbb-role? enumeration 1557 | | | +--ro mofrr-role? enumeration 1558 | | +--ro opaque-type-src 1559 | | | +--ro fec-label* [root-address source-address group-address rd recur-root-address recur-rd] 1560 | | | +--ro root-address inet:ipv6-address 1561 | | | +--ro source-address inet:ip-address 1562 | | | +--ro group-address inet:ip-address-no-zone 1563 | | | +--ro rd route-distinguisher 1564 | | | +--ro recur-root-address inet:ip-address 1565 | | | +--ro recur-rd route-distinguisher 1566 | | | +--ro multipoint-type? multipoint-type 1567 | | | +--ro peer* [direction peer advertisement-type] 1568 | | | +--ro direction downstream-upstream 1569 | | | +--ro peer leafref 1570 | | | +--ro advertisement-type advertised-received 1571 | | | +--ro label? mpls:mpls-label 1572 | | | +--ro mbb-role? enumeration 1573 | | | +--ro mofrr-role? enumeration 1574 | | +--ro opaque-type-bidir 1575 | | +--ro fec-label* [root-address rp group-address rd recur-root-address recur-rd] 1576 | | +--ro root-address inet:ipv6-address 1577 | | +--ro rp inet:ip-address 1578 | | +--ro group-address inet:ip-address-no-zone 1579 | | +--ro rd route-distinguisher 1580 | | +--ro recur-root-address inet:ip-address 1581 | | +--ro recur-rd route-distinguisher 1582 | | +--ro multipoint-type? multipoint-type 1583 | | +--ro peer* [direction peer advertisement-type] 1584 | | +--ro direction downstream-upstream 1585 | | +--ro peer leafref 1586 | | +--ro advertisement-type advertised-received 1587 | | +--ro label? mpls:mpls-label 1588 | | +--ro mbb-role? enumeration 1589 | | +--ro mofrr-role? enumeration 1590 | +--rw forwarding-nexthop {forwarding-nexthop-config}? 1591 | +--rw interfaces 1592 | +--rw interface* [interface] 1593 | +--rw address-family* [afi] 1594 | +--ro state 1595 | +--ro mldp-disable? boolean {mldp}? 1596 +--rw peers 1597 +--rw peer* [lsr-id] 1598 +--ro state 1599 +--ro capability 1600 | +--ro mldp {mldp}? 1601 | +--ro p2mp 1602 | | +--ro enable? boolean 1603 | +--ro mp2mp 1604 | | +--ro enable? boolean 1605 | +--ro make-before-break 1606 | | +--ro enable? boolean 1607 | | +--ro switchover-delay? uint16 1608 | | +--ro timeout? uint16 1609 | +--ro hub-and-spoke {capability-mldp-hsmp}? 1610 | | +--ro enable? boolean 1611 | +--ro node-protection {capability-mldp-node-protection}? 1612 | +--ro plr? boolean 1613 | +--ro merge-point 1614 | +--ro enable? boolean 1615 | +--ro targeted-session-teardown-delay? uint16 1616 +--ro received-peer-state 1617 +--ro capability 1618 +--ro mldp {mldp}? 1619 +--ro p2mp 1620 | +--ro enable? boolean 1621 +--ro mp2mp 1622 | +--ro enable? boolean 1623 +--ro make-before-break 1624 | +--ro enable? boolean 1625 +--ro hub-and-spoke 1626 | +--ro enable? boolean 1627 +--ro node-protection 1628 +--ro plr? boolean 1629 +--ro merge-point? boolean 1630 Figure 15 1632 4.3.1. Derived states 1634 Following are main areas for which mLDP operational derived state is 1635 defined: 1637 o Root 1639 o Bindings (FEC-label) 1641 o Capabilities 1643 4.3.1.1. Root state 1645 Root address is a fundamental construct for MP FEC bindings and LSPs. 1646 The root state provides information on all the known roots in a given 1647 address-familty, and their information on the root reachability (as 1648 learnt from RIB). In case of multi-path reachability to a root, the 1649 selection of upstream path is done on per-LSP basis at the time of 1650 LSP setup. Similarly, when protection mechanisms like MBB or MoFRR 1651 are in place, the path designation as active/standby or primary/ 1652 backup is also done on per LSP basis. It is to be noted that a given 1653 root can be shared amongst multiple P2MP and/or MP2MP LSPs. 1654 Moreover, an LSP can be signaled to more than one root for RNR 1655 purposes. 1657 The following diagram illustrates a root database on a branch/transit 1658 LSR: 1660 root 1.1.1.1: 1661 path1: 1662 RIB: GigEthernet 1/0, 12.1.0.2; 1663 LDP: peer 192.168.0.1:0 1664 path2: 1665 RIB: GigEthernet 2/0, 12.2.0.2; 1666 LDP: peer 192.168.0.3:0 1668 root 2.2.2.2: 1669 path1: 1670 RIB: 3.3.3.3; (NOTE: This is a recursive path) 1671 LDP: peer 192.168.0.3:0 (NOTE: T-mLDP peer) 1673 root 9.9.9.9: 1674 . . . . 1676 Figure 16 1678 A root entry on a root LSR itself will be presented as follows: 1680 root 9.9.9.9: 1681 is-self 1683 Figure 17 1685 4.3.1.2. Bindings state 1687 Binding state provides information on mLDP FEC-label bindings for 1688 both P2MP and MP2MP FEC types. Like LDP, the FEC-label binding 1689 derived state is presented in a FEC-centric view per address-family, 1690 and provides information on both inbound (received) and outbound 1691 (advertised) bindings. The FEC is presented as (root-address, 1692 opaque-type-data) and the direction (upstream or downstream) is 1693 picked with respect to root reachability. In case of MBB or/and 1694 MoFRR, the role of a given peer binding is also provided with respect 1695 to MBB (active or standby) or/and MoFRR (primary or backup). 1697 This document covers following type of opaque values with their keys 1698 in the operational model of mLDP bindings: 1700 +-------------------------+--------------------+------------+ 1701 | Opaque Type | Key | RFC | 1702 +-------------------------+--------------------+------------+ 1703 | Generic LSP Identifier | LSP Id | [RFC6388] | 1704 | Transit IPv4 Source | Source, Group | [RFC6826] | 1705 | Transit IPv6 Source | Source, Group | [RFC6826] | 1706 | Transit IPv4 Bidir | RP, Group | [RFC6826] | 1707 | Transit IPv6 Bidir | RP, Group | [RFC6826] | 1708 | Transit VPNv4 Source | Source, Group, RD | [RFC7246] | 1709 | Transit VPNv6 Source | Source, Group, RD | [RFC7246] | 1710 | Transit VPNv4 Bidir | RP, Group, RD | [RFC7246] | 1711 | Transit VPNv6 Bidir | RP, Group, RD | [RFC7246] | 1712 | Recursive Opaque | Root | [RFC6512] | 1713 | VPN-Recursive Opaque | Root, RD | [RFC6512] | 1714 +-------------------------+--------------------+------------+ 1716 Table 1: MP Opaque Types and keys 1718 It is to be noted that there are three basic types (LSP Id, Source, 1719 and Bidir) and then there are variants (VPN, recursive, VPN- 1720 recursive) on top of these basic types. 1722 Following captures high level tree hierarchy for mLDP bindings state: 1724 +--rw mpls-ldp! 1725 +--rw mldp 1726 +--rw address-family* [afi] 1727 +--rw afi address-family 1728 +--ro state 1729 +--ro ipv4 (or ipv6) 1730 +--ro bindings 1731 +--ro opaque-type-xxx [root-address, type-specific-key] 1732 +--ro root-address 1733 +--ro ... 1734 +--ro recur-root-address inet:ipv4-address 1735 +--ro recur-rd route-distinguisher 1736 +--ro multipoint-type? multipoint-type 1737 +--ro peer* [direction peer advertisement-type] 1738 +--ro direction downstream-upstream 1739 +--ro peer leafref 1740 +--ro advertisement-type advertised-received 1741 +--ro label? mpls:mpls-label 1742 +--ro mbb-role? enumeration 1743 +--ro mofrr-role? enumeration 1745 Figure 18 1747 In the above tree, the type-specific-key varies with the base type as 1748 listed in earlier Table 1. For example, if the opaque type is 1749 Generic LSP Identifier, then the type-specific-key will be a uint32 1750 value corresponding to the LSP. Please see the complete model for 1751 all other types. 1753 Moreover, the binding tree defines only three types of sub-trees 1754 (i.e. lspid, src, and bidir) which is able to map the respective 1755 variants (vpn, recursive, and vpn-recusrive) accordingly. For 1756 example, the key for opaque-type-src is [R, S, G, rd, recur-R, recur- 1757 RD], where basic type will specify (R, S,G,-, -, -), VPN type will 1758 specify (R, S,G, rd, -, -), recursive type will specify [R, S,G, -, 1759 recur-R, -] and VPN-recursive type will specify [R, S,G, -, recur-R, 1760 recur-rd]. 1762 It is important to take note of the following: 1764 o The address-family ipv4/ipv4 applies to "root" address in the mLDP 1765 binding tree. The other addresses (source, group, RP etc) do not 1766 have to be of the same address family type as the root. 1768 o The "recur-root-address" field applies to Recursive opaque type, 1769 and (recur-root-address, recur-rd) fields applies to VPN-Recursive 1770 opaque types as defined in [RFC6512] 1772 o In case of a recursive FEC, the address-family of the recur-root- 1773 address could be different than the address-family of the root 1774 address of original encapsulated MP FEC 1776 The following diagram illustrates the FEC-label binding information 1777 structure for a P2MP (Transit IPv4 Source type) LSP on a branch/ 1778 transit LSR: 1780 FEC (root 2.2.2.2, S=192.168.1.1, G=224.1.1.1): 1781 type: p2mp 1782 upstream: 1783 advertised: 1784 peer 192.168.0.1:0, label 16000 (local) 1785 downstream: 1786 received: 1787 peer 192.168.0.2:0, label 17000 (remote) 1788 peer 192.168.0.3:0, label 18000 (remote) 1790 Figure 19 1792 The following diagram illustrates the FEC-label binding information 1793 structure for a similar MP2MP LSP on a branch/transit LSR: 1795 FEC (root 2.2.2.2, RP=192.168.9.9, G=224.1.1.1): 1796 type: mp2mp 1797 upstream: 1798 advertised: 1799 peer 192.168.0.1:0, label 16000 (local) 1800 received: 1801 peer 192.168.0.1:0, label 17000 (remote) 1802 downstream: 1803 advertised: 1804 peer 192.168.0.2:0, label 16001 (local), MBB role=active 1805 peer 192.168.0.3:0, label 16002 (local), MBB role=standby 1806 received: 1807 peer 192.168.0.2:0, label 17001 (remote) 1808 peer 192.168.0.3:0, label 18001 (remote) 1810 Figure 20 1812 4.3.1.3. Capabilities state 1814 Like LDP, mLDP capabilities state comprise two types of information - 1815 global information and per-peer information. 1817 4.4. Notifications 1819 mLDP notification module consists of notification related to changes 1820 in the operational state of an mLDP FEC. Following is a simplified 1821 graphical representation of the data model for mLDP notifications: 1823 notifications: 1824 +---n mpls-mldp-fec-event 1825 +--ro event-type? oper-status-event-type 1826 +--ro tree-type? multipoint-type 1827 +--ro root? inet:ip-address 1828 +--ro (lsp-key-type)? 1829 +--:(lsp-id-based) 1830 | +--ro lsp-id? uint16 1831 +--:(source-group-based) 1832 +--ro source-address? inet:ip-address 1833 +--ro group-address? inet:ip-address 1835 Figure 21 1837 4.5. Actions 1839 Currently, no RPCs/actions are defined for mLDP. 1841 5. Open Items 1843 Following is a list of open items that are to be discussed and 1844 addressed in future revisions of this document: 1846 o Close on augmentation off "mpls" list in "ietf-mpls" defined in 1847 [I-D.saad-mpls-base-yang] 1849 o Align operational state modeling with other routing procols and 1850 [I-D.openconfig-netmod-opstate] 1852 o Complete the section on Protocol-centric implementations and all- 1853 vrfs 1855 o Specify default values for configuration parameters 1857 o Revisit and cut down on the scope of the document and number of 1858 features it is trying to cover 1860 o Split the model into a base and extended items 1862 o Add statistics for mLDP root LSPs and bindings 1864 o Extend the "Configured Leaf LSPs" for various type of opaque-types 1866 o Extend mLDP notifications for other types of opaque values as well 1868 o Close on single vs separate document for mLDP Yang 1870 6. YANG Specification 1872 Following are actual YANG definition for LDP and mLDP constructs 1873 defined earlier in the document. 1875 file "ietf-mpls-ldp@2016-07-08.yang" --> 1877 module ietf-mpls-ldp { 1878 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; 1879 // replace with IANA namespace when assigned 1880 prefix ldp; 1882 import ietf-inet-types { 1883 prefix "inet"; 1884 } 1886 import ietf-yang-types { 1887 prefix "yang"; 1888 } 1890 import ietf-interfaces { 1891 prefix "if"; 1892 } 1894 import ietf-ip { 1895 prefix "ip"; 1896 } 1898 import ietf-routing { 1899 prefix "rt"; 1900 } 1902 import ietf-mpls { 1903 prefix "mpls"; 1904 } 1906 organization 1907 "IETF MPLS Working Group"; 1908 contact 1909 "WG Web: 1910 WG List: 1912 WG Chair: Loa Andersson 1913 1915 WG Chair: Ross Callon 1916 1918 WG Chair: George Swallow 1919 1921 Editor: Kamran Raza 1922 1924 Editor: Rajiv Asati 1925 1927 Editor: Xufeng Liu 1928 1930 Editor: Santosh Esale 1931 1933 Editor: Xia Chen 1934 1936 Editor: Himanshu Shah 1937 "; 1939 description 1940 "This YANG module defines the essential components for the 1941 management of Multi-Protocol Label Switching (MPLS) Label 1942 Distribution Protocol (LDP) and Multipoint LDP (mLDP)."; 1944 revision 2016-07-08 { 1945 description 1946 "Initial revision."; 1947 reference 1948 "RFC XXXX: YANG Data Model for MPLS LDP and mLDP."; 1949 } 1951 /* 1952 * Features 1953 */ 1955 feature admin-down-config { 1956 description 1957 "This feature indicates that the system allows to configure 1958 administrative down on a VRF instance and a peer."; 1959 } 1961 feature all-af-policy-config { 1962 description 1963 "This feature indicates that the system allows to configure 1964 policies that are applied to all address families."; 1965 } 1967 feature capability-end-of-lib { 1968 description 1969 "This feature indicates that the system allows to configure 1970 LDP end-of-lib capability."; 1971 } 1973 feature capability-mldp-hsmp { 1974 description 1975 "This feature indicates that the system allows to configure 1976 mLDP hub-and-spoke-multipoint capability."; 1977 } 1978 feature capability-mldp-node-protection { 1979 description 1980 "This feature indicates that the system allows to configure 1981 mLDP node-protection capability."; 1982 } 1984 feature capability-typed-wildcard-fec { 1985 description 1986 "This feature indicates that the system allows to configure 1987 LDP typed-wildcard-fec capability."; 1988 } 1990 feature capability-upstream-label-assignment { 1991 description 1992 "This feature indicates that the system allows to configure 1993 LDP upstream label assignment capability."; 1994 } 1996 feature forwarding-nexthop-config { 1997 description 1998 "This feature indicates that the system allows to configure 1999 forwarding nexthop on interfaces."; 2000 } 2002 feature global-session-authentication { 2003 description 2004 "This feature indicates that the system allows to configure 2005 authentication at global level."; 2006 } 2008 feature graceful-restart-helper-mode { 2009 description 2010 "This feature indicates that the system supports graceful 2011 restart helper mode."; 2012 } 2014 feature mldp { 2015 description 2016 "This feature indicates that the system supports Multicast 2017 LDP (mLDP)."; 2018 } 2020 feature mldp-mofrr { 2021 description 2022 "This feature indicates that the system supports mLDP 2023 Multicast only FRR (MoFRR)."; 2024 } 2025 feature per-interface-timer-config { 2026 description 2027 "This feature indicates that the system allows to configure 2028 interface hello timers at the per-interface level."; 2029 } 2031 feature per-peer-graceful-restart-config { 2032 description 2033 "This feature indicates that the system allows to configure 2034 graceful restart at the per-peer level."; 2035 } 2037 feature per-peer-session-attributes-config { 2038 description 2039 "This feature indicates that the system allows to configure 2040 session attributes at the per-peer level."; 2041 } 2043 feature policy-extended-discovery-config { 2044 description 2045 "This feature indicates that the system allows to configure 2046 policies to control the acceptance of extended neighbor 2047 discovery hello messages."; 2048 } 2050 feature policy-label-assignment-config { 2051 description 2052 "This feature indicates that the system allows to configure 2053 policies to assign labels according to certain prefixes."; 2054 } 2056 feature policy-ordered-label-config { 2057 description 2058 "This feature indicates that the system allows to configure 2059 ordered label policies."; 2060 } 2062 feature session-downstream-on-demand-config { 2063 description 2064 "This feature indicates that the system allows to configure 2065 session downstream-on-demand"; 2066 } 2068 /* 2069 * Typedefs 2070 */ 2071 typedef ldp-address-family { 2072 type identityref { 2073 base rt:address-family; 2074 } 2075 description 2076 "LDP address family type."; 2077 } 2079 typedef duration32-inf { 2080 type union { 2081 type uint32; 2082 type enumeration { 2083 enum "infinite" { 2084 description "The duration is infinite."; 2085 } 2086 } 2087 } 2088 units seconds; 2089 description 2090 "Duration represented as 32 bit seconds with infinite."; 2091 } 2093 typedef advertised-received { 2094 type enumeration { 2095 enum advertised { 2096 description "Advertised information."; 2097 } 2098 enum received { 2099 description "Received information."; 2100 } 2101 } 2102 description 2103 "Received or advertised."; 2104 } 2106 typedef downstream-upstream { 2107 type enumeration { 2108 enum downstream { 2109 description "Downstream information."; 2110 } 2111 enum upstream { 2112 description "Upstream information."; 2113 } 2114 } 2115 description 2116 "Received or advertised."; 2117 } 2119 typedef label-adv-mode { 2120 type enumeration { 2121 enum downstream-unsolicited { 2122 description "Downstream Unsolicited."; 2123 } 2124 enum downstream-on-demand { 2125 description "Downstream on Demand."; 2126 } 2127 } 2128 description 2129 "Label Advertisement Mode."; 2130 } 2132 typedef mpls-interface-ref { 2133 type leafref { 2134 path "/rt:routing/mpls:mpls/mpls:interface/mpls:name"; 2135 } 2136 description 2137 "This type is used by data models that need to reference 2138 mpls interfaces."; 2139 } 2141 typedef multipoint-type { 2142 type enumeration { 2143 enum p2mp { 2144 description "Point to multipoint."; 2145 } 2146 enum mp2mp { 2147 description "Multipoint to multipoint."; 2148 } 2149 } 2150 description 2151 "p2mp or mp2mp."; 2152 } 2154 typedef neighbor-list-ref { 2155 type string; 2156 description 2157 "A type for a reference to a neighbor list."; 2158 } 2160 typedef peer-list-ref { 2161 type string; 2162 description 2163 "A type for a reference to a peer list."; 2164 } 2166 typedef prefix-list-ref { 2167 type string; 2168 description 2169 "A type for a reference to a prefix list."; 2170 } 2172 typedef oper-status-event-type { 2173 type enumeration { 2174 enum up { 2175 value 1; 2176 description 2177 "Operational status changed to up."; 2178 } 2179 enum down { 2180 value 2; 2181 description 2182 "Operational status changed to down."; 2183 } 2184 } 2185 description "Operational status event type for notifications."; 2186 } 2188 typedef route-distinguisher { 2189 type string { 2190 } 2191 description 2192 "Type definition for route distinguisher."; 2193 reference 2194 "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; 2195 } 2197 /* 2198 * Identities 2199 */ 2200 identity adjacency-flag-base { 2201 description "Base type for adjacency flags."; 2202 } 2204 identity adjacency-flag-active { 2205 base "adjacency-flag-base"; 2206 description 2207 "This adjacency is configured and actively created."; 2208 } 2210 identity adjacency-flag-passive { 2211 base "adjacency-flag-base"; 2212 description 2213 "This adjacency is not configured and passively accepted."; 2214 } 2216 /* 2217 * Groupings 2218 */ 2220 grouping adjacency-state-attributes { 2221 description 2222 "Adjacency state attributes."; 2224 leaf-list flag { 2225 type identityref { 2226 base "adjacency-flag-base"; 2227 } 2228 description "Adjacency flags."; 2229 } 2230 container hello-holdtime { 2231 description "Hello holdtime state."; 2232 leaf adjacent { 2233 type uint16; 2234 units seconds; 2235 description "Peer holdtime."; 2236 } 2237 leaf negotiated { 2238 type uint16; 2239 units seconds; 2240 description "Negotiated holdtime."; 2241 } 2242 leaf remaining { 2243 type uint16; 2244 units seconds; 2245 description "Remaining holdtime."; 2246 } 2247 } 2249 leaf next-hello { 2250 type uint16; 2251 units seconds; 2252 description "Time to send the next hello message."; 2253 } 2255 container statistics { 2256 description 2257 "Statistics objects."; 2259 leaf discontinuity-time { 2260 type yang:date-and-time; 2261 mandatory true; 2262 description 2263 "The time on the most recent occasion at which any one or 2264 more of this interface's counters suffered a 2265 discontinuity. If no such discontinuities have occurred 2266 since the last re-initialization of the local management 2267 subsystem, then this node contains the time the local 2268 management subsystem re-initialized itself."; 2269 } 2271 leaf hello-received { 2272 type yang:counter64; 2273 description 2274 "The number of hello messages received."; 2275 } 2276 leaf hello-dropped { 2277 type yang:counter64; 2278 description 2279 "The number of hello messages received."; 2280 } 2281 } // statistics 2282 } // adjacency-state-attributes 2284 grouping basic-discovery-timers { 2285 description 2286 "Basic discovery timer attributes."; 2287 leaf hello-holdtime { 2288 type uint16 { 2289 range 15..3600; 2290 } 2291 units seconds; 2292 description 2293 "The time interval for which a LDP link Hello adjacency 2294 is maintained in the absence of link Hello messages from 2295 the LDP neighbor"; 2296 } 2297 leaf hello-interval { 2298 type uint16 { 2299 range 5..1200; 2300 } 2301 units seconds; 2302 description 2303 "The interval between consecutive LDP link Hello messages 2304 used in basic LDP discovery"; 2305 } 2306 } // basic-discovery-timers 2308 grouping binding-address-state-attributes { 2309 description 2310 "Address binding attributes"; 2311 leaf advertisement-type { 2312 type advertised-received; 2313 description 2314 "Received or advertised."; 2315 } 2316 leaf peer { 2317 type leafref { 2318 path "../../../../../../../peers/peer/lsr-id"; 2319 } 2320 must "../advertisement-type = 'received'" { 2321 description 2322 "Applicable for received address."; 2323 } 2324 description 2325 "LDP peer from which this address is received."; 2326 } // peer 2327 } // binding-address-state-attributes 2329 grouping binding-label-state-attributes { 2330 description 2331 "Label binding attributes"; 2332 list peer { 2333 key "peer advertisement-type"; 2334 description 2335 "List of advertised and received peers."; 2336 leaf peer { 2337 type leafref { 2338 path "../../../../../../../../peers/peer/lsr-id"; 2339 } 2340 description 2341 "LDP peer from which this binding is received, 2342 or to which this binding is advertised."; 2343 } 2344 leaf advertisement-type { 2345 type advertised-received; 2346 description 2347 "Received or advertised."; 2348 } 2349 leaf label { 2350 type mpls:mpls-label; 2351 description 2352 "Advertised (outbound) or received (inbound) 2353 label."; 2354 } 2355 leaf used-in-forwarding { 2356 type boolean; 2357 description 2358 "'true' if the lable is used in forwarding."; 2359 } 2360 } // peer 2362 } // binding-label-state-attributes 2364 grouping extended-discovery-policy-attributes { 2365 description 2366 "LDP policy to control the acceptance of extended neighbor 2367 discovery hello messages."; 2368 container hello-accept { 2369 if-feature policy-extended-discovery-config; 2370 description 2371 "Extended discovery acceptance policies."; 2373 leaf enable { 2374 type boolean; 2375 description 2376 "'true' to accept; 'false' to deny."; 2377 } 2378 leaf neighbor-list { 2379 type neighbor-list-ref; 2380 description 2382 "The name of a peer ACL."; 2383 } 2384 } // hello-accept 2385 } // extended-discovery-policy-attributes 2387 grouping extended-discovery-timers { 2388 description 2389 "Extended discovery timer attributes."; 2390 leaf hello-holdtime { 2391 type uint16 { 2392 range 15..3600; 2393 } 2394 units seconds; 2395 description 2396 "The time interval for which LDP targeted Hello adjacency 2398 is maintained in the absence of targeted Hello messages 2399 from an LDP neighbor."; 2400 } 2401 leaf hello-interval { 2402 type uint16 { 2403 range 5..3600; 2404 } 2405 units seconds; 2406 description 2407 "The interval between consecutive LDP targeted Hello 2408 messages used in extended LDP discovery."; 2409 } 2411 } // extended-discovery-timers 2413 grouping global-attributes { 2414 description "Configuration attributes at global level."; 2416 uses instance-attributes; 2417 } // global-attributes 2419 grouping graceful-restart-attributes { 2420 description 2421 "Graceful restart configuration attributes."; 2422 container graceful-restart { 2423 description 2424 "Attributes for graceful restart."; 2425 leaf enable { 2426 type boolean; 2427 description 2428 "Enable or disable graceful restart."; 2429 } 2430 leaf helper-enable { 2431 if-feature graceful-restart-helper-mode; 2432 type boolean; 2433 description 2434 "Enable or disable graceful restart helper mode."; 2435 } 2436 leaf reconnect-time { 2437 type uint16 { 2438 range 10..1800; 2439 } 2440 units seconds; 2441 description 2442 "Specifies the time interval that the remote LDP peer 2443 must wait for the local LDP peer to reconnect after the 2444 remote peer detects the LDP communication failure."; 2445 } 2446 leaf recovery-time { 2447 type uint16 { 2448 range 30..3600; 2449 } 2450 units seconds; 2451 description 2452 "Specifies the time interval, in seconds, that the remote 2453 LDP peer preserves its MPLS forwarding state after 2454 receiving the Initialization message from the restarted 2455 local LDP peer."; 2456 } 2457 leaf forwarding-holdtime { 2458 type uint16 { 2459 range 30..3600; 2460 } 2461 units seconds; 2462 description 2463 "Specifies the time interval, in seconds, before the 2464 termination of the recovery phase."; 2465 } 2466 } // graceful-restart 2467 } // graceful-restart-attributes 2469 grouping graceful-restart-attributes-per-peer { 2470 description 2471 "Per peer graceful restart configuration attributes."; 2472 container graceful-restart { 2473 description 2474 "Attributes for graceful restart."; 2475 leaf enable { 2476 type boolean; 2477 description 2478 "Enable or disable graceful restart."; 2479 } 2480 leaf reconnect-time { 2481 type uint16 { 2482 range 10..1800; 2483 } 2484 units seconds; 2485 description 2486 "Specifies the time interval that the remote LDP peer 2487 must wait for the local LDP peer to reconnect after the 2488 remote peer detects the LDP communication failure."; 2489 } 2490 leaf recovery-time { 2491 type uint16 { 2492 range 30..3600; 2493 } 2494 units seconds; 2495 description 2496 "Specifies the time interval, in seconds, that the remote 2497 LDP peer preserves its MPLS forwarding state after 2498 receiving the Initialization message from the restarted 2499 local LDP peer."; 2500 } 2501 } // graceful-restart 2502 } // graceful-restart-attributes-per-peer 2504 grouping instance-attributes { 2505 description "Configuration attributes at instance level."; 2506 container capability { 2507 description "Configure capability."; 2508 container end-of-lib { 2509 if-feature capability-end-of-lib; 2510 description 2511 "Configure end-of-lib capability."; 2512 leaf enable { 2513 type boolean; 2514 description 2515 "Enable end-of-lib capability."; 2516 } 2517 } 2518 container typed-wildcard-fec { 2519 if-feature capability-typed-wildcard-fec; 2520 description 2521 "Configure typed-wildcard-fec capability."; 2522 leaf enable { 2523 type boolean; 2524 description 2525 "Enable typed-wildcard-fec capability."; 2526 } 2527 } 2528 container upstream-label-assignment { 2529 if-feature capability-upstream-label-assignment; 2530 description 2531 "Configure upstream label assignment capability."; 2532 leaf enable { 2533 type boolean; 2534 description 2535 "Enable upstream label assignment."; 2536 } 2537 } 2538 container mldp { 2539 if-feature mldp; 2541 description 2542 "Multipoint capabilities."; 2543 uses mldp-capabilities; 2544 } 2545 } // capability 2547 uses graceful-restart-attributes; 2549 leaf igp-synchronization-delay { 2550 type uint16 { 2551 range 3..60; 2552 } 2553 units seconds; 2554 description 2555 "Sets the interval that the LDP waits before notifying the 2556 Interior Gateway Protocol (IGP) that label exchange is 2557 completed so that IGP can start advertising the normal 2558 metric for the link."; 2559 } 2560 leaf lsr-id { 2561 type yang:dotted-quad; 2562 description "Router ID."; 2563 } 2564 } // instance-attributes 2566 grouping ldp-adjacency-ref { 2567 description 2568 "An absolute reference to an LDP adjacency."; 2569 choice hello-adjacency-type { 2570 description 2571 "Interface or targeted adjacency."; 2572 case targeted { 2573 container targeted { 2574 description "Targeted adjacency."; 2575 leaf target-address { 2576 type inet:ip-address; 2577 description 2578 "The target address."; 2579 } 2580 } // targeted 2581 } 2582 case link { 2583 container link { 2584 description "Link adjacency."; 2585 leaf next-hop-interface { 2586 type mpls-interface-ref; 2587 description 2588 "Interface connecting to next-hop."; 2589 } 2590 leaf next-hop-address { 2591 type inet:ip-address; 2592 must "../next-hop-interface" { 2593 description 2594 "Applicable when interface is specified."; 2596 } 2597 description 2598 "IP address of next-hop."; 2599 } 2600 } // link 2601 } 2603 } 2604 } // ldp-adjacency-ref 2606 grouping ldp-fec-event { 2607 description 2608 "A LDP FEC event."; 2609 leaf prefix { 2610 type inet:ip-prefix; 2611 description 2612 "FEC."; 2613 } 2614 } // ldp-fec-event 2616 grouping ldp-peer-ref { 2617 description 2618 "An absolute reference to an LDP peer."; 2619 leaf peer-ref { 2620 type leafref { 2621 path "/rt:routing/rt:control-plane-protocols/mpls-ldp/" 2622 + "peers/peer/lsr-id"; 2623 } 2624 description 2625 "Reference to an LDP peer."; 2626 } 2627 } // ldp-peer-ref 2629 grouping mldp-capabilities { 2630 description 2631 "mLDP capabilities."; 2632 container p2mp { 2633 description 2634 "Configure point-to-multipoint capability."; 2635 leaf enable { 2636 type boolean; 2637 description 2638 "Enable point-to-multipoint."; 2639 } 2640 } 2641 container mp2mp { 2642 description 2643 "Configure multipoint-to-multipoint capability."; 2644 leaf enable { 2645 type boolean; 2646 description 2647 "Enable multipoint-to-multipoint."; 2648 } 2649 } 2650 container make-before-break { 2651 description 2652 "Configure make-before-break capability."; 2653 leaf enable { 2654 type boolean; 2655 description 2656 "Enable make-before-break."; 2657 } 2658 leaf switchover-delay { 2659 type uint16; 2660 units seconds; 2661 description 2662 "Switchover delay in seconds."; 2663 } 2664 leaf timeout { 2665 type uint16; 2666 units seconds; 2667 description 2668 "Timeout in seconds."; 2669 } 2670 } 2671 container hub-and-spoke { 2672 if-feature capability-mldp-hsmp; 2673 description 2674 "Configure hub-and-spoke-multipoint capability."; 2675 reference 2676 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 2677 Label Switched Path"; 2678 leaf enable { 2679 type boolean; 2680 description 2681 "Enable hub-and-spoke-multipoint."; 2682 } 2683 } 2684 container node-protection { 2685 if-feature capability-mldp-node-protection; 2686 description 2687 "Configure node-protection capability."; 2688 reference 2689 "RFC7715: mLDP Node Protection."; 2690 leaf plr { 2691 type boolean; 2692 description 2693 "Point of Local Repair capable for MP LSP node 2694 protection."; 2695 } 2696 container merge-point { 2697 description 2698 "Merge Point capable for MP LSP node protection."; 2700 leaf enable { 2701 type boolean; 2702 description 2703 "Enable merge point capability."; 2704 } 2705 leaf targeted-session-teardown-delay { 2706 type uint16; 2707 units seconds; 2708 description 2709 "Targeted session teardown delay."; 2710 } 2711 } // merge-point 2712 } 2713 } // mldp-capabilities 2715 grouping mldp-configured-lsp-roots { 2716 description 2717 "mLDP roots containers."; 2719 container roots-ipv4 { 2721 when "../../../af = 'ipv4'" { 2722 description 2723 "Only for IPv4."; 2724 } 2725 description 2726 "Configured IPv4 multicast LSPs."; 2727 list root { 2728 key "root-address"; 2729 description 2730 "List of roots for configured multicast LSPs."; 2732 leaf root-address { 2733 type inet:ipv4-address; 2734 description 2735 "Root address."; 2736 } 2738 list lsp { 2739 must "(lsp-id = 0 and source-address != '0.0.0.0' and " 2740 + "group-address != '0.0.0.0') or " 2741 + "(lsp-id != 0 and source-address = '0.0.0.0' and " 2742 + "group-address = '0.0.0.0')" { 2743 description 2744 "A LSP can be identified by either or 2745 ."; 2746 } 2747 key "lsp-id source-address group-address"; 2748 description 2749 "List of LSPs."; 2750 leaf lsp-id { 2751 type uint16; 2752 description "ID to identify the LSP."; 2753 } 2754 leaf source-address { 2755 type inet:ipv4-address; 2756 description 2757 "Source address."; 2758 } 2759 leaf group-address { 2760 type inet:ipv4-address-no-zone; 2761 description 2762 "Group address."; 2763 } 2764 } // list lsp 2765 } // list root 2766 } // roots-ipv4 2768 container roots-ipv6 { 2770 when "../../../af = 'ipv6'" { 2771 description 2772 "Only for IPv6."; 2773 } 2774 description 2775 "Configured IPv6 multicast LSPs."; 2777 list root { 2778 key "root-address"; 2779 description 2780 "List of roots for configured multicast LSPs."; 2782 leaf root-address { 2783 type inet:ipv6-address; 2784 description 2785 "Root address."; 2786 } 2788 list lsp { 2789 must "(lsp-id = 0 and source-address != '::' and " 2790 + "group-address != '::') or " 2791 + "(lsp-id != 0 and source-address = '::' and " 2792 + "group-address = '::')" { 2793 description 2794 "A LSP can be identified by either or 2795 ."; 2797 } 2798 key "lsp-id source-address group-address"; 2799 description 2800 "List of LSPs."; 2801 leaf lsp-id { 2802 type uint16; 2803 description "ID to identify the LSP."; 2804 } 2805 leaf source-address { 2806 type inet:ipv6-address; 2807 description 2808 "Source address."; 2809 } 2810 leaf group-address { 2811 type inet:ipv6-address-no-zone; 2812 description 2813 "Group address."; 2814 } 2815 } // list lsp 2816 } // list root 2817 } // roots-ipv6 2818 } // mldp-configured-lsp-roots 2820 grouping mldp-fec-event { 2821 description 2822 "A mLDP FEC event."; 2823 leaf tree-type { 2824 type multipoint-type; 2825 description 2826 "p2mp or mp2mp."; 2827 } 2828 leaf root { 2829 type inet:ip-address; 2830 description 2831 "Root address."; 2832 } 2833 choice lsp-key-type { 2834 description 2835 "LSP ID based or source-group based ."; 2836 case lsp-id-based { 2837 leaf lsp-id { 2838 type uint16; 2839 description 2840 "ID to identify the LSP."; 2841 } 2842 } 2843 case source-group-based { 2844 leaf source-address { 2845 type inet:ip-address; 2846 description 2848 "LSP source address."; 2849 } 2850 leaf group-address { 2851 type inet:ip-address; 2852 description 2853 "Multicast group address."; 2854 } 2855 } // case source-group-based 2856 } 2857 } // mldp-fec-event 2859 grouping mldp-binding-label-state-attributes { 2860 description 2861 "mLDP label binding attributes."; 2863 leaf multipoint-type { 2864 type multipoint-type; 2865 description 2866 "The type of mutipoint, p2mp or mp2mp."; 2867 } 2868 list peer { 2869 key "direction peer advertisement-type"; 2870 description 2871 "List of advertised and received peers."; 2872 leaf direction { 2873 type downstream-upstream; 2874 description 2875 "Downstream or upstream."; 2876 } 2877 leaf peer { 2878 type leafref { 2879 path 2880 "../../../../../../../../../../peers/peer/lsr-id"; 2881 } 2882 description 2883 "LDP peer from which this binding is received, 2884 or to which this binding is advertised."; 2885 } 2886 leaf advertisement-type { 2887 type advertised-received; 2888 description 2889 "Advertised or received."; 2890 } 2891 leaf label { 2892 type mpls:mpls-label; 2893 description 2894 "Advertised (outbound) or received (inbound) label."; 2895 } 2896 leaf mbb-role { 2897 when "../direction = 'upstream'" { 2898 description 2899 "For upstream."; 2900 } 2901 type enumeration { 2902 enum none { 2903 description "MBB is not enabled."; 2904 } 2905 enum active { 2906 description "This LSP is active."; 2907 } 2908 enum inactive { 2909 description "This LSP is inactive."; 2910 } 2911 } 2912 description 2913 "The MBB status of this LSP."; 2914 } 2915 leaf mofrr-role { 2916 when "../direction = 'upstream'" { 2917 description 2918 "For upstream."; 2919 } 2920 type enumeration { 2921 enum none { 2922 description "MOFRR is not enabled."; 2923 } 2924 enum primary { 2925 description "This LSP is primary."; 2926 } 2927 enum backup { 2928 description "This LSP is backup."; 2929 } 2930 } 2931 description 2932 "The MOFRR status of this LSP."; 2933 } 2934 } // peer 2935 } // mldp-binding-label-state-attributes 2937 grouping peer-af-policy-container { 2938 description 2939 "LDP policy attribute container under peer address-family."; 2940 container label-policy { 2941 description 2942 "Label policy attributes."; 2943 container advertise { 2944 description 2945 "Label advertising policies."; 2946 leaf prefix-list { 2947 type prefix-list-ref; 2948 description 2949 "Applies the prefix list to outgoing label 2950 advertisements."; 2951 } 2952 } 2953 container accept { 2954 description 2955 "Label advertisement acceptance policies."; 2956 leaf prefix-list { 2957 type prefix-list-ref; 2958 description 2959 "Applies the prefix list to incoming label 2960 advertisements."; 2961 } 2962 } // accept 2963 } // label-policy 2964 } // peer-af-policy-container 2966 grouping peer-attributes { 2967 description "Peer configuration attributes."; 2969 leaf session-ka-holdtime { 2970 type uint16 { 2971 range 45..3600; 2972 } 2973 units seconds; 2974 description 2975 "The time interval after which an inactive LDP session 2976 terminates and the corresponding TCP session closes. 2977 Inactivity is defined as not receiving LDP packets from the 2978 peer."; 2979 } 2980 leaf session-ka-interval { 2981 type uint16 { 2982 range 15..1200; 2983 } 2984 units seconds; 2985 description 2986 "The interval between successive transmissions of keepalive 2987 packets. Keepalive packets are only sent in the absence of 2988 other LDP packets transmitted over the LDP session."; 2990 } 2991 } // peer-attributes 2993 grouping peer-authentication { 2994 description 2995 "Peer authentication attributes."; 2996 leaf session-authentication-md5-password { 2997 type string { 2998 length "1..80"; 2999 } 3000 description 3001 "Assigns an encrypted MD5 password to an LDP 3002 peer"; 3003 } // md5-password 3004 } // peer-authentication 3006 grouping peer-state-derived { 3007 description "Peer derived state attributes."; 3009 container label-advertisement-mode { 3010 description "Label advertisement mode state."; 3011 leaf local { 3012 type label-adv-mode; 3013 description 3014 "Local Label Advertisement Mode."; 3015 } 3016 leaf peer { 3017 type label-adv-mode; 3018 description 3019 "Peer Label Advertisement Mode."; 3020 } 3021 leaf negotiated { 3022 type label-adv-mode; 3023 description 3024 "Negotiated Label Advertisement Mode."; 3025 } 3026 } 3027 leaf next-keep-alive { 3028 type uint16; 3029 units seconds; 3030 description "Time to send the next KeepAlive message."; 3031 } 3033 leaf peer-ldp-id { 3034 type yang:dotted-quad; 3035 description "Peer LDP ID."; 3036 } 3037 container received-peer-state { 3038 description "Peer features."; 3040 uses graceful-restart-attributes-per-peer; 3042 container capability { 3043 description "Configure capability."; 3044 container end-of-lib { 3045 description 3046 "Configure end-of-lib capability."; 3047 leaf enable { 3048 type boolean; 3049 description 3050 "Enable end-of-lib capability."; 3051 } 3052 } 3053 container typed-wildcard-fec { 3054 description 3055 "Configure typed-wildcard-fec capability."; 3056 leaf enable { 3057 type boolean; 3058 description 3059 "Enable typed-wildcard-fec capability."; 3060 } 3061 } 3062 container upstream-label-assignment { 3063 description 3064 "Configure upstream label assignment capability."; 3065 leaf enable { 3066 type boolean; 3067 description 3068 "Enable upstream label assignment."; 3069 } 3070 } 3071 container mldp { 3072 if-feature mldp; 3073 description 3074 "Multipoint capabilities."; 3076 container p2mp { 3077 description 3078 "Configure point-to-multipoint capability."; 3079 leaf enable { 3080 type boolean; 3081 description 3082 "Enable point-to-multipoint."; 3083 } 3084 } 3085 container mp2mp { 3086 description 3087 "Configure multipoint-to-multipoint capability."; 3088 leaf enable { 3089 type boolean; 3090 description 3091 "Enable multipoint-to-multipoint."; 3092 } 3093 } 3094 container make-before-break { 3095 description 3096 "Configure make-before-break capability."; 3097 leaf enable { 3098 type boolean; 3099 description 3100 "Enable make-before-break."; 3101 } 3102 } 3103 container hub-and-spoke { 3104 description 3105 "Configure hub-and-spoke-multipoint capability."; 3106 reference 3107 "RFC7140: LDP Extensions for Hub and Spoke Multipoint 3108 Label Switched Path"; 3109 leaf enable { 3110 type boolean; 3111 description 3112 "Enable hub-and-spoke-multipoint."; 3113 } 3114 } 3115 container node-protection { 3116 description 3117 "Configure node-protection capability."; 3118 reference 3119 "RFC7715: mLDP Node Protection."; 3120 leaf plr { 3121 type boolean; 3122 description 3123 "Point of Local Repair capable for MP LSP node 3124 protection."; 3125 } 3126 leaf merge-point { 3127 type boolean; 3128 description 3129 "Merge Point capable for MP LSP node protection."; 3130 } // merge-point 3131 } // node-protection 3132 } // mldp 3134 } // capability 3135 } // received-peer-state 3137 container session-holdtime { 3138 description "Session holdtime state."; 3139 leaf peer { 3140 type uint16; 3141 units seconds; 3142 description "Peer holdtime."; 3143 } 3144 leaf negotiated { 3145 type uint16; 3146 units seconds; 3147 description "Negotiated holdtime."; 3148 } 3149 leaf remaining { 3150 type uint16; 3151 units seconds; 3152 description "Remaining holdtime."; 3153 } 3154 } // session-holdtime 3156 leaf session-state { 3157 type enumeration { 3158 enum non-existent { 3159 description "NON EXISTENT state. Transport disconnected."; 3160 } 3161 enum initialized { 3162 description "INITIALIZED state."; 3163 } 3164 enum openrec { 3165 description "OPENREC state."; 3166 } 3167 enum opensent { 3168 description "OPENSENT state."; 3169 } 3170 enum operational { 3171 description "OPERATIONAL state."; 3172 } 3173 } 3174 description 3175 "Representing the operational status."; 3176 } 3178 container tcp-connection { 3179 description "TCP connection state."; 3180 leaf local-address { 3181 type inet:ip-address; 3182 description "Local address."; 3183 } 3184 leaf local-port { 3185 type inet:port-number; 3186 description "Local port."; 3187 } 3188 leaf remote-address { 3189 type inet:ip-address; 3190 description "Remote address."; 3191 } 3192 leaf remote-port { 3193 type inet:port-number; 3194 description "Remote port."; 3195 } 3196 } // tcp-connection 3198 leaf up-time { 3199 type string; 3200 description "Up time. The interval format in ISO 8601."; 3201 } 3203 container statistics { 3204 description 3205 "Statistics objects."; 3207 leaf discontinuity-time { 3208 type yang:date-and-time; 3209 mandatory true; 3210 description 3211 "The time on the most recent occasion at which any one or 3212 more of this interface's counters suffered a 3213 discontinuity. If no such discontinuities have occurred 3214 since the last re-initialization of the local management 3215 subsystem, then this node contains the time the local 3216 management subsystem re-initialized itself."; 3217 } 3219 container received { 3220 description "Inbound statistics."; 3221 uses statistics-peer-received-sent; 3222 } 3223 container sent { 3224 description "Outbound statistics."; 3225 uses statistics-peer-received-sent; 3226 } 3228 leaf total-addresses { 3229 type uint32; 3230 description 3231 "The number of learned addresses."; 3232 } 3233 leaf total-labels { 3234 type uint32; 3235 description 3236 "The number of learned labels."; 3237 } 3238 leaf total-fec-label-bindings { 3239 type uint32; 3240 description 3241 "The number of learned label-address bindings."; 3242 } 3243 } // statistics 3244 } // peer-state-derived 3246 grouping policy-container { 3247 description 3248 "LDP policy attributes."; 3249 container label-policy { 3250 description 3251 "Label policy attributes."; 3252 container independent-mode { 3253 description 3254 "Independent label policy attributes."; 3255 container assign { 3257 if-feature policy-label-assignment-config; 3258 description 3259 "Label assignment policies"; 3260 choice prefix-option { 3261 description 3262 "Use either prefix-list or host-routes-only."; 3263 case prefix-list { 3264 leaf prefix-list { 3265 type prefix-list-ref; 3266 description 3267 "Assign labels according to certain prefixes."; 3268 } 3269 } 3270 case host-routes-only { 3271 leaf host-routes-only { 3272 type boolean; 3273 description 3274 "'true' to apply host routes only."; 3275 } 3276 } 3277 } // prefix-option 3279 } 3280 container advertise { 3281 description 3282 "Label advertising policies."; 3283 container explicit-null { 3284 description 3285 "Enables an egress router to advertise an 3286 explicit null label (value 0) in place of an 3287 implicit null label (value 3) to the 3288 penultimate hop router."; 3289 leaf enable { 3290 type boolean; 3291 description 3292 "'true' to enable explicit null."; 3293 } 3294 leaf prefix-list { 3295 type prefix-list-ref; 3296 description 3297 "Prefix list name. Applies the filters in the 3298 specified prefix list to label 3299 advertisements. 3300 If the prefix list is not specified, explicit 3301 null label advertisement is enabled for all 3302 directly connected prefixes."; 3303 } 3304 } 3305 leaf prefix-list { 3306 type prefix-list-ref; 3307 description 3308 "Applies the prefix list to outgoing label 3309 advertisements."; 3311 } 3312 } 3313 container accept { 3314 description 3315 "Label advertisement acceptance policies."; 3316 leaf prefix-list { 3317 type prefix-list-ref; 3318 description 3319 "Applies the prefix list to incoming label 3320 advertisements."; 3321 } 3322 } 3323 } // independent-mode 3324 container ordered-mode { 3325 if-feature policy-ordered-label-config; 3326 description 3327 "Ordered label policy attributes."; 3328 container egress-lsr { 3329 description 3330 "Egress LSR label assignment policies"; 3331 leaf prefix-list { 3332 type prefix-list-ref; 3333 description 3334 "Assign labels according to certain prefixes."; 3335 } 3336 } 3337 container advertise { 3338 description 3339 "Label advertising policies."; 3340 leaf prefix-list { 3341 type prefix-list-ref; 3342 description 3343 "Applies the prefix list to outgoing label 3344 advertisements."; 3345 } 3346 } 3347 container accept { 3348 description 3349 "Label advertisement acceptance policies."; 3350 leaf prefix-list { 3351 type prefix-list-ref; 3352 description 3353 "Applies the prefix list to incoming label 3354 advertisements."; 3355 } 3356 } 3357 } // ordered-mode 3358 } // label-policy 3359 } // policy-container 3361 grouping statistics-peer-received-sent { 3362 description 3363 "Inbound and outbound statistic counters."; 3364 leaf total-octets { 3365 type yang:counter64; 3366 description 3367 "The total number of octets sent or received."; 3368 } 3369 leaf total-messages { 3370 type yang:counter64; 3371 description 3372 "The number of messages sent or received."; 3373 } 3374 leaf address { 3375 type yang:counter64; 3376 description 3377 "The number of address messages sent or received."; 3378 } 3379 leaf address-withdraw { 3380 type yang:counter64; 3381 description 3382 "The number of address-withdraw messages sent or received."; 3383 } 3384 leaf initialization { 3385 type yang:counter64; 3386 description 3387 "The number of initialization messages sent or received."; 3388 } 3389 leaf keepalive { 3390 type yang:counter64; 3391 description 3392 "The number of keepalive messages sent or received."; 3393 } 3394 leaf label-abort-request { 3395 type yang:counter64; 3396 description 3397 "The number of label-abort-request messages sent or 3398 received."; 3399 } 3400 leaf label-mapping { 3401 type yang:counter64; 3402 description 3403 "The number of label-mapping messages sent or received."; 3404 } 3405 leaf label-release { 3406 type yang:counter64; 3407 description 3408 "The number of label-release messages sent or received."; 3409 } 3410 leaf label-request { 3411 type yang:counter64; 3412 description 3413 "The number of label-request messages sent or received."; 3414 } 3415 leaf label-withdraw { 3416 type yang:counter64; 3417 description 3418 "The number of label-withdraw messages sent or received."; 3419 } 3420 leaf notification { 3421 type yang:counter64; 3422 description 3423 "The number of messages sent or received."; 3424 } 3425 } // statistics-peer-received-sent 3427 /* 3428 * Configuration data nodes 3429 */ 3431 augment "/rt:routing/rt:control-plane-protocols" { 3432 description "LDP augmentation."; 3434 container mpls-ldp { 3435 presence "Container for LDP protocol."; 3436 description 3437 "Container for LDP protocol."; 3439 container global { 3440 description 3441 "Global attributes for LDP."; 3442 container config { 3443 description 3444 "Configuration data."; 3445 uses global-attributes; 3446 } 3447 container state { 3448 config false; 3449 description 3450 "Operational state data."; 3451 uses global-attributes; 3452 } 3454 container mldp { 3455 if-feature mldp; 3456 description 3457 "mLDP attributes at per instance level. Defining 3458 attributes here does not enable any MP capabilities. 3459 MP capabilities need to be explicitly enabled under 3460 container capability."; 3462 container config { 3463 description 3464 "Configuration data."; 3465 leaf enable { 3466 type boolean; 3467 description 3468 "Enable mLDP."; 3469 } 3470 } 3471 container state { 3472 config false; 3473 description 3475 "Operational state data."; 3476 leaf enable { 3477 type boolean; 3478 description 3479 "Enable mLDP."; 3480 } 3481 } 3483 list address-family { 3484 key "afi"; 3485 description 3486 "Per-af params."; 3487 leaf afi { 3488 type ldp-address-family; 3489 description 3490 "Address family type value."; 3491 } 3493 container config { 3494 description 3495 "Configuration data."; 3496 container multicast-only-frr { 3497 if-feature mldp-mofrr; 3498 description 3499 "Multicast only FRR (MoFRR) policy."; 3500 leaf prefix-list { 3501 type prefix-list-ref; 3502 description 3503 "Enables MoFRR for the specified access list."; 3504 } 3505 } // multicast-only-frr 3506 container recursive-fec { 3507 description 3508 "Recursive FEC policy."; 3509 leaf prefix-list { 3510 type prefix-list-ref; 3511 description 3512 "Enables recursive FEC for the specified access 3513 list."; 3514 } 3515 } // recursive-for 3516 } 3517 container state { 3518 config false; 3519 description 3520 "Operational state data."; 3521 container multicast-only-frr { 3522 if-feature mldp-mofrr; 3524 description 3525 "Multicast only FRR (MoFRR) policy."; 3526 leaf prefix-list { 3527 type prefix-list-ref; 3528 description 3529 "Enables MoFRR for the specified access list."; 3530 } 3531 } // multicast-only-frr 3532 container recursive-fec { 3533 description 3534 "Recursive FEC policy."; 3535 leaf prefix-list { 3536 type prefix-list-ref; 3537 description 3538 "Enables recursive FEC for the specified access 3539 list."; 3540 } 3541 } // recursive-fec 3543 container ipv4 { 3544 when "../../afi = 'ipv4'" { 3545 description 3546 "Only for IPv4."; 3547 } 3548 description 3549 "IPv4 state information."; 3550 container roots { 3551 description 3552 "IPv4 multicast LSP roots."; 3553 list root { 3554 key "root-address"; 3555 description 3556 "List of roots for configured multicast LSPs."; 3558 leaf root-address { 3559 type inet:ipv4-address; 3560 description 3561 "Root address."; 3562 } 3564 leaf is-self { 3565 type boolean; 3566 description 3567 "This is the root."; 3568 } 3570 list reachability { 3571 key "address interface"; 3572 description 3573 "A next hop for reachability to root, 3574 as a RIB view."; 3575 leaf address { 3576 type inet:ipv4-address; 3577 description 3578 "The next hop address to reach root."; 3579 } 3580 leaf interface { 3581 type mpls-interface-ref; 3582 description 3583 "Interface connecting to next-hop."; 3584 } 3585 leaf peer { 3586 type leafref { 3587 path 3588 "../../../../../../../../../peers/peer/" 3589 + "lsr-id"; 3590 } 3591 description 3592 "LDP peer from which this next hop can be 3593 reached."; 3594 } 3595 } 3596 } // list root 3597 } // roots 3598 container bindings { 3599 description 3600 "mLDP FEC to label bindings."; 3601 container opaque-type-lspid { 3602 description 3603 "The type of opaque value element is 3604 the generic LSP identifier"; 3605 reference 3606 "RFC6388: Label Distribution Protocol 3607 Extensions for Point-to-Multipoint and 3608 Multipoint-to-Multipoint Label Switched 3609 Paths."; 3610 list fec-label { 3611 key 3612 "root-address lsp-id " 3613 + "recur-root-address recur-rd"; 3614 description 3615 "List of FEC to label bindings."; 3616 leaf root-address { 3617 type inet:ipv4-address; 3618 description 3619 "Root address."; 3620 } 3621 leaf lsp-id { 3622 type uint32; 3623 description "ID to identify the LSP."; 3624 } 3625 leaf recur-root-address { 3626 type inet:ip-address; 3627 description 3628 "Recursive root address."; 3629 reference 3630 "RFC6512: Using Multipoint LDP When the 3631 Backbone Has No Route to the Root"; 3632 } 3633 leaf recur-rd { 3634 type route-distinguisher; 3635 description 3636 "Route Distinguisher in the VPN-Recursive 3637 Opaque Value."; 3638 reference 3639 "RFC6512: Using Multipoint LDP When the 3640 Backbone Has No Route to the Root"; 3641 } 3642 uses mldp-binding-label-state-attributes; 3643 } // fec-label 3644 } // opaque-type-lspid 3646 container opaque-type-src { 3647 description 3648 "The type of opaque value element is 3649 the transit source TLV"; 3650 reference 3651 "RFC6826: Multipoint LDP In-Band Signaling for 3652 Point-to-Multipoint and 3653 Multipoint-to-Multipoint Label Switched 3654 Paths."; 3655 list fec-label { 3656 key 3657 "root-address source-address group-address " 3658 + "rd recur-root-address recur-rd"; 3659 description 3660 "List of FEC to label bindings."; 3661 leaf root-address { 3662 type inet:ipv4-address; 3663 description 3664 "Root address."; 3665 } 3666 leaf source-address { 3667 type inet:ip-address; 3668 description 3669 "Source address."; 3670 } 3671 leaf group-address { 3672 type inet:ip-address-no-zone; 3673 description 3674 "Group address."; 3675 } 3676 leaf rd { 3677 type route-distinguisher; 3678 description 3679 "Route Distinguisher."; 3680 reference 3681 "RFC7246: Multipoint Label Distribution 3682 Protocol In-Band Signaling in a Virtual 3683 Routing and Forwarding (VRF) Table 3684 Context."; 3685 } 3686 leaf recur-root-address { 3687 type inet:ip-address; 3688 description 3689 "Recursive root address."; 3690 reference 3691 "RFC6512: Using Multipoint LDP When the 3692 Backbone Has No Route to the Root"; 3693 } 3694 leaf recur-rd { 3695 type route-distinguisher; 3696 description 3697 "Route Distinguisher in the VPN-Recursive 3698 Opaque Value."; 3699 reference 3700 "RFC6512: Using Multipoint LDP When the 3701 Backbone Has No Route to the Root"; 3702 } 3703 uses mldp-binding-label-state-attributes; 3704 } // fec-label 3705 } // opaque-type-src 3707 container opaque-type-bidir { 3708 description 3709 "The type of opaque value element is 3710 the generic LSP identifier"; 3712 reference 3713 "RFC6826: Multipoint LDP In-Band Signaling for 3714 Point-to-Multipoint and 3715 Multipoint-to-Multipoint Label Switched 3716 Paths."; 3717 list fec-label { 3718 key 3719 "root-address rp group-address " 3720 + "rd recur-root-address recur-rd"; 3721 description 3722 "List of FEC to label bindings."; 3723 leaf root-address { 3724 type inet:ipv4-address; 3725 description 3726 "Root address."; 3727 } 3728 leaf rp { 3729 type inet:ip-address; 3730 description 3731 "RP address."; 3732 } 3733 leaf group-address { 3734 type inet:ip-address-no-zone; 3735 description 3736 "Group address."; 3737 } 3738 leaf rd { 3739 type route-distinguisher; 3740 description 3741 "Route Distinguisher."; 3742 reference 3743 "RFC7246: Multipoint Label Distribution 3744 Protocol In-Band Signaling in a Virtual 3745 Routing and Forwarding (VRF) Table 3746 Context."; 3747 } 3748 leaf recur-root-address { 3749 type inet:ip-address; 3750 description 3751 "Recursive root address."; 3752 reference 3753 "RFC6512: Using Multipoint LDP When the 3754 Backbone Has No Route to the Root"; 3755 } 3756 leaf recur-rd { 3757 type route-distinguisher; 3758 description 3759 "Route Distinguisher in the VPN-Recursive 3760 Opaque Value."; 3761 reference 3762 "RFC6512: Using Multipoint LDP When the 3763 Backbone Has No Route to the Root"; 3764 } 3765 uses mldp-binding-label-state-attributes; 3766 } // fec-label 3767 } // opaque-type-bidir 3768 } // bindings 3769 } // ipv4 3771 container ipv6 { 3772 when "../../afi = 'ipv6'" { 3773 description 3774 "Only for IPv6."; 3775 } 3776 description 3777 "IPv6 state information."; 3778 container roots { 3779 description 3780 "IPv6 multicast LSP roots."; 3781 list root { 3782 key "root-address"; 3783 description 3784 "List of roots for configured multicast LSPs."; 3786 leaf root-address { 3787 type inet:ipv6-address; 3788 description 3789 "Root address."; 3790 } 3792 leaf is-self { 3793 type boolean; 3794 description 3795 "This is the root."; 3796 } 3798 list reachability { 3799 key "address interface"; 3800 description 3801 "A next hop for reachability to root, 3802 as a RIB view."; 3803 leaf address { 3804 type inet:ipv6-address; 3805 description 3806 "The next hop address to reach root."; 3807 } 3808 leaf interface { 3809 type mpls-interface-ref; 3810 description 3811 "Interface connecting to next-hop."; 3812 } 3813 leaf peer { 3814 type leafref { 3815 path 3816 "../../../../../../../../../peers/peer/" 3817 + "lsr-id"; 3818 } 3819 description 3820 "LDP peer from which this next hop can be 3821 reached."; 3822 } 3823 } 3824 } // list root 3825 } // roots 3826 container bindings { 3827 description 3828 "mLDP FEC to label bindings."; 3829 container opaque-type-lspid { 3830 description 3831 "The type of opaque value element is 3832 the generic LSP identifier"; 3833 reference 3834 "RFC6388: Label Distribution Protocol 3835 Extensions for Point-to-Multipoint and 3836 Multipoint-to-Multipoint Label Switched 3837 Paths."; 3838 list fec-label { 3839 key 3840 "root-address lsp-id " 3841 + "recur-root-address recur-rd"; 3842 description 3843 "List of FEC to label bindings."; 3844 leaf root-address { 3845 type inet:ipv6-address; 3846 description 3847 "Root address."; 3848 } 3849 leaf lsp-id { 3850 type uint32; 3851 description "ID to identify the LSP."; 3852 } 3853 leaf recur-root-address { 3854 type inet:ip-address; 3855 description 3856 "Recursive root address."; 3857 reference 3858 "RFC6512: Using Multipoint LDP When the 3859 Backbone Has No Route to the Root"; 3860 } 3861 leaf recur-rd { 3862 type route-distinguisher; 3863 description 3864 "Route Distinguisher in the VPN-Recursive 3865 Opaque Value."; 3866 reference 3867 "RFC6512: Using Multipoint LDP When the 3868 Backbone Has No Route to the Root"; 3869 } 3870 uses mldp-binding-label-state-attributes; 3871 } // fec-label 3872 } // opaque-type-lspid 3874 container opaque-type-src { 3875 description 3876 "The type of opaque value element is 3877 the transit Source TLV"; 3878 reference 3879 "RFC6826: Multipoint LDP In-Band Signaling for 3880 Point-to-Multipoint and 3881 Multipoint-to-Multipoint Label Switched 3882 Paths."; 3883 list fec-label { 3884 key 3885 "root-address source-address group-address " 3886 + "rd recur-root-address recur-rd"; 3887 description 3888 "List of FEC to label bindings."; 3889 leaf root-address { 3890 type inet:ipv6-address; 3891 description 3892 "Root address."; 3893 } 3894 leaf source-address { 3895 type inet:ip-address; 3896 description 3897 "Source address."; 3898 } 3899 leaf group-address { 3900 type inet:ip-address-no-zone; 3901 description 3902 "Group address."; 3903 } 3904 leaf rd { 3905 type route-distinguisher; 3906 description 3907 "Route Distinguisher."; 3908 reference 3909 "RFC7246: Multipoint Label Distribution 3910 Protocol In-Band Signaling in a Virtual 3911 Routing and Forwarding (VRF) Table 3912 Context."; 3913 } 3914 leaf recur-root-address { 3915 type inet:ip-address; 3916 description 3917 "Recursive root address."; 3918 reference 3919 "RFC6512: Using Multipoint LDP When the 3920 Backbone Has No Route to the Root"; 3921 } 3922 leaf recur-rd { 3923 type route-distinguisher; 3924 description 3925 "Route Distinguisher in the VPN-Recursive 3926 Opaque Value."; 3927 reference 3928 "RFC6512: Using Multipoint LDP When the 3929 Backbone Has No Route to the Root"; 3930 } 3931 uses mldp-binding-label-state-attributes; 3932 } // fec-label 3933 } // opaque-type-src 3935 container opaque-type-bidir { 3936 description 3937 "The type of opaque value element is 3938 the generic LSP identifier"; 3939 reference 3940 "RFC6826: Multipoint LDP In-Band Signaling for 3941 Point-to-Multipoint and 3942 Multipoint-to-Multipoint Label Switched 3943 Paths."; 3944 list fec-label { 3945 key 3946 "root-address rp group-address " 3947 + "rd recur-root-address recur-rd"; 3948 description 3949 "List of FEC to label bindings."; 3950 leaf root-address { 3951 type inet:ipv6-address; 3952 description 3953 "Root address."; 3954 } 3955 leaf rp { 3956 type inet:ip-address; 3957 description 3958 "RP address."; 3959 } 3960 leaf group-address { 3961 type inet:ip-address-no-zone; 3962 description 3963 "Group address."; 3964 } 3965 leaf rd { 3966 type route-distinguisher; 3967 description 3968 "Route Distinguisher."; 3969 reference 3970 "RFC7246: Multipoint Label Distribution 3971 Protocol In-Band Signaling in a Virtual 3972 Routing and Forwarding (VRF) Table 3973 Context."; 3974 } 3975 leaf recur-root-address { 3976 type inet:ip-address; 3977 description 3978 "Recursive root address."; 3979 reference 3980 "RFC6512: Using Multipoint LDP When the 3981 Backbone Has No Route to the Root"; 3982 } 3983 leaf recur-rd { 3984 type route-distinguisher; 3985 description 3986 "Route Distinguisher in the VPN-Recursive 3987 Opaque Value."; 3988 reference 3989 "RFC6512: Using Multipoint LDP When the 3990 Backbone Has No Route to the Root"; 3991 } 3992 uses mldp-binding-label-state-attributes; 3993 } // fec-label 3994 } // opaque-type-bidir 3995 } // bindings 3996 } // ipv6 3997 } // state 3999 container configured-leaf-lsps { 4000 description 4001 "Configured multicast LSPs."; 4003 container p2mp { 4004 description 4005 "Configured point-to-multipoint LSPs."; 4006 uses mldp-configured-lsp-roots; 4007 } 4008 container mp2mp { 4009 description 4010 "Configured multipoint-to-multipoint LSPs."; 4011 uses mldp-configured-lsp-roots; 4012 } 4013 } // configured-leaf-lsps 4014 } // list address-family 4015 } // mldp 4017 list address-family { 4018 key "afi"; 4019 description 4020 "Per-vrf per-af params."; 4021 leaf afi { 4022 type ldp-address-family; 4023 description 4024 "Address family type value."; 4025 } 4027 container config { 4028 description 4029 "Configuration data."; 4030 leaf enable { 4031 type boolean; 4032 description 4033 "'true' to enable the address family."; 4034 } 4035 uses policy-container; 4037 container ipv4 { 4038 when "../../afi = 'ipv4'" { 4039 description 4040 "Only for IPv4."; 4041 } 4042 description 4043 "IPv4 address family."; 4044 leaf transport-address { 4045 type inet:ipv4-address; 4046 description 4047 "The transport address advertised in LDP Hello 4048 messages."; 4049 } 4050 } // ipv4 4051 container ipv6 { 4052 when "../../afi = 'ipv6'" { 4053 description 4054 "Only for IPv6."; 4055 } 4056 description 4057 "IPv6 address family."; 4058 leaf transport-address { 4059 type inet:ipv6-address; 4060 description 4061 "The transport address advertised in LDP Hello 4062 messages."; 4063 } 4064 } // ipv6 4065 } 4066 container state { 4067 config false; 4068 description 4069 "Operational state data."; 4070 leaf enable { 4071 type boolean; 4072 description 4073 "'true' to enable the address family."; 4074 } 4076 uses policy-container; 4078 container ipv4 { 4079 when "../../afi = 'ipv4'" { 4080 description 4081 "Only for IPv4."; 4082 } 4083 description 4084 "IPv4 address family."; 4085 leaf transport-address { 4086 type inet:ipv4-address; 4087 description 4088 "The transport address advertised in LDP Hello 4089 messages."; 4090 } 4092 container bindings { 4093 description 4094 "LDP address and label binding information."; 4095 list address { 4096 key "address"; 4097 description 4098 "List of address bindings."; 4099 leaf address { 4100 type inet:ipv4-address; 4101 description 4102 "Binding address."; 4103 } 4104 uses binding-address-state-attributes; 4105 } // binding-address 4107 list fec-label { 4108 key "fec"; 4109 description 4110 "List of label bindings."; 4111 leaf fec { 4112 type inet:ipv4-prefix; 4113 description 4114 "Prefix FEC."; 4115 } 4116 uses binding-label-state-attributes; 4117 } // fec-label 4118 } // binding 4119 } // ipv4 4120 container ipv6 { 4121 when "../../afi = 'ipv6'" { 4122 description 4123 "Only for IPv6."; 4124 } 4125 description 4126 "IPv6 address family."; 4127 leaf transport-address { 4128 type inet:ipv6-address; 4129 description 4130 "The transport address advertised in LDP Hello 4131 messages."; 4132 } 4134 container binding { 4135 description 4136 "LDP address and label binding information."; 4137 list address { 4138 key "address"; 4139 description 4140 "List of address bindings."; 4141 leaf address { 4142 type inet:ipv6-address; 4143 description 4144 "Binding address."; 4145 } 4146 uses binding-address-state-attributes; 4147 } // binding-address 4149 list fec-label { 4150 key "fec"; 4151 description 4152 "List of label bindings."; 4153 leaf fec { 4154 type inet:ipv6-prefix; 4155 description 4156 "Prefix FEC."; 4157 } 4158 uses binding-label-state-attributes; 4159 } // fec-label 4160 } // binding 4161 } // ipv6 4162 } // state 4163 } // address-family 4165 container discovery { 4166 description 4167 "Neibgbor discovery configuration."; 4169 container interfaces { 4170 description 4171 "A list of interfaces for basic descovery."; 4172 container config { 4173 description 4174 "Configuration data."; 4175 uses basic-discovery-timers; 4176 } 4177 container state { 4178 config false; 4179 description 4181 "Operational state data."; 4182 uses basic-discovery-timers; 4183 } 4185 list interface { 4186 key "interface"; 4187 description 4188 "List of LDP interfaces."; 4189 leaf interface { 4190 type mpls-interface-ref; 4191 description 4192 "Interface."; 4193 } 4194 container config { 4195 description 4196 "Configuration data."; 4197 uses basic-discovery-timers { 4198 if-feature per-interface-timer-config; 4199 } 4200 leaf igp-synchronization-delay { 4201 if-feature per-interface-timer-config; 4202 type uint16 { 4203 range 3..60; 4204 } 4205 units seconds; 4206 description 4207 "Sets the interval that the LDP waits before 4208 notifying the Interior Gateway Protocol (IGP) 4209 that label exchange is completed so that IGP 4210 can start advertising the normal metric for 4211 the link."; 4212 } 4213 } 4214 container state { 4215 config false; 4216 description 4217 "Operational state data."; 4218 uses basic-discovery-timers { 4219 if-feature per-interface-timer-config; 4220 } 4221 leaf igp-synchronization-delay { 4222 if-feature per-interface-timer-config; 4223 type uint16 { 4224 range 3..60; 4225 } 4226 units seconds; 4227 description 4228 "Sets the interval that the LDP waits before 4229 notifying the Interior Gateway Protocol (IGP) 4230 that label exchange is completed so that IGP 4231 can start advertising the normal metric for 4232 the link."; 4233 } 4234 leaf next-hello { 4235 type uint16; 4236 units seconds; 4237 description "Time to send the next hello message."; 4238 } 4239 } // state 4240 list address-family { 4241 key "afi"; 4242 description 4243 "Per-vrf per-af params."; 4244 leaf afi { 4245 type ldp-address-family; 4246 description 4247 "Address family type value."; 4248 } 4249 container config { 4250 description 4251 "Configuration data."; 4252 leaf enable { 4253 type boolean; 4254 description 4255 "Enable the address family on the interface."; 4256 } 4258 container ipv4 { 4259 must "/if:interfaces/if:interface" 4260 + "[name = current()/../../../interface]/" 4261 + "ip:ipv4" { 4262 description 4263 "Only if IPv4 is enabled on the interface."; 4264 } 4265 description 4266 "IPv4 address family."; 4267 leaf transport-address { 4268 type union { 4269 type enumeration { 4270 enum "use-interface-address" { 4271 description 4272 "Use interface address as the transport 4273 address."; 4274 } 4275 } 4276 type inet:ipv4-address; 4277 } 4278 description 4279 "IP address to be advertised as the LDP 4280 transport address."; 4281 } 4282 } 4284 container ipv6 { 4285 must "/if:interfaces/if:interface" 4286 + "[name = current()/../../../interface]/" 4287 + "ip:ipv6" { 4288 description 4289 "Only if IPv6 is enabled on the interface."; 4290 } 4291 description 4292 "IPv6 address family."; 4293 leaf transport-address { 4294 type union { 4295 type enumeration { 4296 enum "use-interface-address" { 4297 description 4298 "Use interface address as the transport 4299 address."; 4300 } 4301 } 4302 type inet:ipv4-address; 4303 } 4304 description 4305 "IP address to be advertised as the LDP 4306 transport address."; 4307 } 4308 } // ipv6 4309 } 4310 container state { 4311 config false; 4312 description 4313 "Operational state data."; 4314 leaf enable { 4315 type boolean; 4316 description 4317 "Enable the address family on the interface."; 4318 } 4320 container ipv4 { 4321 must "/if:interfaces/if:interface" 4322 + "[name = current()/../../../interface]/" 4323 + "ip:ipv4" { 4324 description 4325 "Only if IPv4 is enabled on the interface."; 4326 } 4327 description 4328 "IPv4 address family."; 4329 leaf transport-address { 4330 type union { 4331 type enumeration { 4333 enum "use-interface-address" { 4334 description 4335 "Use interface address as the transport 4336 address."; 4337 } 4338 } 4339 type inet:ipv4-address; 4340 } 4341 description 4342 "IP address to be advertised as the LDP 4343 transport address."; 4344 } 4346 list hello-adjacencies { 4347 key "adjacent-address"; 4348 description "List of hello adjacencies."; 4350 leaf adjacent-address { 4351 type inet:ipv4-address; 4352 description 4353 "Neighbor address of the hello adjacency."; 4354 } 4356 uses adjacency-state-attributes; 4358 leaf peer { 4359 type leafref { 4360 path "../../../../../../../../../peers/peer/" 4361 + "lsr-id"; 4362 } 4363 description 4364 "LDP peer from this adjacency."; 4365 } 4366 } // hello-adjacencies 4367 } 4368 container ipv6 { 4369 must "/if:interfaces/if:interface" 4370 + "[name = current()/../../../interface]/" 4371 + "ip:ipv6" { 4372 description 4373 "Only if IPv6 is enabled on the interface."; 4374 } 4375 description 4376 "IPv6 address family."; 4377 leaf transport-address { 4378 type union { 4379 type enumeration { 4380 enum "use-interface-address" { 4381 description 4382 "Use interface address as the transport 4383 address."; 4385 } 4386 } 4387 type inet:ipv4-address; 4388 } 4389 description 4390 "IP address to be advertised as the LDP 4391 transport address."; 4392 } 4394 list hello-adjacencies { 4395 key "adjacent-address"; 4396 description "List of hello adjacencies."; 4398 leaf adjacent-address { 4399 type inet:ipv6-address; 4400 description 4401 "Neighbor address of the hello adjacency."; 4402 } 4404 uses adjacency-state-attributes; 4406 leaf peer { 4407 type leafref { 4408 path "../../../../../../../../../peers/peer/" 4409 + "lsr-id"; 4410 } 4411 description 4412 "LDP peer from this adjacency."; 4413 } 4414 } // hello-adjacencies 4415 } // ipv6 4416 } 4417 } // address-family 4418 } // list interface 4419 } // interfaces 4421 container targeted 4422 { 4423 description 4424 "A list of targeted neighbors for extended discovery."; 4425 container config { 4427 description 4428 "Configuration data."; 4429 uses extended-discovery-timers; 4430 uses extended-discovery-policy-attributes; 4431 } 4432 container state { 4433 config false; 4434 description 4435 "Operational state data."; 4436 uses extended-discovery-timers; 4437 uses extended-discovery-policy-attributes; 4438 } 4440 list address-family { 4441 key "afi"; 4442 description 4443 "Per-af params."; 4444 leaf afi { 4445 type ldp-address-family; 4446 description 4447 "Address family type value."; 4448 } 4450 container state { 4451 config false; 4452 description 4453 "Operational state data."; 4455 container ipv4 { 4456 when "../../afi = 'ipv4'" { 4457 description 4458 "For IPv4."; 4459 } 4460 description 4461 "IPv4 address family."; 4462 list hello-adjacencies { 4463 key "local-address adjacent-address"; 4464 description "List of hello adjacencies."; 4466 leaf local-address { 4467 type inet:ipv4-address; 4468 description 4469 "Local address of the hello adjacency."; 4470 } 4471 leaf adjacent-address { 4472 type inet:ipv4-address; 4473 description 4474 "Neighbor address of the hello adjacency."; 4475 } 4477 uses adjacency-state-attributes; 4479 leaf peer { 4480 type leafref { 4481 path "../../../../../../../../peers/peer/" 4482 + "lsr-id"; 4483 } 4484 description 4485 "LDP peer from this adjacency."; 4486 } 4487 } // hello-adjacencies 4488 } // ipv4 4490 container ipv6 { 4491 when "../../afi = 'ipv6'" { 4492 description 4493 "For IPv6."; 4494 } 4495 description 4496 "IPv6 address family."; 4497 list hello-adjacencies { 4498 key "local-address adjacent-address"; 4499 description "List of hello adjacencies."; 4501 leaf local-address { 4502 type inet:ipv6-address; 4503 description 4504 "Local address of the hello adjacency."; 4505 } 4506 leaf adjacent-address { 4507 type inet:ipv6-address; 4508 description 4509 "Neighbor address of the hello adjacency."; 4510 } 4512 uses adjacency-state-attributes; 4514 leaf peer { 4515 type leafref { 4516 path "../../../../../../../../peers/peer/" 4517 + "lsr-id"; 4518 } 4519 description 4520 "LDP peer from this adjacency."; 4521 } 4522 } // hello-adjacencies 4523 } // ipv6 4524 } // state 4526 container ipv4 { 4527 when "../afi = 'ipv4'" { 4528 description 4529 "For IPv4."; 4530 } 4531 description 4532 "IPv4 address family."; 4533 list target { 4534 key "adjacent-address"; 4535 description 4536 "Targeted discovery params."; 4538 leaf adjacent-address { 4539 type inet:ipv4-address; 4540 description 4541 "Configures a remote LDP neighbor and enables 4542 extended LDP discovery of the specified 4543 neighbor."; 4544 } 4545 container config { 4546 description 4547 "Configuration data."; 4548 leaf enable { 4549 type boolean; 4550 description 4551 "Enable the target."; 4552 } 4553 leaf local-address { 4554 type inet:ipv4-address; 4555 description 4556 "The local address."; 4557 } 4558 } 4559 container state { 4560 config false; 4561 description 4562 "Operational state data."; 4563 leaf enable { 4564 type boolean; 4565 description 4566 "Enable the target."; 4567 } 4568 leaf local-address { 4569 type inet:ipv4-address; 4570 description 4571 "The local address."; 4572 } 4573 } // state 4574 } 4575 } // ipv4 4576 container ipv6 { 4577 when "../afi = 'ipv6'" { 4578 description 4579 "For IPv6."; 4580 } 4581 description 4582 "IPv6 address family."; 4583 list target { 4584 key "adjacent-address"; 4585 description 4586 "Targeted discovery params."; 4588 leaf adjacent-address { 4589 type inet:ipv6-address; 4590 description 4591 "Configures a remote LDP neighbor and enables 4592 extended LDP discovery of the specified 4593 neighbor."; 4594 } 4595 container config { 4596 description 4597 "Configuration data."; 4598 leaf enable { 4599 type boolean; 4600 description 4601 "Enable the target."; 4602 } 4603 leaf local-address { 4604 type inet:ipv6-address; 4605 description 4606 "The local address."; 4607 } 4608 } 4609 container state { 4610 config false; 4611 description 4612 "Operational state data."; 4613 leaf enable { 4614 type boolean; 4615 description 4616 "Enable the target."; 4617 } 4618 leaf local-address { 4619 type inet:ipv6-address; 4620 description 4621 "The local address."; 4622 } 4623 } // state 4624 } 4626 } // ipv6 4627 } // address-family 4628 } // targeted 4629 } // discovery 4631 container forwarding-nexthop { 4632 if-feature forwarding-nexthop-config; 4633 description 4634 "Configuration for forwarding nexthop."; 4636 container interfaces { 4637 description 4638 "A list of interfaces on which forwarding is 4639 disabled."; 4641 list interface { 4642 key "interface"; 4643 description 4644 "List of LDP interfaces."; 4645 leaf interface { 4646 type mpls-interface-ref; 4647 description 4648 "Interface."; 4649 } 4650 list address-family { 4651 key "afi"; 4652 description 4653 "Per-vrf per-af params."; 4654 leaf afi { 4655 type ldp-address-family; 4656 description 4657 "Address family type value."; 4658 } 4659 container config { 4660 description 4661 "Configuration data."; 4662 leaf ldp-disable { 4663 type boolean; 4664 description 4665 "Disable LDP forwarding on the interface."; 4666 } 4667 leaf mldp-disable { 4668 if-feature mldp; 4669 type boolean; 4670 description 4671 "Disable mLDP forwarding on the interface."; 4672 } 4673 } 4674 container state { 4675 config false; 4676 description 4677 "Operational state data."; 4678 leaf ldp-disable { 4679 type boolean; 4680 description 4681 "Disable LDP forwarding on the interface."; 4682 } 4683 leaf mldp-disable { 4684 if-feature mldp; 4686 type boolean; 4687 description 4688 "Disable mLDP forwarding on the interface."; 4689 } 4690 } 4691 } // address-family 4692 } // list interface 4693 } // interfaces 4694 } // forwarding-nexthop 4695 uses policy-container { 4696 if-feature all-af-policy-config; 4697 } 4698 } // global 4700 container peers { 4701 description 4702 "Peers configuration attributes."; 4704 container config { 4705 description 4706 "Configuration data."; 4707 uses peer-authentication { 4708 if-feature global-session-authentication; 4709 } 4710 uses peer-attributes; 4712 container session-downstream-on-demand { 4713 if-feature session-downstream-on-demand-config; 4714 description 4715 "Session downstream-on-demand attributes."; 4716 leaf enable { 4717 type boolean; 4718 description 4719 "'true' if session downstream-on-demand is enabled."; 4720 } 4721 leaf peer-list { 4722 type peer-list-ref; 4723 description 4724 "The name of a peer ACL."; 4725 } 4726 } 4727 } 4728 container state { 4729 config false; 4730 description 4731 "Operational state data."; 4732 uses peer-authentication { 4733 if-feature global-session-authentication; 4734 } 4735 uses peer-attributes; 4737 container session-downstream-on-demand { 4738 if-feature session-downstream-on-demand-config; 4739 description 4740 "Session downstream-on-demand attributes."; 4741 leaf enable { 4742 type boolean; 4743 description 4744 "'true' if session downstream-on-demand is enabled."; 4745 } 4746 leaf peer-list { 4747 type peer-list-ref; 4748 description 4749 "The name of a peer ACL."; 4750 } 4751 } 4752 } 4754 list peer { 4755 key "lsr-id"; 4756 description 4757 "List of peers."; 4759 leaf lsr-id { 4760 type yang:dotted-quad; 4761 description "LSR ID."; 4762 } 4764 container config { 4765 description 4766 "Configuration data."; 4767 leaf admin-down { 4768 type boolean; 4769 default false; 4770 description 4771 "'true' to disable the peer."; 4772 } 4774 container capability { 4775 description 4776 "Per peer capability"; 4777 container mldp { 4778 if-feature mldp; 4779 description 4780 "mLDP capabilities."; 4781 uses mldp-capabilities; 4782 } 4783 } 4785 uses peer-af-policy-container { 4786 if-feature all-af-policy-config; 4787 } 4789 uses peer-authentication; 4791 uses graceful-restart-attributes-per-peer { 4792 if-feature per-peer-graceful-restart-config; 4793 } 4795 uses peer-attributes { 4796 if-feature per-peer-session-attributes-config; 4797 } 4799 container address-family { 4800 description 4801 "Per-vrf per-af params."; 4802 container ipv4 { 4803 description 4804 "IPv4 address family."; 4805 uses peer-af-policy-container; 4806 } 4807 container ipv6 { 4808 description 4809 "IPv6 address family."; 4810 uses peer-af-policy-container; 4811 } // ipv6 4812 } // address-family 4813 } 4814 container state { 4815 config false; 4816 description 4817 "Operational state data."; 4819 leaf admin-down { 4820 type boolean; 4821 default false; 4822 description 4823 "'true' to disable the peer."; 4824 } 4826 container capability { 4827 description 4828 "Per peer capability"; 4829 container mldp { 4830 if-feature mldp; 4831 description 4832 "mLDP capabilities."; 4833 uses mldp-capabilities; 4834 } 4835 } 4837 uses peer-af-policy-container { 4838 if-feature all-af-policy-config; 4839 } 4841 uses peer-authentication; 4843 uses graceful-restart-attributes-per-peer { 4844 if-feature per-peer-graceful-restart-config; 4845 } 4847 uses peer-attributes { 4848 if-feature per-peer-session-attributes-config; 4849 } 4851 container address-family { 4852 description 4853 "Per-vrf per-af params."; 4854 container ipv4 { 4855 description 4856 "IPv4 address family."; 4857 uses peer-af-policy-container; 4859 list hello-adjacencies { 4860 key "local-address adjacent-address"; 4861 description "List of hello adjacencies."; 4863 leaf local-address { 4864 type inet:ipv4-address; 4865 description 4866 "Local address of the hello adjacency."; 4868 } 4869 leaf adjacent-address { 4870 type inet:ipv4-address; 4871 description 4872 "Neighbor address of the hello adjacency."; 4873 } 4875 uses adjacency-state-attributes; 4877 leaf interface { 4878 type mpls-interface-ref; 4879 description "Interface for this adjacency."; 4880 } 4881 } // hello-adjacencies 4882 } // ipv4 4883 container ipv6 { 4884 description 4885 "IPv6 address family."; 4886 uses peer-af-policy-container; 4888 list hello-adjacencies { 4889 key "local-address adjacent-address"; 4890 description "List of hello adjacencies."; 4892 leaf local-address { 4893 type inet:ipv6-address; 4894 description 4895 "Local address of the hello adjacency."; 4896 } 4897 leaf adjacent-address { 4898 type inet:ipv6-address; 4899 description 4900 "Neighbor address of the hello adjacency."; 4901 } 4903 uses adjacency-state-attributes; 4905 leaf interface { 4906 type mpls-interface-ref; 4907 description "Interface for this adjacency."; 4908 } 4909 } // hello-adjacencies 4910 } // ipv6 4911 } // address-family 4913 uses peer-state-derived; 4914 } // state 4915 } // list peer 4917 } // peers 4918 } // container mpls-ldp 4919 } 4921 /* 4922 * RPCs 4923 */ 4924 rpc mpls-ldp-clear-peer { 4925 description 4926 "Clears the session to the peer."; 4927 input { 4928 leaf lsr-id { 4929 type union { 4930 type yang:dotted-quad; 4931 type uint32; 4932 } 4933 description 4934 "LSR ID of peer to be cleared. If this is not provided 4935 then all peers are cleared"; 4936 } 4937 } 4938 } 4940 rpc mpls-ldp-clear-hello-adjacency { 4941 description 4942 "Clears the hello adjacency"; 4943 input { 4944 container hello-adjacency { 4945 description 4946 "Link adjacency or targettted adjacency. If this is not 4947 provided then all hello adjacencies are cleared"; 4948 choice hello-adjacency-type { 4949 description "Adjacency type."; 4950 case targeted { 4951 container targeted { 4952 presence "Present to clear targeted adjacencies."; 4953 description 4954 "Clear targeted adjacencies."; 4955 leaf target-address { 4956 type inet:ip-address; 4957 description 4958 "The target address. If this is not provided then 4959 all targeted adjacencies are cleared"; 4960 } 4961 } // targeted 4962 } 4963 case link { 4964 container link { 4965 presence "Present to clear link adjacencies."; 4966 description 4967 "Clear link adjacencies."; 4968 leaf next-hop-interface { 4969 type mpls-interface-ref; 4970 description 4972 "Interface connecting to next-hop. If this is not 4973 provided then all link adjacencies are cleared."; 4974 } 4975 leaf next-hop-address { 4976 type inet:ip-address; 4977 must "../next-hop-interface" { 4978 description 4979 "Applicable when interface is specified."; 4980 } 4981 description 4982 "IP address of next-hop. If this is not provided 4983 then adjacencies to all next-hops on the given 4984 interface are cleared."; 4985 } // next-hop-address 4986 } // link 4987 } 4988 } 4989 } 4990 } 4991 } 4993 rpc mpls-ldp-clear-peer-statistics { 4994 description 4995 "Clears protocol statistics (e.g. sent and received 4996 counters)."; 4997 input { 4998 leaf lsr-id { 4999 type union { 5000 type yang:dotted-quad; 5001 type uint32; 5002 } 5003 description 5004 "LSR ID of peer whose statistic are to be cleared. 5005 If this is not provided then all peers statistics are 5006 cleared"; 5007 } 5008 } 5009 } 5011 /* 5012 * Notifications 5013 */ 5014 notification mpls-ldp-peer-event { 5016 description 5017 "Notification event for a change of LDP peer operational 5018 status."; 5019 leaf event-type { 5020 type oper-status-event-type; 5021 description "Event type."; 5022 } 5023 uses ldp-peer-ref; 5024 } 5026 notification mpls-ldp-hello-adjacency-event { 5027 description 5028 "Notification event for a change of LDP adjacency operational 5029 status."; 5030 leaf event-type { 5031 type oper-status-event-type; 5032 description "Event type."; 5033 } 5034 uses ldp-adjacency-ref; 5035 } 5037 notification mpls-ldp-fec-event { 5038 description 5039 "Notification event for a change of FEC status."; 5040 leaf event-type { 5041 type oper-status-event-type; 5042 description "Event type."; 5043 } 5044 uses ldp-fec-event; 5045 } 5047 notification mpls-mldp-fec-event { 5048 description 5049 "Notification event for a change of FEC status."; 5050 leaf event-type { 5051 type oper-status-event-type; 5052 description "Event type."; 5053 } 5054 uses mldp-fec-event; 5055 } 5056 } 5058 5059 Figure 22 5061 7. Security Considerations 5063 The configuration, state, action and notification data defined using 5064 YANG data models in this document are likely to be accessed via the 5065 protocols such as NETCONF [RFC6241] etc. 5067 Hence, YANG implementations MUST comply with the security 5068 requirements specified in section 15 of [RFC6020]. Additionally, 5069 NETCONF implementations MUST comply with the security requirements 5070 specified in sections 2.2, 2.3 and 9 of [RFC6241] as well as section 5071 3.7 of [RFC6536]. 5073 8. IANA Considerations 5075 This document does not extend LDP or mLDP base protocol specifiction 5076 and hence there are no IANA considerations. 5078 Note to the RFC Editor: Please remove IANA section before the 5079 publication. 5081 9. Acknowledgments 5083 The authors would like to acknowledge Eddie Chami, Nagendra Kumar, 5084 Mannan Venkatesan, Pavan Beeram for their contribution to this 5085 document. We also acknowledge Ladislav Lhotka for his useful 5086 comments as the YANG Doctor. 5088 10. References 5090 10.1. Normative References 5092 [I-D.ietf-netmod-routing-cfg] 5093 Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 5094 Management", draft-ietf-netmod-routing-cfg-22 (work in 5095 progress), July 2016. 5097 [I-D.rtgyangdt-rtgwg-ni-model] 5098 Berger, L., Hopps, C., Lindem, A., and D. Bogdanovic, 5099 "Network Instance Model", draft-rtgyangdt-rtgwg-ni- 5100 model-00 (work in progress), May 2016. 5102 [I-D.saad-mpls-base-yang] 5103 Raza, K., Gandhi, R., Liu, X., Beeram, V., Saad, T., 5104 Bryskin, I., Chen, X., Jones, R., and B. Wen, "A YANG Data 5105 Model for MPLS Base", draft-saad-mpls-base-yang-00 (work 5106 in progress), May 2016. 5108 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 5109 Requirement Levels", BCP 14, RFC 2119, 5110 DOI 10.17487/RFC2119, March 1997, 5111 . 5113 [RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful 5114 Restart Mechanism for Label Distribution Protocol", 5115 RFC 3478, DOI 10.17487/RFC3478, February 2003, 5116 . 5118 [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., 5119 "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, 5120 October 2007, . 5122 [RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream 5123 Label Assignment and Context-Specific Label Space", 5124 RFC 5331, DOI 10.17487/RFC5331, August 2008, 5125 . 5127 [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. 5128 Le Roux, "LDP Capabilities", RFC 5561, 5129 DOI 10.17487/RFC5561, July 2009, 5130 . 5132 [RFC5918] Asati, R., Minei, I., and B. Thomas, "Label Distribution 5133 Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class 5134 (FEC)", RFC 5918, DOI 10.17487/RFC5918, August 2010, 5135 . 5137 [RFC5919] Asati, R., Mohapatra, P., Chen, E., and B. Thomas, 5138 "Signaling LDP Label Advertisement Completion", RFC 5919, 5139 DOI 10.17487/RFC5919, August 2010, 5140 . 5142 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 5143 the Network Configuration Protocol (NETCONF)", RFC 6020, 5144 DOI 10.17487/RFC6020, October 2010, 5145 . 5147 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 5148 and A. Bierman, Ed., "Network Configuration Protocol 5149 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 5150 . 5152 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 5153 Thomas, "Label Distribution Protocol Extensions for Point- 5154 to-Multipoint and Multipoint-to-Multipoint Label Switched 5155 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 5156 . 5158 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 5159 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 5160 November 2011, . 5162 [RFC6512] Wijnands, IJ., Rosen, E., Napierala, M., and N. Leymann, 5163 "Using Multipoint LDP When the Backbone Has No Route to 5164 the Root", RFC 6512, DOI 10.17487/RFC6512, February 2012, 5165 . 5167 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 5168 Protocol (NETCONF) Access Control Model", RFC 6536, 5169 DOI 10.17487/RFC6536, March 2012, 5170 . 5172 [RFC6826] Wijnands, IJ., Ed., Eckert, T., Leymann, N., and M. 5173 Napierala, "Multipoint LDP In-Band Signaling for Point-to- 5174 Multipoint and Multipoint-to-Multipoint Label Switched 5175 Paths", RFC 6826, DOI 10.17487/RFC6826, January 2013, 5176 . 5178 [RFC7060] Napierala, M., Rosen, E., and IJ. Wijnands, "Using LDP 5179 Multipoint Extensions on Targeted LDP Sessions", RFC 7060, 5180 DOI 10.17487/RFC7060, November 2013, 5181 . 5183 [RFC7140] Jin, L., Jounay, F., Wijnands, IJ., and N. Leymann, "LDP 5184 Extensions for Hub and Spoke Multipoint Label Switched 5185 Path", RFC 7140, DOI 10.17487/RFC7140, March 2014, 5186 . 5188 [RFC7246] Wijnands, IJ., Ed., Hitchen, P., Leymann, N., Henderickx, 5189 W., Gulko, A., and J. Tantsura, "Multipoint Label 5190 Distribution Protocol In-Band Signaling in a Virtual 5191 Routing and Forwarding (VRF) Table Context", RFC 7246, 5192 DOI 10.17487/RFC7246, June 2014, 5193 . 5195 [RFC7438] Wijnands, IJ., Ed., Rosen, E., Gulko, A., Joorde, U., and 5196 J. Tantsura, "Multipoint LDP (mLDP) In-Band Signaling with 5197 Wildcards", RFC 7438, DOI 10.17487/RFC7438, January 2015, 5198 . 5200 [RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. 5201 Papneja, "Updates to LDP for IPv6", RFC 7552, 5202 DOI 10.17487/RFC7552, June 2015, 5203 . 5205 [RFC7715] Wijnands, IJ., Ed., Raza, K., Atlas, A., Tantsura, J., and 5206 Q. Zhao, "Multipoint LDP (mLDP) Node Protection", 5207 RFC 7715, DOI 10.17487/RFC7715, January 2016, 5208 . 5210 10.2. Informative References 5212 [I-D.ietf-rtgwg-policy-model] 5213 Shaikh, A., Shakir, R., D'Souza, K., and C. Chase, 5214 "Routing Policy Configuration Model for Service Provider 5215 Networks", draft-ietf-rtgwg-policy-model-01 (work in 5216 progress), April 2016. 5218 [I-D.iwijnand-mpls-mldp-multi-topology] 5219 Wijnands, I. and K. Raza, "mLDP Extensions for Multi 5220 Topology Routing", draft-iwijnand-mpls-mldp-multi- 5221 topology-03 (work in progress), June 2013. 5223 [I-D.openconfig-netmod-opstate] 5224 Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling 5225 of Operational State Data in YANG", draft-openconfig- 5226 netmod-opstate-01 (work in progress), July 2015. 5228 [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private 5229 Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February 5230 2006, . 5232 [RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. 5233 King, "LDP Extensions for Multi-Topology", RFC 7307, 5234 DOI 10.17487/RFC7307, July 2014, 5235 . 5237 Appendix A. Additional Contributors 5239 Stephane Litkowski 5240 Orange. 5241 Email: stephane.litkowski@orange.com 5243 Reshad Rahman 5244 Cisco Systems Inc. 5245 Email: rrahman@cisco.com 5247 Danial Johari 5248 Cisco Systems Inc. 5249 Email: dajohari@cisco.com 5251 Authors' Addresses 5253 Kamran Raza 5254 Cisco Systems, Inc. 5255 Email: skraza@cisco.com 5257 Rajiv Asati 5258 Cisco Systems, Inc. 5259 Email: rajiva@cisco.com 5261 Sowmya Krishnaswamy 5262 Cisco Systems, Inc. 5263 Email: sowkrish@cisco.com 5265 Xufeng Liu 5266 Ericsson 5267 Email: xliu@kuatrotech.com 5268 Jeff Tantsura 5269 Ericsson 5270 Email: jeff.tantsura@ericsson.com 5272 Santosh Esale 5273 Juniper Networks 5274 Email: sesale@juniper.net 5276 Xia Chen 5277 Huawei Technologies 5278 Email: jescia.chenxia@huawei.com 5280 Loa Andersson 5281 Huawei Technologies 5282 Email: loa@pi.nu 5284 Himanshu Shah 5285 Ciena Corporation 5286 Email: hshah@ciena.com 5288 Matthew Bocci 5289 Alcatel-Lucent 5290 Email: matthew.bocci@alcatel-lucent.com