idnits 2.17.1 draft-ietf-mpls-ldp-yang-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == The page length should not exceed 58 lines per page, but there was 1 longer page, the longest (page 74) being 63 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 31 instances of too long lines in the document, the longest one being 20 characters in excess of 72. == There are 9 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. == There are 9 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 396 has weird spacing: '...address ine...' == Line 402 has weird spacing: '...address ine...' == Line 435 has weird spacing: '... lsr-id yan...' == Line 639 has weird spacing: '...nt-type adv...' == Line 653 has weird spacing: '...nt-type adv...' == (16 more instances...) -- The document date (November 12, 2016) is 2721 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 (-17) exists of draft-ietf-mpls-base-yang-01 ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-31) exists of draft-ietf-rtgwg-policy-model-01 Summary: 2 errors (**), 0 flaws (~~), 12 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: May 16, 2017 5 X. Liu 6 Kuatro Technologies 8 S. Esale 9 Juniper Networks 11 X. Chen 12 Huawei Technologies 14 H. Shah 15 Ciena Corporation 17 November 12, 2016 19 YANG Data Model for MPLS LDP 20 draft-ietf-mpls-ldp-yang-00 22 Abstract 24 This document describes a YANG data model for Multi-Protocol Label 25 Switching (MPLS) Label Distribution Protocol (LDP). This model also 26 serves as the base model that can be augmented to define 27 Multipoint LDP (mLDP). 29 Status of This Memo 31 This Internet-Draft is submitted in full conformance with the 32 provisions of BCP 78 and BCP 79. 34 Internet-Drafts are working documents of the Internet Engineering 35 Task Force (IETF). Note that other groups may also distribute 36 working documents as Internet-Drafts. The list of current Internet- 37 Drafts is at http://datatracker.ietf.org/drafts/current/. 39 Internet-Drafts are draft documents valid for a maximum of six months 40 and may be updated, replaced, or obsoleted by other documents at any 41 time. It is inappropriate to use Internet-Drafts as reference 42 material or to cite them other than as "work in progress." 44 This Internet-Draft will expire on May 16, 2017. 46 Copyright Notice 48 Copyright (c) 2016 IETF Trust and the persons identified as the 49 document authors. All rights reserved. 51 This document is subject to BCP 78 and the IETF Trust's Legal 52 Provisions Relating to IETF Documents 53 (http://trustee.ietf.org/license-info) in effect on the date of 54 publication of this document. Please review these documents 55 carefully, as they describe your rights and restrictions with respect 56 to this document. Code Components extracted from this document must 57 include Simplified BSD License text as described in Section 4.e of 58 the Trust Legal Provisions and are provided without warranty as 59 described in the Simplified BSD License. 61 Table of Contents 63 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 64 2. Specification of Requirements . . . . . . . . . . . . . . . . 3 65 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 66 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 7 67 4.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 12 68 4.1.1. Per-VRF parameters . . . . . . . . . . . . . . . . . 12 69 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 14 70 5.1. Derived States . . . . . . . . . . . . . . . . . . . . . 21 71 5.1.1. Adjacency state . . . . . . . . . . . . . . . . . . . 21 72 5.1.2. Peer state . . . . . . . . . . . . . . . . . . . . . 22 73 5.1.3. Bindings state . . . . . . . . . . . . . . . . . . . 23 74 5.1.4. Capabilities state . . . . . . . . . . . . . . . . . 25 75 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 26 76 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 77 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 27 78 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 28 79 10. Security Considerations . . . . . . . . . . . . . . . . . . . 72 80 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 72 81 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 72 82 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 72 83 13.1. Normative References . . . . . . . . . . . . . . . . . . 72 84 13.2. Informative References . . . . . . . . . . . . . . . . . 74 85 Appendix A. Additional Contributors . . . . . . . . . . . . . . 74 86 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74 88 1. Introduction 90 The Network Configuration Protocol (NETCONF) [RFC6241] is one of the 91 network management protocols that defines mechanisms to manage 92 network devices. YANG [RFC6020] is a modular language that 93 represents data structures in an XML tree format, and is used as a 94 data modelling language for the NETCONF. 96 This document introduces a YANG data model for MPLS Label 97 Distribution Protocol (LDP) [RFC5036]. This model also covers LDP 98 IPv6 [RFC7552] and LDP capabilities [RFC5561]. 100 The data model is defined for following constructs that are used for 101 managing the protocol: 103 o Configuration 105 o Operational State 107 o Executables (Actions) 109 o Notifications 111 This document is organized to define the data model for each of the 112 above constructs in the sequence as listed above. 114 2. Specification of Requirements 116 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 117 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 118 document are to be interpreted as described in [RFC2119]. 120 In this document, the word "IP" is used to refer to both IPv4 and 121 IPv6, unless otherwise explicitly stated. For example, "IP address 122 family" means and be read as "IPv4 and/or IPv6 address family" 124 3. Overview 126 This document defines a new module named "ietf-mpls-ldp" for LDP YANG 127 data model that augments /rt:routing/rt:control-plane-protocols 128 defined in [I-D.ietf-netmod-routing-cfg]. This model also serves as 129 the base model that is augmented to define mLDP data model in 130 [I-D.ietf-mpls-ldp-mldp-yang]. 132 There are four main containers in "ietf-mpls-ldp" module as follows: 134 o Read-Write parameters for configuration (Discussed in Section 4) 136 o Read-only parameters for operational state (Discussed in 137 Section 5) 139 o Notifications for events (Discussed in Section 6) 140 o RPCs for executing commands to perform some action (Discussed in 141 Section 7) 143 For the configuration and state data, this model follows the similar 144 approach described in [I-D.openconfig-netmod-opstate] to represent 145 the configuration (intended state) and operational (applied and 146 derived) state. This means that for every configuration (rw) item, 147 there is an associated (ro) item under "state" container to represent 148 the applied state. Furthermore, protocol derived state is also kept 149 under "state" tree corresponding to the protocol area (discovery, 150 peer etc.). [Ed note: This document will be (re-)aligned with 151 [I-D.openconfig-netmod-opstate] once that specification is adopted as 152 a WG document] 154 Following diagram depicts high level LDP yang tree organization and 155 hierarchy: 157 module: ietf-mpls-ldp 158 +-- rw routing 159 +-- rw control-plane-protocols 160 +-- rw mpls-ldp 161 +-- rw global 162 | +-- rw config 163 | | +-- rw ... 164 | | ... 165 | +-- ro state 166 | +-- ro ... 167 | ... 168 +-- rw ... 169 | +-- rw config 170 | | +-- rw ... 171 | | ... 172 | +-- ro state 173 | +-- ro ... 174 | ... 175 +-- rw ... 176 ... 178 rpcs: 179 +-- x mpls-ldp-some_action 180 +-- x . . . . . 182 notifications: 183 +--- n mpls-ldp-some_event 184 +--- n ... 186 Figure 1 188 Before going into data model details, it is important to take note of 189 the following points: 191 o This module aims to address only the core LDP parameters as per 192 RFC specification, as well as some widely deployed non-RFC 193 features (such as label policies, session authentication etc). 194 Any vendor specific feature should be defined in a vendor-specific 195 augmentation of this model. 197 o Multi-topology LDP [RFC7307] is beyond the scope of this document. 199 o This module does not cover any applications running on top of LDP, 200 nor does it cover any OAM procedures for LDP. 202 o This model is a VPN Forwarding and Routing (VRF)-centric model. 203 It is important to note that [RFC4364] defines VRF tables and 204 default forwarding tables as different, however from a yang 205 modelling perspective this introduces unnecessary complications, 206 hence we are treating the default forwarding table as just another 207 VRF. 209 o A "network-instance", as defined in 210 [I-D.rtgyangdt-rtgwg-ni-model], refers to a VRF instance (both 211 default and non-default) within the scope of this model. 213 o This model supports two address-families, namely "ipv4" and 214 "ipv6". 216 o This model assumes platform-wide label space (i.e. label space Id 217 of zero). However, when Upstream Label assignment [RFC6389] is in 218 use, an upstream assigned label is looked up in a Context-Specific 219 label space as defined in [RFC5331]. 221 o The label and peer policies (including filters) are defined using 222 a prefix-list. When used for a peer policy, the prefix refers to 223 the LSR Id of the peer. The prefix-list is referenced from 224 routing-policy model as defined in [I-D.ietf-rtgwg-policy-model]. 226 o This model uses the terms LDP "neighbor"/"adjacency", "session", 227 and "peer" with the following semantics: 229 * Neighbor/Adjacency: An LDP enabled LSR that is discovered 230 through LDP discovery mechanisms. 232 * Session: An LDP neighbor with whom a TCP connection has been 233 established. 235 * Peer: An LDP session which has successfully progressed beyond 236 its initialization phase and is either already exchanging the 237 bindings or is ready to do so. 239 It is to be noted that LDP Graceful Restart mechanisms defined in 240 [RFC3478] allow keeping the exchanged bindings for some time after 241 a session goes down with a peer. We call such a state belonging 242 to a "stale" peer -- i.e. keeping peer bindings from a peer with 243 whom currently there is either no connection established or 244 connection is established but GR session is in recovery state. 245 When used in this document, the above terms will refer strictly to 246 the semantics and definitions defined for them. 248 A graphical representation of LDP YANG data model is presented in 249 Figure 3, Figure 5, Figure 11, and Figure 12. Whereas, the actual 250 model definition in YANG is captured in Section 9. 252 While presenting the YANG tree view and actual .yang specification, 253 this document assumes readers' familiarity with the concepts of YANG 254 modeling, its presentation and its compilation. 256 4. Configuration 258 This specification defines the configuration parameters for base LDP 259 as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it 260 incorporates provisions to enable LDP Capabilities [RFC5561], and 261 defines some of the most significant and commonly used capabilities 262 such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP 263 Upstream Label Assignment [RFC6389]. 265 This model augments /rt:routing/rt:control-plane-protocols that is 266 defined in [I-D.ietf-netmod-routing-cfg]. For LDP interfaces, this 267 model refers the MPLS interface as defined under MPLS base 268 specification [I-D.ietf-mpls-base-yang]. Furthermore, as mentioned 269 earlier, the configuration tree presents read-write intended 270 configuration leave/items as well as read-only state of the applied 271 configuration. The former is listed under "config" container and 272 latter under "state" container. 274 Following is the high-level configuration organization for LDP: 276 module: ietf-mpls-ldp 277 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 278 +-- mpls-ldp 279 +-- global 280 | +-- ... 281 | +-- ... 282 | +-- address-family* [afi] 283 | | +-- . . . 284 | | +-- . . . 285 | | +-- label-policy 286 | | +-- ... 287 | | +-- ... 288 | +-- label-policy 289 | | +-- ... 290 | | +-- ... 291 | +-- capability 292 | | +-- ... 293 | | +-- ... 294 | +-- discovery 295 | +-- interfaces 296 | | +-- ... 297 | | +-- ... 298 | +-- targeteted 299 | +-- ... 300 | +-- ... 301 +-- peers 302 +-- ... 303 +-- ... 304 +-- peer* 305 +-- ... 306 +-- ... 307 +-- capability 308 | +-- ... 309 | +-- ... 310 +-- label-policy 311 +-- ... 312 +-- ... 314 Figure 2 316 Given the configuration hierarchy, the model allows inheritance such 317 that an item in a child tree is able to derive value from a similar 318 or related item in one of the parent. For instance, hello holdtime 319 can be configured per-VRF or per-VRF-interface, thus allowing 320 inheritance as well flexibility to override with a different value at 321 any child level. 323 Following is a simplified graphical representation of the data model 324 for LDP configuration 326 module: ietf-mpls-ldp 327 augment /rt:routing/rt:control-plane-protocols: 328 +--rw mpls-ldp! 329 +--rw global 330 | +--rw config 331 | | +--rw capability 332 | | | +--rw end-of-lib {capability-end-of-lib}? 333 | | | | +--rw enable? boolean 334 | | | +--rw typed-wildcard-fec {capability-typed-wildcard-fec}? 335 | | | | +--rw enable? boolean 336 | | | +--rw upstream-label-assignment {capability-upstream-label-assignment}? 337 | | | +--rw enable? boolean 338 | | +--rw graceful-restart 339 | | | +--rw enable? boolean 340 | | | +--rw helper-enable? boolean {graceful-restart-helper-mode}? 341 | | | +--rw reconnect-time? uint16 342 | | | +--rw recovery-time? uint16 343 | | | +--rw forwarding-holdtime? uint16 344 | | +--rw igp-synchronization-delay? uint16 345 | | +--rw lsr-id? yang:dotted-quad 346 | +--rw address-family* [afi] 347 | | +--rw afi ldp-address-family 348 | | +--rw config 349 | | +--rw enable? boolean 350 | | +--rw label-policy 351 | | | +--rw assign {policy-label-assignment-config}? 352 | | | | +--rw independent-mode 353 | | | | | +--rw prefix-list? prefix-list-ref 354 | | | | +--rw ordered-mode {policy-ordered-label-config}? 355 | | | | +--rw egress-prefix-list? prefix-list-ref 356 | | | +--rw advertise 357 | | | | +--rw egress-explicit-null 358 | | | | | +--rw enable? boolean 359 | | | | +--rw prefix-list? prefix-list-ref 360 | | | +--rw accept 361 | | | +--rw prefix-list? prefix-list-ref 362 | | +--rw ipv4 363 | | | +--rw transport-address? inet:ipv4-address 364 | | +--rw ipv6 365 | | +--rw transport-address? inet:ipv6-address 366 | +--rw discovery 367 | | +--rw interfaces 368 | | | +--rw config 369 | | | | +--rw hello-holdtime? uint16 370 | | | | +--rw hello-interval? uint16 371 | | | +--rw interface* [interface] 372 | | | +--rw interface mpls-interface-ref 373 | | | +--rw config 374 | | | | +--rw hello-holdtime? uint16 375 | | | | +--rw hello-interval? uint16 376 | | | | +--rw igp-synchronization-delay? uint16 {per-interface-timer-config}? 377 | | | +--rw address-family* [afi] 378 | | | +--rw afi ldp-address-family 379 | | | +--rw config 380 | | | +--rw enable? boolean 381 | | | +--rw ipv4 382 | | | | +--rw transport-address? union 383 | | | +--rw ipv6 384 | | | +--rw transport-address? union 385 | | +--rw targeted 386 | | +--rw config 387 | | | +--rw hello-holdtime? uint16 388 | | | +--rw hello-interval? uint16 389 | | | +--rw hello-accept {policy-extended-discovery-config}? 390 | | | +--rw enable? boolean 391 | | | +--rw neighbor-list? neighbor-list-ref 392 | | +--rw address-family* [afi] 393 | | +--rw afi ldp-address-family 394 | | +--rw ipv4 395 | | | +--rw target* [adjacent-address] 396 | | | +--rw adjacent-address inet:ipv4-address 397 | | | +--rw config 398 | | | +--rw enable? boolean 399 | | | +--rw local-address? inet:ipv4-address 400 | | +--rw ipv6 401 | | +--rw target* [adjacent-address] 402 | | +--rw adjacent-address inet:ipv6-address 403 | | +--rw config 404 | | +--rw enable? boolean 405 | | +--rw local-address? inet:ipv6-address 406 | +--rw forwarding-nexthop {forwarding-nexthop-config}? 407 | | +--rw interfaces 408 | | +--rw interface* [interface] 409 | | +--rw interface mpls-interface-ref 410 | | +--rw address-family* [afi] 411 | | +--rw afi ldp-address-family 412 | | +--rw config 413 | | +--rw ldp-disable? boolean 414 | +--rw label-policy 415 | +--rw assign {policy-label-assignment-config}? 416 | | +--rw independent-mode 417 | | | +--rw prefix-list? prefix-list-ref 418 | | +--rw ordered-mode {policy-ordered-label-config}? 419 | | +--rw egress-prefix-list? prefix-list-ref 420 | +--rw advertise 421 | | +--rw egress-explicit-null 422 | | | +--rw enable? boolean 423 | | +--rw prefix-list? prefix-list-ref 424 | +--rw accept 425 | +--rw prefix-list? prefix-list-ref 426 +--rw peers 427 +--rw config 428 | +--rw session-authentication-md5-password? string 429 | +--rw session-ka-holdtime? uint16 430 | +--rw session-ka-interval? uint16 431 | +--rw session-downstream-on-demand {session-downstream-on-demand-config}? 432 | +--rw enable? boolean 433 | +--rw peer-list? peer-list-ref 434 +--rw peer* [lsr-id] 435 +--rw lsr-id yang:dotted-quad 436 +--rw config 437 +--rw admin-down? boolean 438 +--rw capability 439 +--rw label-policy 440 | +--rw advertise 441 | | +--rw prefix-list? prefix-list-ref 442 | +--rw accept 443 | +--rw prefix-list? prefix-list-ref 444 +--rw session-authentication-md5-password? string 445 +--rw graceful-restart 446 | +--rw enable? boolean 447 | +--rw reconnect-time? uint16 448 | +--rw recovery-time? uint16 449 +--rw session-ka-holdtime? uint16 450 +--rw session-ka-interval? uint16 451 +--rw address-family 452 +--rw ipv4 453 | +--rw label-policy 454 | +--rw advertise 455 | | +--rw prefix-list? prefix-list-ref 456 | +--rw accept 457 | +--rw prefix-list? prefix-list-ref 458 +--rw ipv6 459 +--rw label-policy 460 +--rw advertise 461 | +--rw prefix-list? prefix-list-ref 462 +--rw accept 463 +--rw prefix-list? prefix-list-ref 464 Figure 3 466 4.1. Configuration Hierarchy 468 The LDP configuration container is logically divided into following 469 high-level config areas: 471 Per-VRF parameters 472 o Global parameters 473 o Per-address-family parameters 474 o LDP Capabilities parameters 475 o Hello Discovery parameters 476 - interfaces 477 - Per-interface: 478 Global 479 Per-address-family 480 - targeted 481 - Per-target 482 o Peer parameters 483 - Global 484 - Per-peer 485 Per-address-family 486 Capabilities parameters 487 o Forwarding parameters 489 Figure 4 491 Following subsections briefly explain these configuration areas. 493 4.1.1. Per-VRF parameters 495 LDP module resides under an network-instance and the scope of any LDP 496 configuration defined under this tree is per network-instance (per- 497 VRF). This configuration is further divided into sub categories as 498 follows. 500 4.1.1.1. Per-VRF global parameters 502 There are configuration items that are available directly under a VRF 503 instance and do not fall under any other sub tree. Example of such a 504 parameter is LDP LSR id that is typically configured per VRF. To 505 keep legacy LDP features and applications working in an LDP IPv4 506 networks with this model, this document recommends an operator to 507 pick a routable IPv4 unicast address as an LSR Id. 509 4.1.1.2. Per-VRF Capabilities parameters 511 This container falls under global tree and holds the LDP capabilities 512 that are to be enabled for certain features. By default, an LDP 513 capability is disabled unless explicitly enabled. These capabilities 514 are typically used to negotiate with LDP peer(s) the support/non- 515 support related to a feature and its parameters. The scope of a 516 capability enabled under this container applies to all LDP peers in 517 the given VRF instance. There is also a peer level capability 518 container that is provided to override a capability that is enabled/ 519 specified at VRF level. 521 4.1.1.3. Per-VRF Per-Address-Family parameters 523 Any LDP configuration parameter related to IP address family (AF) 524 whose scope is VRF wide is configured under this tree. The examples 525 of per-AF parameters include enabling LDP for an address family, 526 prefix-list based label policies, and LDP transport address. 528 4.1.1.4. Per-VRF Hello Discovery parameters 530 This container is used to hold LDP configuration related to Hello and 531 discovery process for both basic (link) and extended (targeted) 532 discovery. 534 The "interfaces" is a container to configure parameters related to 535 VRF interfaces. There are parameters that apply to all interfaces 536 (such as hello timers), as well as parameters that can be configured 537 per-interface. Hence, an interface list is defined under 538 "interfaces" container. The model defines parameters to configure 539 per-interface non AF related items, as well as per-interface per-AF 540 items. The example of former is interface hello timers, and example 541 of latter is enabling hellos for a given AF under an interface. 543 The "targeted" container under a VRF instance allows to configure LDP 544 targeted discovery related parameters. Within this container, the 545 "target" list provides a mean to configure multiple target addresses 546 to perform extended discovery to a specific destination target, as 547 well as to fine-tune the per-target parameters. 549 4.1.1.5. Per-VRF Peer parameters 551 This container is used to hold LDP configuration related to LDP 552 sessions and peers under a VRF instance. This container allows to 553 configure parameters that either apply on VRF's all peers or a subset 554 (peer-list) of VRF peers. The example of such parameters include 555 authentication password, session KA timers etc. Moreover, the model 556 also allows per-peer parameter tuning by specifying a "peer" list 557 under the "peers" container. A peer is uniquely identified using its 558 LSR Id and hence LSR Id is the key for peer list 560 Like per-interface parameters, some per-peer parameters are AF- 561 agnostic (i.e. either non AF related or apply to both IP address 562 families), and some that belong to an AF. The example of former is 563 per-peer session password configuration, whereas the example of 564 latter is prefix-list based label policies (inbound and outbound) 565 that apply to a given peer. 567 4.1.1.6. Per-VRF Forwarding parameters 569 This container is used to hold configuration used to control LDP 570 forwarding behavior under a VRF instance. One example of a 571 configuration under this container is when a user wishes to enable 572 neighbor discovery on an interface but wishes to disable use of the 573 same interface as forwarding nexthop. This example configuration 574 makes sense only when there are more than one LDP enabled interfaces 575 towards the neighbor. 577 5. Operational State 579 Operational state of LDP can be queried and obtained from read-only 580 state containers that fall under the same tree (/rt:routing/ 581 rt:control-plane-protocols/) as the configuration. 583 Please note this state tree refers both the configuration "applied" 584 state as well as the "derived" state related to the protocol. [Ed 585 note: This is where this model differs presently from 586 [I-D.openconfig-netmod-opstate] and subject to alignment in later 587 revisions] 589 Following is a simplified graphical representation of the data model 590 for LDP operational state. 592 module: ietf-mpls-ldp 593 augment /rt:routing/rt:control-plane-protocols: 594 +--rw mpls-ldp! 595 +--rw global 596 | +--ro state 597 | | +--ro capability 598 | | | +--ro end-of-lib {capability-end-of-lib}? 599 | | | | +--ro enable? boolean 600 | | | +--ro typed-wildcard-fec {capability-typed-wildcard-fec}? 601 | | | | +--ro enable? boolean 602 | | | +--ro upstream-label-assignment {capability-upstream-label-assignment}? 603 | | | +--ro enable? boolean 604 | | +--ro graceful-restart 605 | | | +--ro enable? boolean 606 | | | +--ro helper-enable? boolean {graceful-restart-helper-mode}? 607 | | | +--ro reconnect-time? uint16 608 | | | +--ro recovery-time? uint16 609 | | | +--ro forwarding-holdtime? uint16 610 | | +--ro igp-synchronization-delay? uint16 611 | | +--ro lsr-id? yang:dotted-quad 612 | +--rw address-family* [afi] 613 | | +--rw afi ldp-address-family 614 | | +--ro state 615 | | +--ro enable? boolean 616 | | +--ro label-policy 617 | | | +--ro assign {policy-label-assignment-config}? 618 | | | | +--ro independent-mode 619 | | | | | +--ro prefix-list? prefix-list-ref 620 | | | | +--ro ordered-mode {policy-ordered-label-config}? 621 | | | | +--ro egress-prefix-list? prefix-list-ref 622 | | | +--ro advertise 623 | | | | +--ro egress-explicit-null 624 | | | | | +--ro enable? boolean 625 | | | | +--ro prefix-list? prefix-list-ref 626 | | | +--ro accept 627 | | | +--ro prefix-list? prefix-list-ref 628 | | +--ro ipv4 629 | | | +--ro transport-address? inet:ipv4-address 630 | | | +--ro bindings 631 | | | +--ro address* [address] 632 | | | | +--ro address inet:ipv4-address 633 | | | | +--ro advertisement-type? advertised-received 634 | | | | +--ro peer? leafref 635 | | | +--ro fec-label* [fec] 636 | | | +--ro fec inet:ipv4-prefix 637 | | | +--ro peer* [peer advertisement-type] 638 | | | +--ro peer leafref 639 | | | +--ro advertisement-type advertised-received 640 | | | +--ro label? mpls:mpls-label 641 | | | +--ro used-in-forwarding? boolean 642 | | +--ro ipv6 643 | | +--ro transport-address? inet:ipv6-address 644 | | +--ro binding 645 | | +--ro address* [address] 646 | | | +--ro address inet:ipv6-address 647 | | | +--ro advertisement-type? advertised-received 648 | | | +--ro peer? leafref 649 | | +--ro fec-label* [fec] 650 | | +--ro fec inet:ipv6-prefix 651 | | +--ro peer* [peer advertisement-type] 652 | | +--ro peer leafref 653 | | +--ro advertisement-type advertised-received 654 | | +--ro label? mpls:mpls-label 655 | | +--ro used-in-forwarding? boolean 656 | +--rw discovery 657 | | +--rw interfaces 658 | | | +--ro state 659 | | | | +--ro hello-holdtime? uint16 660 | | | | +--ro hello-interval? uint16 661 | | | +--rw interface* [interface] 662 | | | +--rw interface mpls-interface-ref 663 | | | +--ro state 664 | | | | +--ro hello-holdtime? uint16 665 | | | | +--ro hello-interval? uint16 666 | | | | +--ro igp-synchronization-delay? uint16 {per-interface-timer-config}? 667 | | | | +--ro next-hello? uint16 668 | | | +--rw address-family* [afi] 669 | | | +--rw afi ldp-address-family 670 | | | +--ro state 671 | | | +--ro enable? boolean 672 | | | +--ro ipv4 673 | | | | +--ro transport-address? union 674 | | | | +--ro hello-adjacencies* [adjacent-address] 675 | | | | +--ro adjacent-address inet:ipv4-address 676 | | | | +--ro flag* identityref 677 | | | | +--ro hello-holdtime 678 | | | | | +--ro adjacent? uint16 679 | | | | | +--ro negotiated? uint16 680 | | | | | +--ro remaining? uint16 681 | | | | +--ro next-hello? uint16 682 | | | | +--ro statistics 683 | | | | | +--ro discontinuity-time yang:date-and-time 684 | | | | | +--ro hello-received? yang:counter64 685 | | | | | +--ro hello-dropped? yang:counter64 686 | | | | +--ro peer? leafref 687 | | | +--ro ipv6 688 | | | +--ro transport-address? union 689 | | | +--ro hello-adjacencies* [adjacent-address] 690 | | | +--ro adjacent-address inet:ipv6-address 691 | | | +--ro flag* identityref 692 | | | +--ro hello-holdtime 693 | | | | +--ro adjacent? uint16 694 | | | | +--ro negotiated? uint16 695 | | | | +--ro remaining? uint16 696 | | | +--ro next-hello? uint16 697 | | | +--ro statistics 698 | | | | +--ro discontinuity-time yang:date-and-time 699 | | | | +--ro hello-received? yang:counter64 700 | | | | +--ro hello-dropped? yang:counter64 701 | | | +--ro peer? leafref 702 | | +--rw targeted 703 | | +--ro state 704 | | | +--ro hello-holdtime? uint16 705 | | | +--ro hello-interval? uint16 706 | | | +--ro hello-accept {policy-extended-discovery-config}? 707 | | | +--ro enable? boolean 708 | | | +--ro neighbor-list? neighbor-list-ref 709 | | +--rw address-family* [afi] 710 | | +--rw afi ldp-address-family 711 | | +--ro state 712 | | | +--ro ipv4 713 | | | | +--ro hello-adjacencies* [local-address adjacent-address] 714 | | | | +--ro local-address inet:ipv4-address 715 | | | | +--ro adjacent-address inet:ipv4-address 716 | | | | +--ro flag* identityref 717 | | | | +--ro hello-holdtime 718 | | | | | +--ro adjacent? uint16 719 | | | | | +--ro negotiated? uint16 720 | | | | | +--ro remaining? uint16 721 | | | | +--ro next-hello? uint16 722 | | | | +--ro statistics 723 | | | | | +--ro discontinuity-time yang:date-and-time 724 | | | | | +--ro hello-received? yang:counter64 725 | | | | | +--ro hello-dropped? yang:counter64 726 | | | | +--ro peer? leafref 727 | | | +--ro ipv6 728 | | | +--ro hello-adjacencies* [local-address adjacent-address] 729 | | | +--ro local-address inet:ipv6-address 730 | | | +--ro adjacent-address inet:ipv6-address 731 | | | +--ro flag* identityref 732 | | | +--ro hello-holdtime 733 | | | | +--ro adjacent? uint16 734 | | | | +--ro negotiated? uint16 735 | | | | +--ro remaining? uint16 736 | | | +--ro next-hello? uint16 737 | | | +--ro statistics 738 | | | | +--ro discontinuity-time yang:date-and-time 739 | | | | +--ro hello-received? yang:counter64 740 | | | | +--ro hello-dropped? yang:counter64 741 | | | +--ro peer? leafref 742 | | +--rw ipv4 743 | | | +--rw target* [adjacent-address] 744 | | | +--rw adjacent-address inet:ipv4-address 745 | | | +--ro state 746 | | | +--ro enable? boolean 747 | | | +--ro local-address? inet:ipv4-address 748 | | +--rw ipv6 749 | | +--rw target* [adjacent-address] 750 | | +--rw adjacent-address inet:ipv6-address 751 | | +--ro state 752 | | +--ro enable? boolean 753 | | +--ro local-address? inet:ipv6-address 754 | +--rw forwarding-nexthop {forwarding-nexthop-config}? 755 | +--rw interfaces 756 | +--rw interface* [interface] 757 | +--rw interface mpls-interface-ref 758 | +--rw address-family* [afi] 759 | +--rw afi ldp-address-family 760 | +--ro state 761 | +--ro ldp-disable? boolean 762 +--rw peers 763 +--ro state 764 | +--ro session-authentication-md5-password? string 765 | +--ro session-ka-holdtime? uint16 766 | +--ro session-ka-interval? uint16 767 | +--ro session-downstream-on-demand {session-downstream-on-demand-config}? 768 | +--ro enable? boolean 769 | +--ro peer-list? peer-list-ref 770 +--rw peer* [lsr-id] 771 +--rw lsr-id yang:dotted-quad 772 +--ro state 773 +--ro admin-down? boolean 774 +--ro capability 775 +--ro label-policy 776 | +--ro advertise 777 | | +--ro prefix-list? prefix-list-ref 778 | +--ro accept 779 | +--ro prefix-list? prefix-list-ref 780 +--ro session-authentication-md5-password? string 781 +--ro graceful-restart 782 | +--ro enable? boolean 783 | +--ro reconnect-time? uint16 784 | +--ro recovery-time? uint16 785 +--ro session-ka-holdtime? uint16 786 +--ro session-ka-interval? uint16 787 +--ro address-family 788 | +--ro ipv4 789 | | +--ro label-policy 790 | | | +--ro advertise 791 | | | | +--ro prefix-list? prefix-list-ref 792 | | | +--ro accept 793 | | | +--ro prefix-list? prefix-list-ref 794 | | +--ro hello-adjacencies* [local-address adjacent-address] 795 | | +--ro local-address inet:ipv4-address 796 | | +--ro adjacent-address inet:ipv4-address 797 | | +--ro flag* identityref 798 | | +--ro hello-holdtime 799 | | | +--ro adjacent? uint16 800 | | | +--ro negotiated? uint16 801 | | | +--ro remaining? uint16 802 | | +--ro next-hello? uint16 803 | | +--ro statistics 804 | | | +--ro discontinuity-time yang:date-and-time 805 | | | +--ro hello-received? yang:counter64 806 | | | +--ro hello-dropped? yang:counter64 807 | | +--ro interface? mpls-interface-ref 808 | +--ro ipv6 809 | +--ro label-policy 810 | | +--ro advertise 811 | | | +--ro prefix-list? prefix-list-ref 812 | | +--ro accept 813 | | +--ro prefix-list? prefix-list-ref 814 | +--ro hello-adjacencies* [local-address adjacent-address] 815 | +--ro local-address inet:ipv6-address 816 | +--ro adjacent-address inet:ipv6-address 817 | +--ro flag* identityref 818 | +--ro hello-holdtime 819 | | +--ro adjacent? uint16 820 | | +--ro negotiated? uint16 821 | | +--ro remaining? uint16 822 | +--ro next-hello? uint16 823 | +--ro statistics 824 | | +--ro discontinuity-time yang:date-and-time 825 | | +--ro hello-received? yang:counter64 826 | | +--ro hello-dropped? yang:counter64 827 | +--ro interface? mpls-interface-ref 828 +--ro label-advertisement-mode 829 | +--ro local? label-adv-mode 830 | +--ro peer? label-adv-mode 831 | +--ro negotiated? label-adv-mode 832 +--ro next-keep-alive? uint16 833 +--ro peer-ldp-id? yang:dotted-quad 834 +--ro received-peer-state 835 | +--ro graceful-restart 836 | | +--ro enable? boolean 837 | | +--ro reconnect-time? uint16 838 | | +--ro recovery-time? uint16 839 | +--ro capability 840 | +--ro end-of-lib 841 | | +--ro enable? boolean 842 | +--ro typed-wildcard-fec 843 | | +--ro enable? boolean 844 | +--ro upstream-label-assignment 845 | +--ro enable? boolean 846 +--ro session-holdtime 847 | +--ro peer? uint16 848 | +--ro negotiated? uint16 849 | +--ro remaining? uint16 850 +--ro session-state? enumeration 851 +--ro tcp-connection 852 | +--ro local-address? inet:ip-address 853 | +--ro local-port? inet:port-number 854 | +--ro remote-address? inet:ip-address 855 | +--ro remote-port? inet:port-number 856 +--ro up-time? string 857 +--ro statistics 858 +--ro discontinuity-time yang:date-and-time 859 +--ro received 860 | +--ro total-octets? yang:counter64 861 | +--ro total-messages? yang:counter64 862 | +--ro address? yang:counter64 863 | +--ro address-withdraw? yang:counter64 864 | +--ro initialization? yang:counter64 865 | +--ro keepalive? yang:counter64 866 | +--ro label-abort-request? yang:counter64 867 | +--ro label-mapping? yang:counter64 868 | +--ro label-release? yang:counter64 869 | +--ro label-request? yang:counter64 870 | +--ro label-withdraw? yang:counter64 871 | +--ro notification? yang:counter64 872 +--ro sent 873 | +--ro total-octets? yang:counter64 874 | +--ro total-messages? yang:counter64 875 | +--ro address? yang:counter64 876 | +--ro address-withdraw? yang:counter64 877 | +--ro initialization? yang:counter64 878 | +--ro keepalive? yang:counter64 879 | +--ro label-abort-request? yang:counter64 880 | +--ro label-mapping? yang:counter64 881 | +--ro label-release? yang:counter64 882 | +--ro label-request? yang:counter64 883 | +--ro label-withdraw? yang:counter64 884 | +--ro notification? yang:counter64 885 +--ro total-addresses? uint32 886 +--ro total-labels? uint32 887 +--ro total-fec-label-bindings? uint32 889 Figure 5 891 5.1. Derived States 893 Following are main areas for which LDP operational "derived" state is 894 defined: 896 Neighbor Adjacencies 898 Peer 900 Bindings (FEC-label and address) 902 Capabilities 904 5.1.1. Adjacency state 906 Neighbor adjacencies are per address-family hello adjacencies that 907 are formed with neighbors as result of LDP basic or extended 908 discovery. In terms of organization, there is a source of discovery 909 (e.g. interface or target address) along with its associated 910 parameters and one or more discovered neighbors along with neighbor 911 discovery related parameters. For the basic discovery, there could 912 be more than one discovered neighbor for a given source (interface), 913 whereas there is at most one discovered neighbor for an extended 914 discovery source (local-address and target-address). This is also to 915 be noted that the reason for a targeted neighbor adjacency could be 916 either an active source (locally configured targeted) or passive 917 source (to allow any incoming extended/targeted hellos). A neighbor/ 918 adjacency record also contains session-state that helps highlight 919 whether a given adjacency has progressed to subsequent session level 920 or to eventual peer level. 922 Following captures high level tree hierarchy for neighbor adjacency 923 state. 925 +--rw mpls-ldp! 926 +--rw discovery 927 +--rw interfaces 928 | +--rw interface* [interface] 929 | +--rw address-family* [af] 930 | +--ro state 931 | +--ro ipv4 (or ipv6) 932 | +--ro hello-adjacencies* [adjacent-address] 933 | +--ro adjacent-address 934 | . . . . 935 | . . . . 936 +--rw targeted 937 +--rw address-family* [afi] 938 +--rw afi address-family 939 +--ro state 940 +--ro ipv4 (or ipv6) 941 +--ro hello-adjacencies* [local-address adjacent-address] 942 +--ro local-address 943 +--ro adjacent-address 944 . . . . 945 . . . . 947 Figure 6 949 5.1.2. Peer state 951 Peer related derived state is presented under peers tree. This is 952 one of the core state that provides info on the session related 953 parameters (mode, authentication, KA timeout etc.), TCP connection 954 info, hello adjacencies for the peer, statistics related to messages 955 and bindings, and capabilities exchange info. 957 Following captures high level tree hierarchy for peer state. 959 +--rw mpls-ldp! 960 +--rw peers 961 +--rw peer* [lsr-id] 962 +--rw lsr-id 963 +--ro state 964 +--ro session-ka-holdtime? 965 +-- . . . . 966 +-- . . . . 967 +--ro capability 968 + +ro -- . . . 969 +--ro address-family 970 | +--ro ipv4 (or ipv6) 971 | +--ro hello-adjacencies* [local-address adjacent-address] 972 | . . . . 973 | . . . . 974 +--ro received-peer-state 975 | +--ro . . . . 976 | +--ro capability 977 | +--ro . . . . 978 +--ro statistics 979 +-- . . . . 980 +-- . . . . 982 Figure 7 984 5.1.3. Bindings state 986 Binding state provides information on LDP FEC-label bindings as well 987 as address binding for both inbound (received) as well as outbound 988 (advertised) direction. FEC-label bindings are presented as a FEC- 989 centric view, and address bindings are presented as an address- 990 centric view: 992 FEC-Label bindings: 993 FEC 200.1.1.1/32: 994 advertised: local-label 16000 995 peer 192.168.0.2:0 996 peer 192.168.0.3:0 997 peer 192.168.0.4:0 998 received: 999 peer 192.168.0.2:0, label 16002, used-in-forwarding=Yes 1000 peer 192.168.0.3:0, label 17002, used-in-forwarding=No 1001 FEC 200.1.1.2/32: 1002 . . . . 1003 FEC 201.1.0.0/16: 1004 . . . . 1006 Address bindings: 1007 Addr 1.1.1.1: 1008 advertised 1009 Addr 1.1.1.2: 1010 advertised 1011 Addr 2.2.2.2: 1012 received, peer 192.168.0.2 1013 Addr 2.2.2.22: 1014 received, peer 192.168.0.2 1015 Addr 3.3.3.3: 1016 received, peer 192.168.0.3 1017 Addr 3.3.3.33: 1018 received, peer 192.168.0.3 1020 Figure 8 1022 Note that all local addresses are advertised to all peers and hence 1023 no need to provide per-peer information for local address 1024 advertisement. Furthermore, note that it is easy to derive a peer- 1025 centric view for the bindings from the information already provided 1026 in this model. 1028 Following captures high level tree hierarchy for bindings state. 1030 +--rw mpls-ldp! 1031 +--rw global 1032 +--rw address-family* [afi] 1033 +--rw afi address-family 1034 +--ro state 1035 +--ro ipv4 (or ipv6) 1036 +--ro bindings 1037 +--ro address* [address] 1038 | +--ro address 1039 | +--ro dvertisement-type? advertised-received 1040 | +--ro peer? leafref 1041 +--ro fec-label* [fec] 1042 +--ro fec inet:ipv4-prefix 1043 +--ro peer* [peer advertisement-type] 1044 +--ro peer leafref 1045 +--ro advertisement-type? advertised-received 1046 +--ro label? mpls:mpls-label 1047 +--ro used-in-forwarding? boolean 1049 Figure 9 1051 5.1.4. Capabilities state 1053 LDP capabilities state comprise two types of information - global 1054 information (such as timer etc.), and per-peer information. 1056 Following captures high level tree hierarchy for LDP capabilities 1057 state. 1059 +--rw mpls-ldp! 1060 +--rw global 1061 | +--ro state 1062 | +--ro capability 1063 | +--ro . . . . 1064 | +--ro . . . . 1065 +--rw peers 1066 +--rw peer* [lsr-id] 1067 +--rw lsr-id yang:dotted-quad 1068 +--ro state 1069 +--ro received-peer-state 1070 +--ro capability 1071 +--ro . . . . 1072 +--ro . . . . 1074 Figure 10 1076 6. Notifications 1078 This model defines a list of notifications to inform client of 1079 important events detected during the protocol operation. These 1080 events include events related to changes in the operational state of 1081 an LDP peer, hello adjacency, and FEC etc. It is to be noted that an 1082 LDP FEC is treated as operational (up) as long as it has at least 1 1083 NHLFE with outgoing label. 1085 Following is a simplified graphical representation of the data model 1086 for LDP notifications. 1088 module: ietf-mpls-ldp 1089 notifications: 1090 +---n mpls-ldp-peer-event 1091 | +--ro event-type? oper-status-event-type 1092 | +--ro peer-ref? leafref 1093 +---n mpls-ldp-hello-adjacency-event 1094 | +--ro event-type? oper-status-event-type 1095 | +--ro (hello-adjacency-type)? 1096 | +--:(targeted) 1097 | | +--ro targeted 1098 | | +--ro target-address? inet:ip-address 1099 | +--:(link) 1100 | +--ro link 1101 | +--ro next-hop-interface? mpls-interface-ref 1102 | +--ro next-hop-address? inet:ip-address 1103 +---n mpls-ldp-fec-event 1104 +--ro event-type? oper-status-event-type 1105 +--ro prefix? inet:ip-prefix 1107 Figure 11 1109 7. Actions 1111 This model defines a list of rpcs that allow performing an action or 1112 executing a command on the protocol. For example, it allows to clear 1113 (reset) LDP peers, hello-adjacencies, and statistics. The model 1114 makes an effort to provide different level of control so that a user 1115 is able to either clear all, or clear all for a given type, or clear 1116 a specific entity. 1118 Following is a simplified graphical representation of the data model 1119 for LDP actions. 1121 module: ietf-mpls-ldp 1122 rpcs: 1123 +---x mpls-ldp-clear-peer 1124 | +---w input 1125 | +---w lsr-id? union 1126 +---x mpls-ldp-clear-hello-adjacency 1127 | +---w input 1128 | +---w hello-adjacency 1129 | +---w (hello-adjacency-type)? 1130 | +--:(targeted) 1131 | | +---w targeted! 1132 | | +---w target-address? inet:ip-address 1133 | +--:(link) 1134 | +---w link! 1135 | +---w next-hop-interface? mpls-interface-ref 1136 | +---w next-hop-address? inet:ip-address 1137 +---x mpls-ldp-clear-peer-statistics 1138 +---w input 1139 +---w lsr-id? union 1141 Figure 12 1143 8. Open Items 1145 Following is a list of open items that are to be discussed and 1146 addressed in future revisions of this document: 1148 o Revisit and cut down on the scope of the document and number of 1149 features it is trying to cover 1151 o Split the model into a base and extended items 1153 o Align operational state modeling with other routing protocols and 1154 [I-D.openconfig-netmod-opstate] 1156 o Specify default values for configuration parameters 1158 o Close on augmentation off "mpls" list in "ietf-mpls" defined in 1159 [I-D.ietf-mpls-base-yang] 1161 o The use of grouping (templates) for bundling and grouping the 1162 configuration items is not employed in current revision, and is a 1163 subject for consideration in future. 1165 9. YANG Specification 1167 Following is the actual YANG definition for LDP constructs defined 1168 earlier in the document. 1170 file "ietf-mpls-ldp@2016-11-01.yang" --> 1172 module ietf-mpls-ldp { 1173 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; 1174 prefix ldp; 1176 import ietf-inet-types { 1177 prefix "inet"; 1178 } 1180 import ietf-yang-types { 1181 prefix "yang"; 1182 } 1184 import ietf-interfaces { 1185 prefix "if"; 1186 } 1188 import ietf-ip { 1189 prefix "ip"; 1190 } 1192 import ietf-routing { 1193 prefix "rt"; 1194 } 1196 import ietf-mpls { 1197 prefix "mpls"; 1198 } 1200 organization 1201 "IETF MPLS Working Group"; 1202 contact 1203 "WG Web: 1204 WG List: 1206 WG Chair: Loa Andersson 1207 1209 WG Chair: Ross Callon 1210 1212 WG Chair: George Swallow 1213 1215 Editor: Kamran Raza 1216 1218 Editor: Rajiv Asati 1219 1221 Editor: Xufeng Liu 1222 1224 Editor: Santosh Esale 1225 1227 Editor: Xia Chen 1228 1230 Editor: Himanshu Shah 1231 "; 1233 description 1234 "This YANG module defines the essential components for the 1235 management of Multi-Protocol Label Switching (MPLS) Label 1236 Distribution Protocol (LDP). It is also the base model to 1237 be augmented for Multipoint LDP (mLDP)."; 1239 revision 2016-11-01 { 1240 description 1241 "Initial revision."; 1242 reference 1243 "RFC XXXX: YANG Data Model for MPLS LDP."; 1244 } 1246 /* 1247 * Features 1248 */ 1250 feature admin-down-config { 1251 description 1252 "This feature indicates that the system allows to configure 1253 administrative down on a VRF instance and a peer."; 1254 } 1256 feature all-af-policy-config { 1257 description 1258 "This feature indicates that the system allows to configure 1259 policies that are applied to all address families."; 1261 } 1263 feature capability-end-of-lib { 1264 description 1265 "This feature indicates that the system allows to configure 1266 LDP end-of-lib capability."; 1267 } 1269 feature capability-typed-wildcard-fec { 1270 description 1271 "This feature indicates that the system allows to configure 1272 LDP typed-wildcard-fec capability."; 1273 } 1275 feature capability-upstream-label-assignment { 1276 description 1277 "This feature indicates that the system allows to configure 1278 LDP upstream label assignment capability."; 1279 } 1281 feature forwarding-nexthop-config { 1282 description 1283 "This feature indicates that the system allows to configure 1284 forwarding nexthop on interfaces."; 1285 } 1287 feature global-session-authentication { 1288 description 1289 "This feature indicates that the system allows to configure 1290 authentication at global level."; 1291 } 1293 feature graceful-restart-helper-mode { 1294 description 1295 "This feature indicates that the system supports graceful 1296 restart helper mode."; 1297 } 1299 feature per-interface-timer-config { 1300 description 1301 "This feature indicates that the system allows to configure 1302 interface hello timers at the per-interface level."; 1303 } 1305 feature per-peer-graceful-restart-config { 1306 description 1307 "This feature indicates that the system allows to configure 1308 graceful restart at the per-peer level."; 1310 } 1312 feature per-peer-session-attributes-config { 1313 description 1314 "This feature indicates that the system allows to configure 1315 session attributes at the per-peer level."; 1316 } 1318 feature policy-extended-discovery-config { 1319 description 1320 "This feature indicates that the system allows to configure 1321 policies to control the acceptance of extended neighbor 1322 discovery hello messages."; 1323 } 1325 feature policy-label-assignment-config { 1326 description 1327 "This feature indicates that the system allows to configure 1328 policies to assign labels according to certain prefixes."; 1329 } 1331 feature policy-ordered-label-config { 1332 description 1333 "This feature indicates that the system allows to configure 1334 ordered label policies."; 1335 } 1337 feature session-downstream-on-demand-config { 1338 description 1339 "This feature indicates that the system allows to configure 1340 session downstream-on-demand"; 1341 } 1343 /* 1344 * Typedefs 1345 */ 1346 typedef ldp-address-family { 1347 type identityref { 1348 base rt:address-family; 1349 } 1350 description 1351 "LDP address family type."; 1352 } 1354 typedef duration32-inf { 1355 type union { 1356 type uint32; 1357 type enumeration { 1358 enum "infinite" { 1359 description "The duration is infinite."; 1360 } 1361 } 1362 } 1363 units seconds; 1364 description 1365 "Duration represented as 32 bit seconds with infinite."; 1366 } 1368 typedef advertised-received { 1369 type enumeration { 1370 enum advertised { 1371 description "Advertised information."; 1372 } 1373 enum received { 1374 description "Received information."; 1375 } 1376 } 1377 description 1378 "Received or advertised."; 1379 } 1381 typedef downstream-upstream { 1382 type enumeration { 1383 enum downstream { 1384 description "Downstream information."; 1385 } 1386 enum upstream { 1387 description "Upstream information."; 1388 } 1389 } 1390 description 1391 "Received or advertised."; 1392 } 1394 typedef label-adv-mode { 1395 type enumeration { 1396 enum downstream-unsolicited { 1397 description "Downstream Unsolicited."; 1398 } 1399 enum downstream-on-demand { 1400 description "Downstream on Demand."; 1401 } 1402 } 1403 description 1404 "Label Advertisement Mode."; 1405 } 1406 typedef mpls-interface-ref { 1407 type leafref { 1408 path "/rt:routing/mpls:mpls/mpls:interface/mpls:name"; 1409 } 1410 description 1411 "This type is used by data models that need to reference 1412 mpls interfaces."; 1413 } 1415 typedef neighbor-list-ref { 1416 type string; 1417 description 1418 "A type for a reference to a neighbor list."; 1419 } 1421 typedef peer-list-ref { 1422 type string; 1423 description 1424 "A type for a reference to a peer list."; 1425 } 1427 typedef prefix-list-ref { 1428 type string; 1429 description 1430 "A type for a reference to a prefix list."; 1431 } 1433 typedef oper-status-event-type { 1434 type enumeration { 1435 enum up { 1436 value 1; 1437 description 1438 "Operational status changed to up."; 1439 } 1440 enum down { 1441 value 2; 1442 description 1443 "Operational status changed to down."; 1444 } 1445 } 1446 description "Operational status event type for notifications."; 1447 } 1449 /* 1450 * Identities 1451 */ 1452 identity adjacency-flag-base { 1453 description "Base type for adjacency flags."; 1455 } 1457 identity adjacency-flag-active { 1458 base "adjacency-flag-base"; 1459 description 1460 "This adjacency is configured and actively created."; 1461 } 1463 identity adjacency-flag-passive { 1464 base "adjacency-flag-base"; 1465 description 1466 "This adjacency is not configured and passively accepted."; 1467 } 1469 /* 1470 * Groupings 1471 */ 1473 grouping adjacency-state-attributes { 1474 description 1475 "Adjacency state attributes."; 1477 leaf-list flag { 1478 type identityref { 1479 base "adjacency-flag-base"; 1480 } 1481 description "Adjacency flags."; 1482 } 1483 container hello-holdtime { 1484 description "Hello holdtime state."; 1485 leaf adjacent { 1486 type uint16; 1487 units seconds; 1488 description "Peer holdtime."; 1489 } 1490 leaf negotiated { 1491 type uint16; 1492 units seconds; 1493 description "Negotiated holdtime."; 1494 } 1495 leaf remaining { 1496 type uint16; 1497 units seconds; 1498 description "Remaining holdtime."; 1499 } 1500 } 1502 leaf next-hello { 1503 type uint16; 1504 units seconds; 1505 description "Time to send the next hello message."; 1506 } 1508 container statistics { 1509 description 1510 "Statistics objects."; 1512 leaf discontinuity-time { 1513 type yang:date-and-time; 1514 mandatory true; 1515 description 1516 "The time on the most recent occasion at which any one or 1517 more of this interface's counters suffered a 1518 discontinuity. If no such discontinuities have occurred 1519 since the last re-initialization of the local management 1520 subsystem, then this node contains the time the local 1521 management subsystem re-initialized itself."; 1522 } 1524 leaf hello-received { 1525 type yang:counter64; 1526 description 1527 "The number of hello messages received."; 1528 } 1529 leaf hello-dropped { 1530 type yang:counter64; 1531 description 1532 "The number of hello messages received."; 1533 } 1534 } // statistics 1535 } // adjacency-state-attributes 1537 grouping basic-discovery-timers { 1538 description 1539 "Basic discovery timer attributes."; 1540 leaf hello-holdtime { 1541 type uint16 { 1542 range 15..3600; 1543 } 1544 units seconds; 1545 description 1546 "The time interval for which a LDP link Hello adjacency 1547 is maintained in the absence of link Hello messages from 1548 the LDP neighbor"; 1549 } 1550 leaf hello-interval { 1551 type uint16 { 1552 range 5..1200; 1553 } 1554 units seconds; 1555 description 1556 "The interval between consecutive LDP link Hello messages 1557 used in basic LDP discovery"; 1558 } 1559 } // basic-discovery-timers 1561 grouping binding-address-state-attributes { 1562 description 1563 "Address binding attributes"; 1564 leaf advertisement-type { 1565 type advertised-received; 1566 description 1567 "Received or advertised."; 1568 } 1569 leaf peer { 1570 type leafref { 1571 path "../../../../../../../peers/peer/lsr-id"; 1572 } 1573 must "../advertisement-type = 'received'" { 1574 description 1575 "Applicable for received address."; 1576 } 1577 description 1578 "LDP peer from which this address is received."; 1579 } // peer 1580 } // binding-address-state-attributes 1582 grouping binding-label-state-attributes { 1583 description 1584 "Label binding attributes"; 1585 list peer { 1586 key "peer advertisement-type"; 1587 description 1588 "List of advertised and received peers."; 1589 leaf peer { 1590 type leafref { 1591 path "../../../../../../../../peers/peer/lsr-id"; 1592 } 1593 description 1594 "LDP peer from which this binding is received, 1595 or to which this binding is advertised."; 1596 } 1597 leaf advertisement-type { 1598 type advertised-received; 1599 description 1600 "Received or advertised."; 1601 } 1602 leaf label { 1603 type mpls:mpls-label; 1604 description 1605 "Advertised (outbound) or received (inbound) 1606 label."; 1607 } 1608 leaf used-in-forwarding { 1609 type boolean; 1610 description 1611 "'true' if the lable is used in forwarding."; 1612 } 1613 } // peer 1614 } // binding-label-state-attributes 1616 grouping extended-discovery-policy-attributes { 1617 description 1618 "LDP policy to control the acceptance of extended neighbor 1619 discovery hello messages."; 1620 container hello-accept { 1621 if-feature policy-extended-discovery-config; 1622 description 1623 "Extended discovery acceptance policies."; 1625 leaf enable { 1626 type boolean; 1627 description 1628 "'true' to accept; 'false' to deny."; 1629 } 1630 leaf neighbor-list { 1631 type neighbor-list-ref; 1632 description 1634 "The name of a peer ACL."; 1635 } 1636 } // hello-accept 1637 } // extended-discovery-policy-attributes 1639 grouping extended-discovery-timers { 1640 description 1641 "Extended discovery timer attributes."; 1642 leaf hello-holdtime { 1643 type uint16 { 1644 range 15..3600; 1645 } 1646 units seconds; 1647 description 1648 "The time interval for which LDP targeted Hello adjacency 1650 is maintained in the absence of targeted Hello messages 1651 from an LDP neighbor."; 1652 } 1653 leaf hello-interval { 1654 type uint16 { 1655 range 5..3600; 1656 } 1657 units seconds; 1658 description 1659 "The interval between consecutive LDP targeted Hello 1660 messages used in extended LDP discovery."; 1661 } 1662 } // extended-discovery-timers 1664 grouping global-attributes { 1665 description "Configuration attributes at global level."; 1667 uses instance-attributes; 1668 } // global-attributes 1670 grouping graceful-restart-attributes { 1671 description 1672 "Graceful restart configuration attributes."; 1673 container graceful-restart { 1674 description 1675 "Attributes for graceful restart."; 1676 leaf enable { 1677 type boolean; 1678 description 1679 "Enable or disable graceful restart."; 1680 } 1681 leaf helper-enable { 1682 if-feature graceful-restart-helper-mode; 1683 type boolean; 1684 description 1685 "Enable or disable graceful restart helper mode."; 1686 } 1687 leaf reconnect-time { 1688 type uint16 { 1689 range 10..1800; 1690 } 1691 units seconds; 1692 description 1693 "Specifies the time interval that the remote LDP peer 1694 must wait for the local LDP peer to reconnect after the 1695 remote peer detects the LDP communication failure."; 1696 } 1697 leaf recovery-time { 1698 type uint16 { 1699 range 30..3600; 1700 } 1701 units seconds; 1702 description 1703 "Specifies the time interval, in seconds, that the remote 1704 LDP peer preserves its MPLS forwarding state after 1705 receiving the Initialization message from the restarted 1706 local LDP peer."; 1707 } 1708 leaf forwarding-holdtime { 1709 type uint16 { 1710 range 30..3600; 1711 } 1712 units seconds; 1713 description 1714 "Specifies the time interval, in seconds, before the 1715 termination of the recovery phase."; 1716 } 1717 } // graceful-restart 1718 } // graceful-restart-attributes 1720 grouping graceful-restart-attributes-per-peer { 1721 description 1722 "Per peer graceful restart configuration attributes."; 1723 container graceful-restart { 1724 description 1725 "Attributes for graceful restart."; 1726 leaf enable { 1727 type boolean; 1728 description 1729 "Enable or disable graceful restart."; 1730 } 1731 leaf reconnect-time { 1732 type uint16 { 1733 range 10..1800; 1734 } 1735 units seconds; 1736 description 1737 "Specifies the time interval that the remote LDP peer 1738 must wait for the local LDP peer to reconnect after the 1739 remote peer detects the LDP communication failure."; 1740 } 1741 leaf recovery-time { 1742 type uint16 { 1743 range 30..3600; 1744 } 1745 units seconds; 1746 description 1747 "Specifies the time interval, in seconds, that the remote 1748 LDP peer preserves its MPLS forwarding state after 1749 receiving the Initialization message from the restarted 1750 local LDP peer."; 1751 } 1752 } // graceful-restart 1753 } // graceful-restart-attributes-per-peer 1755 grouping instance-attributes { 1756 description "Configuration attributes at instance level."; 1758 container capability { 1759 description "Configure capability."; 1760 container end-of-lib { 1761 if-feature capability-end-of-lib; 1762 description 1763 "Configure end-of-lib capability."; 1764 leaf enable { 1765 type boolean; 1766 description 1767 "Enable end-of-lib capability."; 1768 } 1769 } 1770 container typed-wildcard-fec { 1771 if-feature capability-typed-wildcard-fec; 1772 description 1773 "Configure typed-wildcard-fec capability."; 1774 leaf enable { 1775 type boolean; 1776 description 1777 "Enable typed-wildcard-fec capability."; 1778 } 1779 } 1780 container upstream-label-assignment { 1781 if-feature capability-upstream-label-assignment; 1782 description 1783 "Configure upstream label assignment capability."; 1784 leaf enable { 1785 type boolean; 1786 description 1787 "Enable upstream label assignment."; 1788 } 1789 } 1790 } // capability 1791 uses graceful-restart-attributes; 1793 leaf igp-synchronization-delay { 1794 type uint16 { 1795 range 3..60; 1796 } 1797 units seconds; 1798 description 1799 "Sets the interval that the LDP waits before notifying the 1800 Interior Gateway Protocol (IGP) that label exchange is 1801 completed so that IGP can start advertising the normal 1802 metric for the link."; 1803 } 1804 leaf lsr-id { 1805 type yang:dotted-quad; 1806 description "Router ID."; 1807 } 1808 } // instance-attributes 1810 grouping ldp-adjacency-ref { 1811 description 1812 "An absolute reference to an LDP adjacency."; 1813 choice hello-adjacency-type { 1814 description 1815 "Interface or targeted adjacency."; 1816 case targeted { 1817 container targeted { 1818 description "Targeted adjacency."; 1819 leaf target-address { 1820 type inet:ip-address; 1821 description 1822 "The target address."; 1823 } 1824 } // targeted 1825 } 1826 case link { 1827 container link { 1828 description "Link adjacency."; 1829 leaf next-hop-interface { 1830 type mpls-interface-ref; 1831 description 1832 "Interface connecting to next-hop."; 1833 } 1834 leaf next-hop-address { 1835 type inet:ip-address; 1836 must "../next-hop-interface" { 1837 description 1838 "Applicable when interface is specified."; 1840 } 1841 description 1842 "IP address of next-hop."; 1843 } 1844 } // link 1845 } 1846 } 1847 } // ldp-adjacency-ref 1849 grouping ldp-fec-event { 1850 description 1851 "A LDP FEC event."; 1852 leaf prefix { 1853 type inet:ip-prefix; 1854 description 1855 "FEC."; 1856 } 1857 } // ldp-fec-event 1859 grouping ldp-peer-ref { 1860 description 1861 "An absolute reference to an LDP peer."; 1862 leaf peer-ref { 1863 type leafref { 1864 path "/rt:routing/rt:control-plane-protocols/mpls-ldp/" 1865 + "peers/peer/lsr-id"; 1866 } 1867 description 1868 "Reference to an LDP peer."; 1869 } 1870 } // ldp-peer-ref 1872 grouping peer-af-policy-container { 1873 description 1874 "LDP policy attribute container under peer address-family."; 1875 container label-policy { 1876 description 1877 "Label policy attributes."; 1878 container advertise { 1879 description 1880 "Label advertising policies."; 1881 leaf prefix-list { 1882 type prefix-list-ref; 1883 description 1884 "Applies the prefix list to outgoing label 1885 advertisements."; 1886 } 1887 } 1888 container accept { 1889 description 1890 "Label advertisement acceptance policies."; 1891 leaf prefix-list { 1892 type prefix-list-ref; 1893 description 1894 "Applies the prefix list to incoming label 1895 advertisements."; 1896 } 1897 } // accept 1898 } // label-policy 1899 } // peer-af-policy-container 1901 grouping peer-attributes { 1902 description "Peer configuration attributes."; 1904 leaf session-ka-holdtime { 1905 type uint16 { 1906 range 45..3600; 1907 } 1908 units seconds; 1909 description 1910 "The time interval after which an inactive LDP session 1911 terminates and the corresponding TCP session closes. 1912 Inactivity is defined as not receiving LDP packets from the 1913 peer."; 1914 } 1915 leaf session-ka-interval { 1916 type uint16 { 1917 range 15..1200; 1918 } 1919 units seconds; 1920 description 1921 "The interval between successive transmissions of keepalive 1922 packets. Keepalive packets are only sent in the absence of 1923 other LDP packets transmitted over the LDP session."; 1924 } 1925 } // peer-attributes 1927 grouping peer-authentication { 1928 description 1929 "Peer authentication attributes."; 1930 leaf session-authentication-md5-password { 1931 type string { 1932 length "1..80"; 1933 } 1934 description 1935 "Assigns an encrypted MD5 password to an LDP 1936 peer"; 1937 } // md5-password 1938 } // peer-authentication 1940 grouping peer-state-derived { 1941 description "Peer derived state attributes."; 1943 container label-advertisement-mode { 1944 description "Label advertisement mode state."; 1945 leaf local { 1946 type label-adv-mode; 1947 description 1948 "Local Label Advertisement Mode."; 1949 } 1950 leaf peer { 1951 type label-adv-mode; 1952 description 1953 "Peer Label Advertisement Mode."; 1954 } 1955 leaf negotiated { 1956 type label-adv-mode; 1957 description 1958 "Negotiated Label Advertisement Mode."; 1959 } 1960 } 1961 leaf next-keep-alive { 1962 type uint16; 1963 units seconds; 1964 description "Time to send the next KeepAlive message."; 1965 } 1967 leaf peer-ldp-id { 1968 type yang:dotted-quad; 1969 description "Peer LDP ID."; 1970 } 1972 container received-peer-state { 1973 description "Peer features."; 1975 uses graceful-restart-attributes-per-peer; 1977 container capability { 1978 description "Configure capability."; 1979 container end-of-lib { 1980 description 1981 "Configure end-of-lib capability."; 1982 leaf enable { 1983 type boolean; 1984 description 1985 "Enable end-of-lib capability."; 1986 } 1987 } 1988 container typed-wildcard-fec { 1989 description 1990 "Configure typed-wildcard-fec capability."; 1991 leaf enable { 1992 type boolean; 1993 description 1994 "Enable typed-wildcard-fec capability."; 1995 } 1996 } 1997 container upstream-label-assignment { 1998 description 1999 "Configure upstream label assignment capability."; 2000 leaf enable { 2001 type boolean; 2002 description 2003 "Enable upstream label assignment."; 2004 } 2005 } 2006 } // capability 2007 } // received-peer-state 2009 container session-holdtime { 2010 description "Session holdtime state."; 2011 leaf peer { 2012 type uint16; 2013 units seconds; 2014 description "Peer holdtime."; 2015 } 2016 leaf negotiated { 2017 type uint16; 2018 units seconds; 2019 description "Negotiated holdtime."; 2020 } 2021 leaf remaining { 2022 type uint16; 2023 units seconds; 2024 description "Remaining holdtime."; 2025 } 2026 } // session-holdtime 2028 leaf session-state { 2029 type enumeration { 2030 enum non-existent { 2031 description "NON EXISTENT state. Transport disconnected."; 2033 } 2034 enum initialized { 2035 description "INITIALIZED state."; 2036 } 2037 enum openrec { 2038 description "OPENREC state."; 2039 } 2040 enum opensent { 2041 description "OPENSENT state."; 2042 } 2043 enum operational { 2044 description "OPERATIONAL state."; 2045 } 2046 } 2047 description 2048 "Representing the operational status."; 2049 } 2051 container tcp-connection { 2052 description "TCP connection state."; 2053 leaf local-address { 2054 type inet:ip-address; 2055 description "Local address."; 2056 } 2057 leaf local-port { 2058 type inet:port-number; 2059 description "Local port."; 2060 } 2061 leaf remote-address { 2062 type inet:ip-address; 2063 description "Remote address."; 2064 } 2065 leaf remote-port { 2066 type inet:port-number; 2067 description "Remote port."; 2068 } 2069 } // tcp-connection 2071 leaf up-time { 2072 type string; 2073 description "Up time. The interval format in ISO 8601."; 2074 } 2076 container statistics { 2077 description 2078 "Statistics objects."; 2080 leaf discontinuity-time { 2081 type yang:date-and-time; 2082 mandatory true; 2083 description 2084 "The time on the most recent occasion at which any one or 2085 more of this interface's counters suffered a 2086 discontinuity. If no such discontinuities have occurred 2087 since the last re-initialization of the local management 2088 subsystem, then this node contains the time the local 2089 management subsystem re-initialized itself."; 2090 } 2092 container received { 2093 description "Inbound statistics."; 2094 uses statistics-peer-received-sent; 2095 } 2096 container sent { 2097 description "Outbound statistics."; 2098 uses statistics-peer-received-sent; 2099 } 2101 leaf total-addresses { 2102 type uint32; 2103 description 2104 "The number of learned addresses."; 2105 } 2106 leaf total-labels { 2107 type uint32; 2108 description 2109 "The number of learned labels."; 2110 } 2111 leaf total-fec-label-bindings { 2112 type uint32; 2113 description 2114 "The number of learned label-address bindings."; 2115 } 2116 } // statistics 2117 } // peer-state-derived 2119 grouping policy-container { 2120 description 2121 "LDP policy attributes."; 2122 container label-policy { 2123 description 2124 "Label policy attributes."; 2125 container assign { 2126 if-feature policy-label-assignment-config; 2127 description 2128 "Label assignment policies"; 2130 container independent-mode { 2131 description 2132 "Independent label policy attributes."; 2133 leaf prefix-list { 2134 type prefix-list-ref; 2135 description 2136 "Assign labels according to certain prefixes."; 2137 } 2138 } // independent-mode 2139 container ordered-mode { 2140 if-feature policy-ordered-label-config; 2141 description 2142 "Ordered label policy attributes."; 2143 leaf egress-prefix-list { 2144 type prefix-list-ref; 2145 description 2146 "Assign labels according to certain prefixes for 2147 egress LSR."; 2148 } 2149 } // ordered-mode 2150 } // assign 2151 container advertise { 2152 description 2153 "Label advertising policies."; 2154 container egress-explicit-null { 2155 description 2156 "Enables an egress router to advertise an 2157 explicit null label (value 0) in place of an 2158 implicit null label (value 3) to the 2159 penultimate hop router."; 2160 leaf enable { 2161 type boolean; 2162 description 2163 "'true' to enable explicit null."; 2164 } 2165 } 2166 leaf prefix-list { 2167 type prefix-list-ref; 2168 description 2169 "Applies the prefix list to outgoing label 2170 advertisements."; 2171 } 2172 } // advertise 2173 container accept { 2174 description 2175 "Label advertisement acceptance policies."; 2176 leaf prefix-list { 2177 type prefix-list-ref; 2178 description 2179 "Applies the prefix list to incoming label 2180 advertisements."; 2181 } 2182 } // accept 2183 } // label-policy 2184 } // policy-container 2186 grouping statistics-peer-received-sent { 2187 description 2188 "Inbound and outbound statistic counters."; 2189 leaf total-octets { 2190 type yang:counter64; 2191 description 2192 "The total number of octets sent or received."; 2193 } 2194 leaf total-messages { 2195 type yang:counter64; 2196 description 2197 "The number of messages sent or received."; 2198 } 2199 leaf address { 2200 type yang:counter64; 2201 description 2202 "The number of address messages sent or received."; 2203 } 2204 leaf address-withdraw { 2205 type yang:counter64; 2206 description 2207 "The number of address-withdraw messages sent or received."; 2208 } 2209 leaf initialization { 2210 type yang:counter64; 2211 description 2212 "The number of initialization messages sent or received."; 2213 } 2214 leaf keepalive { 2215 type yang:counter64; 2216 description 2217 "The number of keepalive messages sent or received."; 2218 } 2219 leaf label-abort-request { 2220 type yang:counter64; 2221 description 2222 "The number of label-abort-request messages sent or 2223 received."; 2224 } 2225 leaf label-mapping { 2226 type yang:counter64; 2227 description 2228 "The number of label-mapping messages sent or received."; 2229 } 2230 leaf label-release { 2231 type yang:counter64; 2232 description 2233 "The number of label-release messages sent or received."; 2234 } 2235 leaf label-request { 2236 type yang:counter64; 2237 description 2238 "The number of label-request messages sent or received."; 2239 } 2240 leaf label-withdraw { 2241 type yang:counter64; 2242 description 2243 "The number of label-withdraw messages sent or received."; 2244 } 2245 leaf notification { 2246 type yang:counter64; 2247 description 2248 "The number of messages sent or received."; 2249 } 2250 } // statistics-peer-received-sent 2252 /* 2253 * Configuration data nodes 2254 */ 2256 augment "/rt:routing/rt:control-plane-protocols" { 2257 description "LDP augmentation."; 2259 container mpls-ldp { 2260 presence "Container for LDP protocol."; 2261 description 2262 "Container for LDP protocol."; 2264 container global { 2265 description 2266 "Global attributes for LDP."; 2267 container config { 2268 description 2269 "Configuration data."; 2270 uses global-attributes; 2271 } 2272 container state { 2273 config false; 2274 description 2275 "Operational state data."; 2276 uses global-attributes; 2277 } 2279 list address-family { 2280 key "afi"; 2281 description 2282 "Per-vrf per-af params."; 2283 leaf afi { 2284 type ldp-address-family; 2285 description 2286 "Address family type value."; 2287 } 2289 container config { 2290 description 2291 "Configuration data."; 2292 leaf enable { 2293 type boolean; 2294 description 2295 "'true' to enable the address family."; 2296 } 2297 uses policy-container; 2299 container ipv4 { 2300 when "../../afi = 'ipv4'" { 2301 description 2302 "Only for IPv4."; 2303 } 2304 description 2305 "IPv4 address family."; 2306 leaf transport-address { 2307 type inet:ipv4-address; 2308 description 2309 "The transport address advertised in LDP Hello 2310 messages."; 2311 } 2312 } // ipv4 2313 container ipv6 { 2314 when "../../afi = 'ipv6'" { 2315 description 2316 "Only for IPv6."; 2317 } 2318 description 2319 "IPv6 address family."; 2320 leaf transport-address { 2321 type inet:ipv6-address; 2322 description 2323 "The transport address advertised in LDP Hello 2324 messages."; 2325 } 2326 } // ipv6 2327 } 2328 container state { 2329 config false; 2330 description 2331 "Operational state data."; 2332 leaf enable { 2333 type boolean; 2334 description 2335 "'true' to enable the address family."; 2336 } 2338 uses policy-container; 2340 container ipv4 { 2341 when "../../afi = 'ipv4'" { 2342 description 2343 "Only for IPv4."; 2344 } 2345 description 2346 "IPv4 address family."; 2347 leaf transport-address { 2348 type inet:ipv4-address; 2349 description 2350 "The transport address advertised in LDP Hello 2351 messages."; 2352 } 2354 container bindings { 2355 description 2356 "LDP address and label binding information."; 2357 list address { 2358 key "address"; 2359 description 2360 "List of address bindings."; 2361 leaf address { 2362 type inet:ipv4-address; 2363 description 2364 "Binding address."; 2365 } 2366 uses binding-address-state-attributes; 2367 } // binding-address 2369 list fec-label { 2370 key "fec"; 2371 description 2372 "List of label bindings."; 2373 leaf fec { 2374 type inet:ipv4-prefix; 2375 description 2376 "Prefix FEC."; 2377 } 2378 uses binding-label-state-attributes; 2379 } // fec-label 2380 } // binding 2381 } // ipv4 2382 container ipv6 { 2383 when "../../afi = 'ipv6'" { 2384 description 2385 "Only for IPv6."; 2386 } 2387 description 2388 "IPv6 address family."; 2389 leaf transport-address { 2390 type inet:ipv6-address; 2391 description 2392 "The transport address advertised in LDP Hello 2393 messages."; 2394 } 2396 container binding { 2397 description 2398 "LDP address and label binding information."; 2399 list address { 2400 key "address"; 2401 description 2402 "List of address bindings."; 2403 leaf address { 2404 type inet:ipv6-address; 2405 description 2406 "Binding address."; 2407 } 2408 uses binding-address-state-attributes; 2409 } // binding-address 2411 list fec-label { 2412 key "fec"; 2413 description 2414 "List of label bindings."; 2415 leaf fec { 2416 type inet:ipv6-prefix; 2417 description 2418 "Prefix FEC."; 2419 } 2420 uses binding-label-state-attributes; 2421 } // fec-label 2422 } // binding 2423 } // ipv6 2424 } // state 2425 } // address-family 2427 container discovery { 2428 description 2429 "Neibgbor discovery configuration."; 2431 container interfaces { 2432 description 2433 "A list of interfaces for basic descovery."; 2434 container config { 2435 description 2436 "Configuration data."; 2437 uses basic-discovery-timers; 2438 } 2439 container state { 2440 config false; 2441 description 2443 "Operational state data."; 2444 uses basic-discovery-timers; 2445 } 2447 list interface { 2448 key "interface"; 2449 description 2450 "List of LDP interfaces."; 2451 leaf interface { 2452 type mpls-interface-ref; 2453 description 2454 "Interface."; 2455 } 2456 container config { 2457 description 2458 "Configuration data."; 2459 uses basic-discovery-timers { 2460 if-feature per-interface-timer-config; 2461 } 2462 leaf igp-synchronization-delay { 2463 if-feature per-interface-timer-config; 2464 type uint16 { 2465 range 3..60; 2467 } 2468 units seconds; 2469 description 2470 "Sets the interval that the LDP waits before 2471 notifying the Interior Gateway Protocol (IGP) 2472 that label exchange is completed so that IGP 2473 can start advertising the normal metric for 2474 the link."; 2475 } 2476 } 2477 container state { 2478 config false; 2479 description 2480 "Operational state data."; 2481 uses basic-discovery-timers { 2482 if-feature per-interface-timer-config; 2483 } 2484 leaf igp-synchronization-delay { 2485 if-feature per-interface-timer-config; 2486 type uint16 { 2487 range 3..60; 2488 } 2489 units seconds; 2490 description 2491 "Sets the interval that the LDP waits before 2492 notifying the Interior Gateway Protocol (IGP) 2493 that label exchange is completed so that IGP 2494 can start advertising the normal metric for 2495 the link."; 2496 } 2497 leaf next-hello { 2498 type uint16; 2499 units seconds; 2500 description "Time to send the next hello message."; 2501 } 2502 } // state 2504 list address-family { 2505 key "afi"; 2506 description 2507 "Per-vrf per-af params."; 2508 leaf afi { 2509 type ldp-address-family; 2510 description 2511 "Address family type value."; 2512 } 2513 container config { 2514 description 2515 "Configuration data."; 2516 leaf enable { 2517 type boolean; 2518 description 2519 "Enable the address family on the interface."; 2520 } 2522 container ipv4 { 2523 must "/if:interfaces/if:interface" 2524 + "[if:name = current()/../../../interface]/" 2525 + "ip:ipv4" { 2526 description 2527 "Only if IPv4 is enabled on the interface."; 2528 } 2529 description 2530 "IPv4 address family."; 2531 leaf transport-address { 2532 type union { 2533 type enumeration { 2534 enum "use-interface-address" { 2535 description 2536 "Use interface address as the transport 2537 address."; 2538 } 2539 } 2540 type inet:ipv4-address; 2541 } 2542 description 2543 "IP address to be advertised as the LDP 2544 transport address."; 2545 } 2546 } 2548 container ipv6 { 2549 must "/if:interfaces/if:interface" 2550 + "[if:name = current()/../../../interface]/" 2551 + "ip:ipv6" { 2552 description 2553 "Only if IPv6 is enabled on the interface."; 2554 } 2555 description 2556 "IPv6 address family."; 2557 leaf transport-address { 2558 type union { 2559 type enumeration { 2560 enum "use-interface-address" { 2561 description 2562 "Use interface address as the transport 2563 address."; 2564 } 2565 } 2566 type inet:ipv4-address; 2567 } 2568 description 2569 "IP address to be advertised as the LDP 2570 transport address."; 2571 } 2572 } // ipv6 2573 } 2574 container state { 2575 config false; 2576 description 2577 "Operational state data."; 2578 leaf enable { 2579 type boolean; 2580 description 2581 "Enable the address family on the interface."; 2582 } 2584 container ipv4 { 2585 must "/if:interfaces/if:interface" 2586 + "[if:name = current()/../../../interface]/" 2587 + "ip:ipv4" { 2588 description 2589 "Only if IPv4 is enabled on the interface."; 2590 } 2591 description 2592 "IPv4 address family."; 2593 leaf transport-address { 2594 type union { 2595 type enumeration { 2597 enum "use-interface-address" { 2598 description 2599 "Use interface address as the transport 2600 address."; 2601 } 2602 } 2603 type inet:ipv4-address; 2604 } 2605 description 2606 "IP address to be advertised as the LDP 2607 transport address."; 2608 } 2610 list hello-adjacencies { 2611 key "adjacent-address"; 2612 description "List of hello adjacencies."; 2614 leaf adjacent-address { 2615 type inet:ipv4-address; 2616 description 2617 "Neighbor address of the hello adjacency."; 2618 } 2620 uses adjacency-state-attributes; 2622 leaf peer { 2623 type leafref { 2624 path "../../../../../../../../../peers/peer/" 2625 + "lsr-id"; 2626 } 2627 description 2628 "LDP peer from this adjacency."; 2629 } 2630 } // hello-adjacencies 2631 } 2632 container ipv6 { 2633 must "/if:interfaces/if:interface" 2634 + "[if:name = current()/../../../interface]/" 2635 + "ip:ipv6" { 2636 description 2637 "Only if IPv6 is enabled on the interface."; 2638 } 2639 description 2640 "IPv6 address family."; 2641 leaf transport-address { 2642 type union { 2643 type enumeration { 2644 enum "use-interface-address" { 2645 description 2646 "Use interface address as the transport 2647 address."; 2648 } 2649 } 2650 type inet:ipv4-address; 2651 } 2652 description 2653 "IP address to be advertised as the LDP 2654 transport address."; 2655 } 2657 list hello-adjacencies { 2658 key "adjacent-address"; 2659 description "List of hello adjacencies."; 2661 leaf adjacent-address { 2662 type inet:ipv6-address; 2663 description 2664 "Neighbor address of the hello adjacency."; 2665 } 2667 uses adjacency-state-attributes; 2669 leaf peer { 2670 type leafref { 2671 path "../../../../../../../../../peers/peer/" 2672 + "lsr-id"; 2673 } 2674 description 2675 "LDP peer from this adjacency."; 2676 } 2677 } // hello-adjacencies 2678 } // ipv6 2679 } 2680 } // address-family 2681 } // list interface 2682 } // interfaces 2684 container targeted 2685 { 2686 description 2687 "A list of targeted neighbors for extended discovery."; 2688 container config { 2690 description 2691 "Configuration data."; 2692 uses extended-discovery-timers; 2693 uses extended-discovery-policy-attributes; 2694 } 2695 container state { 2696 config false; 2697 description 2698 "Operational state data."; 2699 uses extended-discovery-timers; 2700 uses extended-discovery-policy-attributes; 2701 } 2703 list address-family { 2704 key "afi"; 2705 description 2706 "Per-af params."; 2708 leaf afi { 2709 type ldp-address-family; 2710 description 2711 "Address family type value."; 2712 } 2714 container state { 2715 config false; 2716 description 2717 "Operational state data."; 2719 container ipv4 { 2720 when "../../afi = 'ipv4'" { 2721 description 2722 "For IPv4."; 2723 } 2724 description 2725 "IPv4 address family."; 2726 list hello-adjacencies { 2727 key "local-address adjacent-address"; 2728 description "List of hello adjacencies."; 2730 leaf local-address { 2731 type inet:ipv4-address; 2732 description 2733 "Local address of the hello adjacency."; 2734 } 2735 leaf adjacent-address { 2736 type inet:ipv4-address; 2737 description 2738 "Neighbor address of the hello adjacency."; 2739 } 2741 uses adjacency-state-attributes; 2743 leaf peer { 2744 type leafref { 2745 path "../../../../../../../../peers/peer/" 2746 + "lsr-id"; 2747 } 2748 description 2749 "LDP peer from this adjacency."; 2750 } 2751 } // hello-adjacencies 2752 } // ipv4 2754 container ipv6 { 2755 when "../../afi = 'ipv6'" { 2756 description 2757 "For IPv6."; 2758 } 2759 description 2760 "IPv6 address family."; 2761 list hello-adjacencies { 2762 key "local-address adjacent-address"; 2763 description "List of hello adjacencies."; 2765 leaf local-address { 2766 type inet:ipv6-address; 2767 description 2768 "Local address of the hello adjacency."; 2769 } 2770 leaf adjacent-address { 2771 type inet:ipv6-address; 2772 description 2773 "Neighbor address of the hello adjacency."; 2774 } 2776 uses adjacency-state-attributes; 2778 leaf peer { 2779 type leafref { 2780 path "../../../../../../../../peers/peer/" 2781 + "lsr-id"; 2782 } 2783 description 2784 "LDP peer from this adjacency."; 2785 } 2786 } // hello-adjacencies 2787 } // ipv6 2788 } // state 2790 container ipv4 { 2791 when "../afi = 'ipv4'" { 2792 description 2793 "For IPv4."; 2794 } 2795 description 2796 "IPv4 address family."; 2797 list target { 2798 key "adjacent-address"; 2799 description 2800 "Targeted discovery params."; 2802 leaf adjacent-address { 2803 type inet:ipv4-address; 2804 description 2805 "Configures a remote LDP neighbor and enables 2806 extended LDP discovery of the specified 2807 neighbor."; 2808 } 2809 container config { 2810 description 2811 "Configuration data."; 2812 leaf enable { 2813 type boolean; 2814 description 2815 "Enable the target."; 2816 } 2817 leaf local-address { 2818 type inet:ipv4-address; 2819 description 2820 "The local address."; 2821 } 2822 } 2823 container state { 2824 config false; 2825 description 2826 "Operational state data."; 2827 leaf enable { 2828 type boolean; 2829 description 2830 "Enable the target."; 2831 } 2832 leaf local-address { 2833 type inet:ipv4-address; 2834 description 2835 "The local address."; 2836 } 2837 } // state 2838 } 2839 } // ipv4 2840 container ipv6 { 2841 when "../afi = 'ipv6'" { 2842 description 2843 "For IPv6."; 2844 } 2845 description 2846 "IPv6 address family."; 2847 list target { 2848 key "adjacent-address"; 2849 description 2850 "Targeted discovery params."; 2852 leaf adjacent-address { 2853 type inet:ipv6-address; 2854 description 2855 "Configures a remote LDP neighbor and enables 2856 extended LDP discovery of the specified 2857 neighbor."; 2858 } 2859 container config { 2860 description 2861 "Configuration data."; 2862 leaf enable { 2863 type boolean; 2864 description 2865 "Enable the target."; 2866 } 2867 leaf local-address { 2868 type inet:ipv6-address; 2869 description 2870 "The local address."; 2871 } 2872 } 2873 container state { 2874 config false; 2875 description 2876 "Operational state data."; 2877 leaf enable { 2878 type boolean; 2879 description 2880 "Enable the target."; 2881 } 2882 leaf local-address { 2883 type inet:ipv6-address; 2884 description 2885 "The local address."; 2886 } 2887 } // state 2888 } 2889 } // ipv6 2890 } // address-family 2891 } // targeted 2892 } // discovery 2894 container forwarding-nexthop { 2895 if-feature forwarding-nexthop-config; 2896 description 2897 "Configuration for forwarding nexthop."; 2899 container interfaces { 2900 description 2901 "A list of interfaces on which forwarding is 2902 disabled."; 2904 list interface { 2905 key "interface"; 2906 description 2907 "List of LDP interfaces."; 2908 leaf interface { 2909 type mpls-interface-ref; 2910 description 2911 "Interface."; 2912 } 2913 list address-family { 2914 key "afi"; 2915 description 2916 "Per-vrf per-af params."; 2917 leaf afi { 2918 type ldp-address-family; 2919 description 2920 "Address family type value."; 2921 } 2922 container config { 2923 description 2924 "Configuration data."; 2925 leaf ldp-disable { 2926 type boolean; 2927 description 2928 "Disable LDP forwarding on the interface."; 2929 } 2930 } 2931 container state { 2932 config false; 2933 description 2934 "Operational state data."; 2935 leaf ldp-disable { 2936 type boolean; 2937 description 2938 "Disable LDP forwarding on the interface."; 2939 } 2940 } 2941 } // address-family 2942 } // list interface 2943 } // interfaces 2944 } // forwarding-nexthop 2945 uses policy-container { 2946 if-feature all-af-policy-config; 2947 } 2949 } // global 2951 container peers { 2952 description 2953 "Peers configuration attributes."; 2955 container config { 2956 description 2957 "Configuration data."; 2958 uses peer-authentication { 2959 if-feature global-session-authentication; 2960 } 2961 uses peer-attributes; 2963 container session-downstream-on-demand { 2964 if-feature session-downstream-on-demand-config; 2965 description 2966 "Session downstream-on-demand attributes."; 2967 leaf enable { 2968 type boolean; 2969 description 2970 "'true' if session downstream-on-demand is enabled."; 2971 } 2972 leaf peer-list { 2973 type peer-list-ref; 2974 description 2975 "The name of a peer ACL."; 2976 } 2977 } 2978 } 2979 container state { 2980 config false; 2981 description 2982 "Operational state data."; 2983 uses peer-authentication { 2984 if-feature global-session-authentication; 2985 } 2986 uses peer-attributes; 2988 container session-downstream-on-demand { 2989 if-feature session-downstream-on-demand-config; 2990 description 2991 "Session downstream-on-demand attributes."; 2992 leaf enable { 2993 type boolean; 2994 description 2995 "'true' if session downstream-on-demand is enabled."; 2996 } 2997 leaf peer-list { 2998 type peer-list-ref; 2999 description 3000 "The name of a peer ACL."; 3001 } 3002 } 3003 } 3005 list peer { 3006 key "lsr-id"; 3007 description 3008 "List of peers."; 3010 leaf lsr-id { 3011 type yang:dotted-quad; 3012 description "LSR ID."; 3013 } 3015 container config { 3016 description 3017 "Configuration data."; 3018 leaf admin-down { 3019 type boolean; 3020 default false; 3021 description 3022 "'true' to disable the peer."; 3023 } 3025 container capability { 3026 description 3027 "Per peer capability"; 3028 } 3030 uses peer-af-policy-container { 3031 if-feature all-af-policy-config; 3032 } 3034 uses peer-authentication; 3036 uses graceful-restart-attributes-per-peer { 3037 if-feature per-peer-graceful-restart-config; 3038 } 3040 uses peer-attributes { 3041 if-feature per-peer-session-attributes-config; 3042 } 3044 container address-family { 3045 description 3046 "Per-vrf per-af params."; 3047 container ipv4 { 3048 description 3049 "IPv4 address family."; 3050 uses peer-af-policy-container; 3051 } 3052 container ipv6 { 3053 description 3054 "IPv6 address family."; 3055 uses peer-af-policy-container; 3056 } // ipv6 3057 } // address-family 3058 } 3059 container state { 3060 config false; 3061 description 3062 "Operational state data."; 3063 leaf admin-down { 3064 type boolean; 3065 default false; 3066 description 3067 "'true' to disable the peer."; 3068 } 3070 container capability { 3071 description 3072 "Per peer capability"; 3073 } 3075 uses peer-af-policy-container { 3076 if-feature all-af-policy-config; 3077 } 3079 uses peer-authentication; 3081 uses graceful-restart-attributes-per-peer { 3082 if-feature per-peer-graceful-restart-config; 3083 } 3085 uses peer-attributes { 3086 if-feature per-peer-session-attributes-config; 3087 } 3089 container address-family { 3090 description 3091 "Per-vrf per-af params."; 3092 container ipv4 { 3093 description 3094 "IPv4 address family."; 3095 uses peer-af-policy-container; 3097 list hello-adjacencies { 3098 key "local-address adjacent-address"; 3099 description "List of hello adjacencies."; 3101 leaf local-address { 3102 type inet:ipv4-address; 3103 description 3104 "Local address of the hello adjacency."; 3105 } 3106 leaf adjacent-address { 3107 type inet:ipv4-address; 3108 description 3109 "Neighbor address of the hello adjacency."; 3110 } 3112 uses adjacency-state-attributes; 3114 leaf interface { 3115 type mpls-interface-ref; 3116 description "Interface for this adjacency."; 3117 } 3118 } // hello-adjacencies 3119 } // ipv4 3120 container ipv6 { 3121 description 3122 "IPv6 address family."; 3123 uses peer-af-policy-container; 3125 list hello-adjacencies { 3126 key "local-address adjacent-address"; 3127 description "List of hello adjacencies."; 3129 leaf local-address { 3130 type inet:ipv6-address; 3131 description 3132 "Local address of the hello adjacency."; 3133 } 3134 leaf adjacent-address { 3135 type inet:ipv6-address; 3136 description 3137 "Neighbor address of the hello adjacency."; 3138 } 3140 uses adjacency-state-attributes; 3141 leaf interface { 3142 type mpls-interface-ref; 3143 description "Interface for this adjacency."; 3144 } 3145 } // hello-adjacencies 3146 } // ipv6 3147 } // address-family 3149 uses peer-state-derived; 3150 } // state 3151 } // list peer 3152 } // peers 3153 } // container mpls-ldp 3154 } 3156 /* 3157 * RPCs 3158 */ 3159 rpc mpls-ldp-clear-peer { 3160 description 3161 "Clears the session to the peer."; 3162 input { 3163 leaf lsr-id { 3164 type union { 3165 type yang:dotted-quad; 3166 type uint32; 3167 } 3168 description 3169 "LSR ID of peer to be cleared. If this is not provided 3170 then all peers are cleared"; 3171 } 3172 } 3173 } 3175 rpc mpls-ldp-clear-hello-adjacency { 3176 description 3177 "Clears the hello adjacency"; 3178 input { 3179 container hello-adjacency { 3180 description 3181 "Link adjacency or targettted adjacency. If this is not 3182 provided then all hello adjacencies are cleared"; 3183 choice hello-adjacency-type { 3184 description "Adjacency type."; 3185 case targeted { 3186 container targeted { 3187 presence "Present to clear targeted adjacencies."; 3188 description 3189 "Clear targeted adjacencies."; 3190 leaf target-address { 3191 type inet:ip-address; 3192 description 3193 "The target address. If this is not provided then 3194 all targeted adjacencies are cleared"; 3195 } 3196 } // targeted 3197 } 3198 case link { 3199 container link { 3200 presence "Present to clear link adjacencies."; 3201 description 3202 "Clear link adjacencies."; 3203 leaf next-hop-interface { 3204 type mpls-interface-ref; 3205 description 3207 "Interface connecting to next-hop. If this is not 3208 provided then all link adjacencies are cleared."; 3209 } 3210 leaf next-hop-address { 3211 type inet:ip-address; 3212 must "../next-hop-interface" { 3213 description 3214 "Applicable when interface is specified."; 3215 } 3216 description 3217 "IP address of next-hop. If this is not provided 3218 then adjacencies to all next-hops on the given 3219 interface are cleared."; 3220 } // next-hop-address 3221 } // link 3222 } 3223 } 3224 } 3225 } 3226 } 3228 rpc mpls-ldp-clear-peer-statistics { 3229 description 3230 "Clears protocol statistics (e.g. sent and received 3231 counters)."; 3232 input { 3233 leaf lsr-id { 3234 type union { 3235 type yang:dotted-quad; 3236 type uint32; 3238 } 3239 description 3240 "LSR ID of peer whose statistic are to be cleared. 3241 If this is not provided then all peers statistics are 3242 cleared"; 3243 } 3244 } 3245 } 3247 /* 3248 * Notifications 3249 */ 3250 notification mpls-ldp-peer-event { 3252 description 3253 "Notification event for a change of LDP peer operational 3254 status."; 3255 leaf event-type { 3256 type oper-status-event-type; 3257 description "Event type."; 3258 } 3259 uses ldp-peer-ref; 3260 } 3262 notification mpls-ldp-hello-adjacency-event { 3263 description 3264 "Notification event for a change of LDP adjacency operational 3265 status."; 3266 leaf event-type { 3267 type oper-status-event-type; 3268 description "Event type."; 3269 } 3270 uses ldp-adjacency-ref; 3271 } 3273 notification mpls-ldp-fec-event { 3274 description 3275 "Notification event for a change of FEC status."; 3276 leaf event-type { 3277 type oper-status-event-type; 3278 description "Event type."; 3279 } 3280 uses ldp-fec-event; 3281 } 3282 } 3284 3285 Figure 13 3287 10. Security Considerations 3289 The configuration, state, action and notification data defined using 3290 YANG data models in this document are likely to be accessed via the 3291 protocols such as NETCONF [RFC6241] etc. 3293 Hence, YANG implementations MUST comply with the security 3294 requirements specified in section 15 of [RFC6020]. Additionally, 3295 NETCONF implementations MUST comply with the security requirements 3296 specified in sections 2.2, 2.3 and 9 of [RFC6241] as well as section 3297 3.7 of [RFC6536]. 3299 11. IANA Considerations 3301 This document does not extend LDP base protocol specifiction and 3302 hence there are no IANA considerations. 3304 Note to the RFC Editor: Please remove IANA section before the 3305 publication. 3307 12. Acknowledgments 3309 The authors would like to acknowledge Eddie Chami, Nagendra Kumar, 3310 Mannan Venkatesan, Pavan Beeram for their contribution to this 3311 document. We also acknowledge Ladislav Lhotka for his useful 3312 comments as the YANG Doctor. 3314 13. References 3316 13.1. Normative References 3318 [I-D.ietf-mpls-base-yang] 3319 Raza, K., Gandhi, R., Liu, X., Beeram, V., Saad, T., 3320 Bryskin, I., Chen, X., Jones, R., and B. Wen, "A YANG Data 3321 Model for MPLS Base", draft-ietf-mpls-base-yang-01 (work 3322 in progress), July 2016. 3324 [I-D.ietf-mpls-ldp-mldp-yang] 3325 Raza, K., Asati, R., Liu, X., Esale, S., Chen, X., and H. 3326 Shah, "YANG Data Model for MPLS LDP and mLDP", draft-ietf- 3327 mpls-ldp-mldp-yang-00 (work in progress), August 2016. 3329 [I-D.ietf-netmod-routing-cfg] 3330 Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 3331 Management", draft-ietf-netmod-routing-cfg-25 (work in 3332 progress), November 2016. 3334 [I-D.rtgyangdt-rtgwg-ni-model] 3335 Berger, L., Hopps, C., Lindem, A., and D. Bogdanovic, 3336 "Network Instance Model", draft-rtgyangdt-rtgwg-ni- 3337 model-00 (work in progress), May 2016. 3339 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3340 Requirement Levels", BCP 14, RFC 2119, 3341 DOI 10.17487/RFC2119, March 1997, 3342 . 3344 [RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful 3345 Restart Mechanism for Label Distribution Protocol", 3346 RFC 3478, DOI 10.17487/RFC3478, February 2003, 3347 . 3349 [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., 3350 "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, 3351 October 2007, . 3353 [RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream 3354 Label Assignment and Context-Specific Label Space", 3355 RFC 5331, DOI 10.17487/RFC5331, August 2008, 3356 . 3358 [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. 3359 Le Roux, "LDP Capabilities", RFC 5561, 3360 DOI 10.17487/RFC5561, July 2009, 3361 . 3363 [RFC5918] Asati, R., Minei, I., and B. Thomas, "Label Distribution 3364 Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class 3365 (FEC)", RFC 5918, DOI 10.17487/RFC5918, August 2010, 3366 . 3368 [RFC5919] Asati, R., Mohapatra, P., Chen, E., and B. Thomas, 3369 "Signaling LDP Label Advertisement Completion", RFC 5919, 3370 DOI 10.17487/RFC5919, August 2010, 3371 . 3373 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 3374 the Network Configuration Protocol (NETCONF)", RFC 6020, 3375 DOI 10.17487/RFC6020, October 2010, 3376 . 3378 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 3379 and A. Bierman, Ed., "Network Configuration Protocol 3380 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 3381 . 3383 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 3384 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 3385 November 2011, . 3387 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 3388 Protocol (NETCONF) Access Control Model", RFC 6536, 3389 DOI 10.17487/RFC6536, March 2012, 3390 . 3392 [RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. 3393 Papneja, "Updates to LDP for IPv6", RFC 7552, 3394 DOI 10.17487/RFC7552, June 2015, 3395 . 3397 13.2. Informative References 3399 [I-D.ietf-rtgwg-policy-model] 3400 Shaikh, A., Shakir, R., D'Souza, K., and C. Chase, 3401 "Routing Policy Configuration Model for Service Provider 3402 Networks", draft-ietf-rtgwg-policy-model-01 (work in 3403 progress), April 2016. 3405 [I-D.openconfig-netmod-opstate] 3406 Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling 3407 of Operational State Data in YANG", draft-openconfig- 3408 netmod-opstate-01 (work in progress), July 2015. 3410 [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private 3411 Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February 3412 2006, . 3414 [RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. 3415 King, "LDP Extensions for Multi-Topology", RFC 7307, 3416 DOI 10.17487/RFC7307, July 2014, 3417 . 3419 Appendix A. Additional Contributors 3421 Reshad Rahman 3422 Cisco Systems Inc. 3423 Email: rrahman@cisco.com 3425 Stephane Litkowski 3426 Orange. 3427 Email: stephane.litkowski@orange.com 3429 Danial Johari 3430 Cisco Systems Inc. 3431 Email: dajohari@cisco.com 3433 Authors' Addresses 3435 Kamran Raza 3436 Cisco Systems, Inc. 3438 Email: skraza@cisco.com 3439 Rajiv Asati 3440 Cisco Systems, Inc. 3441 Email: rajiva@cisco.com 3443 Xufeng Liu 3444 Kuatro Technologies 3445 Email: xliu@kuatrotech.com 3447 Jeff Tantsura 3448 Email: jefftant@gmail.com 3450 Santosh Esale 3451 Juniper Networks 3452 Email: sesale@juniper.net 3454 Xia Chen 3455 Huawei Technologies 3456 Email: jescia.chenxia@huawei.com 3458 Loa Andersson 3459 Huawei Technologies 3460 Email: loa@pi.nu 3462 Himanshu Shah 3463 Ciena Corporation 3464 Email: hshah@ciena.com 3466 Matthew Bocci 3467 Alcatel-Lucent 3468 Email: matthew.bocci@alcatel-lucent.com