idnits 2.17.1 draft-ietf-mpls-ldp-yang-02.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == The page length should not exceed 58 lines per page, but there was 2 longer pages, the longest (page 87) being 60 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 75 instances of too long lines in the document, the longest one being 33 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 496 has weird spacing: '...address ine...' == Line 510 has weird spacing: '... lsr-id yan...' == Line 595 has weird spacing: '...address ine...' == Line 617 has weird spacing: '... lsr-id yan...' == Line 811 has weird spacing: '...nt-type adv...' == (18 more instances...) -- The document date (September 14, 2017) is 2409 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-05 == Outdated reference: A later version (-11) exists of draft-ietf-mpls-mldp-yang-01 -- Possible downref: Normative reference to a draft: ref. 'I-D.ietf-mpls-mldp-yang' ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) == Outdated reference: A later version (-31) exists of draft-ietf-rtgwg-policy-model-01 Summary: 3 errors (**), 0 flaws (~~), 13 warnings (==), 2 comments (--). 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: March 18, 2018 5 X. Liu 6 Jabil 8 S. Esale 9 Juniper Networks 11 X. Chen 12 Huawei Technologies 14 H. Shah 15 Ciena Corporation 17 September 14, 2017 19 YANG Data Model for MPLS LDP 20 draft-ietf-mpls-ldp-yang-02 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 is augmented to define Multipoint LDP 27 (mLDP) model. 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 March 18, 2018. 46 Copyright Notice 48 Copyright (c) 2017 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 64 1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 3 65 2. Specification of Requirements . . . . . . . . . . . . . . . . 4 66 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 67 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 8 68 4.1. Configuration Tree . . . . . . . . . . . . . . . . . . . 11 69 4.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 11 70 4.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 13 71 4.2. Configuration Hierarchy . . . . . . . . . . . . . . . . . 15 72 4.2.1. Per-VRF parameters . . . . . . . . . . . . . . . . . 16 73 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 18 74 5.1. Operational Tree . . . . . . . . . . . . . . . . . . . . 18 75 5.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 18 76 5.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 22 77 5.2. Derived States . . . . . . . . . . . . . . . . . . . . . 26 78 5.2.1. Adjacency state . . . . . . . . . . . . . . . . . . . 26 79 5.2.2. Peer state . . . . . . . . . . . . . . . . . . . . . 27 80 5.2.3. Bindings state . . . . . . . . . . . . . . . . . . . 28 81 5.2.4. Capabilities state . . . . . . . . . . . . . . . . . 30 82 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 31 83 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 84 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 32 85 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 32 86 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 33 87 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 61 88 10. Security Considerations . . . . . . . . . . . . . . . . . . . 84 89 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 84 90 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 85 91 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 85 92 13.1. Normative References . . . . . . . . . . . . . . . . . . 85 93 13.2. Informative References . . . . . . . . . . . . . . . . . 87 95 Appendix A. Additional Contributors . . . . . . . . . . . . . . 87 96 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 87 98 1. Introduction 100 The Network Configuration Protocol (NETCONF) [RFC6241] is one of the 101 network management protocols that defines mechanisms to manage 102 network devices. YANG [RFC6020] is a modular language that 103 represents data structures in an XML tree format, and is used as a 104 data modelling language for the NETCONF. 106 This document introduces a YANG data model for MPLS Label 107 Distribution Protocol (LDP) [RFC5036]. This model also covers LDP 108 IPv6 [RFC7552] and LDP capabilities [RFC5561]. 110 The data model is defined for following constructs that are used for 111 managing the protocol: 113 o Configuration 115 o Operational State 117 o Executables (Actions) 119 o Notifications 121 This document is organized to define the data model for each of the 122 above constructs in the sequence as listed above. 124 1.1. Base and Extended 126 The configuration and state items are divided into following two 127 broad categories: 129 o Base 131 o Extended 133 The "base" category contains the basic and fundamental features that 134 are covered in LDP base specification [RFC5036] and constitute the 135 minumum requirements for a typical base LDP deployment. Whereas, the 136 "extended" category contains all other non-base features. All the 137 items in a base category are mandatory and hence no "if-feature" is 138 allowed under the "base" category model. The base and extended 139 catogories are defined in their own modules as described later. 141 The example of base feature includes the configuration of LDP lsr-id, 142 enabling LDP interfaces, setting password for LDP session etc., 143 whereas the examples of extended feature include inbound/outbound 144 label policies, igp sync, downstream-on-demand etc. This is worth 145 higlighting that LDP IPv6 [RFC7552] is also categorized as an 146 extended feature. 148 While "base" model support will suffice for small deployments, it is 149 expected that large deployments will require not only the "base" 150 module support from the vendors but also the support for "extended" 151 model for some extended feature(s) of interest. 153 2. Specification of Requirements 155 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 156 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 157 document are to be interpreted as described in [RFC2119]. 159 In this document, the word "IP" is used to refer to both IPv4 and 160 IPv6, unless otherwise explicitly stated. For example, "IP address 161 family" means and be read as "IPv4 and/or IPv6 address family" 163 3. Overview 165 This document defines two new modules for LDP YANG support: 167 o "ietf-mpls-ldp" module that models the base LDP features and 168 augments /rt:routing/rt:control-plane-protocols defined in 169 [RFC8022]. 171 o "ietf-mpls-ldp-extended" module that models the extended 172 LDP features and augments the base LDP. 174 It is to be noted that mLDP data model [I-D.ietf-mpls-mldp-yang] 175 augments LDP base and extended models to model the base and extended 176 mLDP features respectively. 178 There are four main containers in our module(s): 180 o Read-Write parameters for configuration (Discussed in Section 4) 182 o Read-only parameters for operational state (Discussed in 183 Section 5) 185 o Notifications for events (Discussed in Section 6) 187 o RPCs for executing commands to perform some action (Discussed in 188 Section 7) 190 For the configuration and state data, this model follows the similar 191 approach described in [I-D.openconfig-netmod-opstate] to represent 192 the configuration (intended state) and operational (applied and 193 derived) state. This means that for every configuration (rw) item, 194 there is an associated (ro) item under "state" container to represent 195 the applied state. Furthermore, protocol derived state is also kept 196 under "state" tree corresponding to the protocol area (discovery, 197 peer etc.). [Ed note: This document will be (re-)aligned with 198 [I-D.openconfig-netmod-opstate] once that specification is adopted as 199 a WG document]. 201 Following diagram depicts high level LDP yang tree organization and 202 hierarchy: 204 module: ietf-mpls-ldp 205 +-- rw routing 206 +-- rw control-plane-protocols 207 +-- rw mpls-ldp 208 +-- rw global 209 | +-- rw config 210 | | +-- rw ... // base 211 | | +-- rw ldp-ext: .... // extended 212 | | ... 213 | +-- ro state 214 | +-- ro ... // base 215 | | +-- ro ldp-ext: .... // extended 216 | ... 217 +-- rw ... 218 | +-- rw config 219 | | +-- rw ... // base 220 | | +-- rw ldp-ext: .... // extended 221 | | ... 222 | +-- ro state 223 | +-- ro ... // base 224 | | +-- ro ldp-ext: .... // extended 225 | ... 226 +-- rw ... 227 ... 229 rpcs: 230 +-- x mpls-ldp-some_action 231 +-- x . . . . . 233 notifications: 234 +--- n mpls-ldp-some_event 235 +--- n ... 237 Figure 1 239 Before going into data model details, it is important to take note of 240 the following points: 242 o This module aims to address only the core LDP parameters as per 243 RFC specification, as well as some widely deployed non-RFC 244 features (such as label policies, session authentication etc). 245 Any vendor specific feature should be defined in a vendor-specific 246 augmentation of this model. 248 o Multi-topology LDP [RFC7307] is beyond the scope of this document. 250 o This module does not cover any applications running on top of LDP, 251 nor does it cover any OAM procedures for LDP. 253 o This model is a VPN Forwarding and Routing (VRF)-centric model. 254 It is important to note that [RFC4364] defines VRF tables and 255 default forwarding tables as different, however from a yang 256 modelling perspective this introduces unnecessary complications, 257 hence we are treating the default forwarding table as just another 258 VRF. 260 o A "network-instance", as defined in 261 [I-D.rtgyangdt-rtgwg-ni-model], refers to a VRF instance (both 262 default and non-default) within the scope of this model. 264 o This model supports two address-families, namely "ipv4" and 265 "ipv6". 267 o This model assumes platform-wide label space (i.e. label space Id 268 of zero). However, when Upstream Label assignment [RFC6389] is in 269 use, an upstream assigned label is looked up in a Context-Specific 270 label space as defined in [RFC5331]. 272 o The label and peer policies (including filters) are defined using 273 a prefix-list. When used for a peer policy, the prefix refers to 274 the LSR Id of the peer. The prefix-list is referenced from 275 routing-policy model as defined in [I-D.ietf-rtgwg-policy-model]. 277 o This model uses the terms LDP "neighbor"/"adjacency", "session", 278 and "peer" with the following semantics: 280 * Neighbor/Adjacency: An LDP enabled LSR that is discovered 281 through LDP discovery mechanisms. 283 * Session: An LDP neighbor with whom a TCP connection has been 284 established. 286 * Peer: An LDP session which has successfully progressed beyond 287 its initialization phase and is either already exchanging the 288 bindings or is ready to do so. 290 It is to be noted that LDP Graceful Restart mechanisms defined in 291 [RFC3478] allow keeping the exchanged bindings for some time after 292 a session goes down with a peer. We call such a state belonging 293 to a "stale" peer -- i.e. keeping peer bindings from a peer with 294 whom currently there is either no connection established or 295 connection is established but GR session is in recovery state. 296 When used in this document, the above terms will refer strictly to 297 the semantics and definitions defined for them. 299 A graphical representation of LDP YANG data model is presented in 300 Figure 4, Figure 5, Figure 7, Figure 8, Figure 14, and Figure 15. 301 Whereas, the actual model definition in YANG is captured in 302 Section 9. 304 While presenting the YANG tree view and actual .yang specification, 305 this document assumes readers' familiarity with the concepts of YANG 306 modeling, its presentation and its compilation. 308 4. Configuration 310 This specification defines the configuration parameters for base LDP 311 as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it 312 incorporates provisions to enable LDP Capabilities [RFC5561], and 313 defines some of the most significant and commonly used capabilities 314 such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP 315 Upstream Label Assignment [RFC6389]. 317 This model augments /rt:routing/rt:control-plane-protocols that is 318 defined in [RFC8022]. For LDP interfaces, this model refers the MPLS 319 interface as defined under MPLS base specification 320 [I-D.ietf-mpls-base-yang]. Furthermore, as mentioned earlier, the 321 configuration tree presents read-write intended configuration leave/ 322 items as well as read-only state of the applied configuration. The 323 former is listed under "config" container and latter under "state" 324 container. 326 Following is the high-level configuration organization for base LDP: 328 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 329 +-- mpls-ldp 330 +-- global 331 | +-- ... 332 | +-- ... 333 | +-- address-families 334 | | +-- ipv4 335 | | +-- . . . 336 | | +-- . . . 337 | | +-- label-policy 338 | | +-- ... 339 | | +-- ... 340 | +-- capability 341 | | +-- ... 342 | | +-- ... 343 | +-- discovery 344 | +-- interfaces 345 | | +-- ... 346 | | +-- ... 347 | | +-- interface* [interface] 348 | | +-- ... 349 | | +-- address-families 350 | | +-- ipv4 351 | | +-- ... 352 | | +-- ... 353 | +-- targeteted 354 | +-- ... 355 | +-- address-families 356 | +-- ipv4 357 | +- target* [adjacent-address] 358 | +- ... 359 | +- ... 360 +-- peers 361 +-- ... 362 +-- ... 363 +-- peer* 364 +-- ... 365 +-- ... 367 Figure 2 369 Following is the high-level configuration organization for extended 370 LDP: 372 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 373 +-- mpls-ldp 374 +-- global 375 | +-- ... 376 | +-- ... 377 | +-- address-families 378 | | +-- ipv4 379 | | | +-- . . . 380 | | | +-- . . . 381 | | | +-- label-policy 382 | | | +-- ... 383 | | | +-- ... 384 | | +-- ipv6 385 | | +-- . . . 386 | | +-- . . . 387 | | +-- label-policy 388 | | +-- ... 389 | | +-- ... 390 | +-- label-policy 391 | | +-- ... 392 | | +-- ... 393 | +-- capability 394 | | +-- ... 395 | | +-- ... 396 | +-- discovery 397 | +-- interfaces 398 | | +-- ... 399 | | +-- ... 400 | | +-- interface* [interface] 401 | | +-- ... 402 | | +-- address-families 403 | | +-- ipv4 404 | | | +-- ... 405 | | | +-- ... 406 | | +-- ipv6 407 | | +-- ... 408 | | +-- ... 409 | +-- targeteted 410 | +-- ... 411 | +-- address-families 412 | +-- ipv4 413 | | +- target* [adjacent-address] 414 | | +- ... 415 | | +- ... 416 | +-- ipv6 417 | +- target* [adjacent-address] 418 | +- ... 419 | +- ... 420 +-- forwarding-nexthop 421 | +-- ... 423 | +-- ... 424 +-- peers 425 +-- ... 426 +-- ... 427 +-- peer* 428 +-- ... 429 +-- ... 430 +-- label-policy 431 | +-- .. 432 +-- address-families 433 +-- ipv4 434 | +-- label-policies 435 | +-- ... 436 +-- ipv6 437 +-- label-policies 438 +-- ... 440 Figure 3 442 Given the configuration hierarchy, the model allows inheritance such 443 that an item in a child tree is able to derive value from a similar 444 or related item in one of the parent. For instance, hello holdtime 445 can be configured per-VRF or per-VRF-interface, thus allowing 446 inheritance as well flexibility to override with a different value at 447 any child level. 449 4.1. Configuration Tree 451 4.1.1. Base 453 Following is a simplified graphical representation of the data model 454 for LDP base configuration 456 module: ietf-mpls-ldp 457 augment /rt:routing/rt:control-plane-protocols: 458 +--rw mpls-ldp! 459 +--rw global 460 | +--rw config 461 | | +--rw capability 462 | | +--rw graceful-restart 463 | | | +--rw enable? boolean 464 | | | +--rw reconnect-time? uint16 465 | | | +--rw recovery-time? uint16 466 | | | +--rw forwarding-holdtime? uint16 467 | | +--rw lsr-id? yang:dotted-quad 468 | +--rw address-families 469 | | +--rw ipv4 470 | | +--rw config 471 | | +--rw enable? boolean 472 | | +--rw label-policy 473 | | +--rw advertise 474 | | +--rw egress-explicit-null 475 | | +--rw enable? boolean 476 | +--rw discovery 477 | +--rw interfaces 478 | | +--rw config 479 | | | +--rw hello-holdtime? uint16 480 | | | +--rw hello-interval? uint16 481 | | +--rw interface* [interface] 482 | | +--rw interface mpls-interface-ref 483 | | +--rw address-families 484 | | +--rw ipv4 485 | | +--rw config 486 | | +--rw enable? boolean 487 | +--rw targeted 488 | +--rw config 489 | | +--rw hello-holdtime? uint16 490 | | +--rw hello-interval? uint16 491 | | +--rw hello-accept 492 | | +--rw enable? boolean 493 | +--rw address-families 494 | +--rw ipv4 495 | +--rw target* [adjacent-address] 496 | +--rw adjacent-address inet:ipv4-address 497 | +--rw config 498 | +--rw enable? boolean 499 | +--rw local-address? inet:ipv4-address 500 +--rw peers 501 +--rw config 502 | +--rw authentication 503 | | +--rw (auth-type-selection)? 504 | | +--:(auth-key) 505 | | +--rw md5-key? string 506 | +--rw capability 507 | +--rw session-ka-holdtime? uint16 508 | +--rw session-ka-interval? uint16 509 +--rw peer* [lsr-id] 510 +--rw lsr-id yang:dotted-quad 511 +--rw config 512 +--rw authentication 513 +--rw (auth-type-selection)? 514 +--:(auth-key) 515 +--rw md5-key? string 516 Figure 4 518 4.1.2. Extended 520 Following is a simplified graphical representation of the data model 521 for LDP extended configuration 523 module: ietf-mpls-ldp 524 augment /rt:routing/rt:control-plane-protocols: 525 +--rw mpls-ldp! 526 +--rw global 527 | +--rw config 528 | | +--rw capability 529 | | | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? 530 | | | | +--rw ldp-ext:enable? boolean 531 | | | +--rw ldp-ext:typed-wildcard-fec {capability-typed-wildcard-fec}? 532 | | | | +--rw ldp-ext:enable? boolean 533 | | | +--rw ldp-ext:upstream-label-assignment {capability-upstream-label-assignment}? 534 | | | +--rw ldp-ext:enable? boolean 535 | | +--rw graceful-restart 536 | | | +--rw ldp-ext:helper-enable? boolean {graceful-restart-helper-mode}? 537 | | +--rw ldp-ext:igp-synchronization-delay? uint16 538 | | +--rw ldp-ext:label-policy 539 | | +--rw ldp-ext:advertise 540 | | +--rw ldp-ext:egress-explicit-null 541 | | +--rw ldp-ext:enable? boolean 542 | +--rw address-families 543 | | +--rw ipv4 544 | | | +--rw config 545 | | | +--rw label-policy 546 | | | | +--rw advertise 547 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 548 | | | | +--rw ldp-ext:accept 549 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 550 | | | | +--rw ldp-ext:assign {policy-label-assignment-config}? 551 | | | | +--rw ldp-ext:independent-mode 552 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 553 | | | | +--rw ldp-ext:ordered-mode {policy-ordered-label-config}? 554 | | | | +--rw ldp-ext:egress-prefix-list? prefix-list-ref 555 | | | +--rw ldp-ext:transport-address? inet:ipv4-address 556 | | +--rw ldp-ext:ipv6 557 | | +--rw ldp-ext:config 558 | | +--rw ldp-ext:enable? boolean 559 | | +--rw ldp-ext:label-policy 560 | | | +--rw ldp-ext:advertise 561 | | | | +--rw ldp-ext:egress-explicit-null 562 | | | | | +--rw ldp-ext:enable? boolean 563 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 564 | | | +--rw ldp-ext:accept 565 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 566 | | | +--rw ldp-ext:assign {policy-label-assignment-config}? 567 | | | +--rw ldp-ext:independent-mode 568 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 569 | | | +--rw ldp-ext:ordered-mode {policy-ordered-label-config}? 570 | | | +--rw ldp-ext:egress-prefix-list? prefix-list-ref 571 | | +--rw ldp-ext:transport-address? inet:ipv6-address 572 | +--rw discovery 573 | | +--rw interfaces 574 | | | +--rw interface* [interface] 575 | | | +--rw interface mpls-interface-ref 576 | | | +--rw address-families 577 | | | | +--rw ipv4 578 | | | | | +--rw config 579 | | | | | +--rw ldp-ext:transport-address? union 580 | | | | +--rw ldp-ext:ipv6 581 | | | | +--rw ldp-ext:config 582 | | | | +--rw ldp-ext:enable? boolean 583 | | | | +--rw ldp-ext:transport-address? union 584 | | | +--rw ldp-ext:config 585 | | | +--rw ldp-ext:hello-holdtime? uint16 586 | | | +--rw ldp-ext:hello-interval? uint16 587 | | | +--rw ldp-ext:igp-synchronization-delay? uint16 {per-interface-timer-config}? 588 | | +--rw targeted 589 | | +--rw config 590 | | | +--rw hello-accept 591 | | | +--rw ldp-ext:neighbor-list? neighbor-list-ref {policy-targeted-discovery-config}? 592 | | +--rw address-families 593 | | +--rw ldp-ext:ipv6 594 | | +--rw ldp-ext:target* [adjacent-address] 595 | | +--rw ldp-ext:adjacent-address inet:ipv6-address 596 | | +--rw ldp-ext:config 597 | | +--rw ldp-ext:enable? boolean 598 | | +--rw ldp-ext:local-address? inet:ipv6-address 599 | +--rw ldp-ext:forwarding-nexthop {forwarding-nexthop-config}? 600 | +--rw ldp-ext:interfaces 601 | +--rw ldp-ext:interface* [interface] 602 | +--rw ldp-ext:interface ldp:mpls-interface-ref 603 | +--rw ldp-ext:address-family* [afi] 604 | +--rw ldp-ext:afi ldp:ldp-address-family 605 | +--rw ldp-ext:config 606 | +--rw ldp-ext:ldp-disable? boolean 607 +--rw peers 608 +--rw config 609 | +--rw authentication 610 | | +--rw (auth-type-selection)? 611 | | +--:(ldp-ext:auth-key-chain) 612 | | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 613 | +--rw ldp-ext:session-downstream-on-demand {session-downstream-on-demand-config}? 614 | +--rw ldp-ext:enable? boolean 615 | +--rw ldp-ext:peer-list? peer-list-ref 616 +--rw peer* [lsr-id] 617 +--rw lsr-id yang:dotted-quad 618 +--rw config 619 +--rw authentication 620 | +--rw (auth-type-selection)? 621 | +--:(ldp-ext:auth-key-chain) 622 | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 623 +--rw ldp-ext:admin-down? boolean 624 +--rw ldp-ext:label-policy 625 | +--rw ldp-ext:advertise 626 | | +--rw ldp-ext:prefix-list? prefix-list-ref 627 | +--rw ldp-ext:accept 628 | +--rw ldp-ext:prefix-list? prefix-list-ref 629 +--rw ldp-ext:graceful-restart 630 | +--rw ldp-ext:enable? boolean 631 | +--rw ldp-ext:reconnect-time? uint16 632 | +--rw ldp-ext:recovery-time? uint16 633 +--rw ldp-ext:session-ka-holdtime? uint16 634 +--rw ldp-ext:session-ka-interval? uint16 635 +--rw ldp-ext:address-families 636 +--rw ldp-ext:ipv4 637 | +--rw ldp-ext:label-policy 638 | +--rw ldp-ext:advertise 639 | | +--rw ldp-ext:prefix-list? prefix-list-ref 640 | +--rw ldp-ext:accept 641 | +--rw ldp-ext:prefix-list? prefix-list-ref 642 +--rw ldp-ext:ipv6 643 +--rw ldp-ext:label-policy 644 +--rw ldp-ext:advertise 645 | +--rw ldp-ext:prefix-list? prefix-list-ref 646 +--rw ldp-ext:accept 647 +--rw ldp-ext:prefix-list? prefix-list-ref 649 Figure 5 651 4.2. Configuration Hierarchy 653 The LDP configuration container is logically divided into following 654 high-level config areas: 656 Per-VRF parameters 657 o Global parameters 658 o Per-address-family parameters 659 o LDP Capabilities parameters 660 o Hello Discovery parameters 661 - interfaces 662 - Per-interface: 663 Global 664 Per-address-family 665 - targeted 666 - Per-target 667 o Peer parameters 668 - Global 669 - Per-peer 670 Per-address-family 671 Capabilities parameters 672 o Forwarding parameters 674 Figure 6 676 Following subsections briefly explain these configuration areas. 678 4.2.1. Per-VRF parameters 680 LDP module resides under an network-instance and the scope of any LDP 681 configuration defined under this tree is per network-instance (per- 682 VRF). This configuration is further divided into sub categories as 683 follows. 685 4.2.1.1. Per-VRF global parameters 687 There are configuration items that are available directly under a VRF 688 instance and do not fall under any other sub tree. Example of such a 689 parameter is LDP LSR id that is typically configured per VRF. To 690 keep legacy LDP features and applications working in an LDP IPv4 691 networks with this model, this document recommends an operator to 692 pick a routable IPv4 unicast address as an LSR Id. 694 4.2.1.2. Per-VRF Capabilities parameters 696 This container falls under global tree and holds the LDP capabilities 697 that are to be enabled for certain features. By default, an LDP 698 capability is disabled unless explicitly enabled. These capabilities 699 are typically used to negotiate with LDP peer(s) the support/non- 700 support related to a feature and its parameters. The scope of a 701 capability enabled under this container applies to all LDP peers in 702 the given VRF instance. There is also a peer level capability 703 container that is provided to override a capability that is enabled/ 704 specified at VRF level. 706 4.2.1.3. Per-VRF Per-Address-Family parameters 708 Any LDP configuration parameter related to IP address family (AF) 709 whose scope is VRF wide is configured under this tree. The examples 710 of per-AF parameters include enabling LDP for an address family, 711 prefix-list based label policies, and LDP transport address. 713 4.2.1.4. Per-VRF Hello Discovery parameters 715 This container is used to hold LDP configuration related to Hello and 716 discovery process for both basic (link) and extended (targeted) 717 discovery. 719 The "interfaces" is a container to configure parameters related to 720 VRF interfaces. There are parameters that apply to all interfaces 721 (such as hello timers), as well as parameters that can be configured 722 per-interface. Hence, an interface list is defined under 723 "interfaces" container. The model defines parameters to configure 724 per-interface non AF related items, as well as per-interface per-AF 725 items. The example of former is interface hello timers, and example 726 of latter is enabling hellos for a given AF under an interface. 728 The "targeted" container under a VRF instance allows to configure LDP 729 targeted discovery related parameters. Within this container, the 730 "target" list provides a mean to configure multiple target addresses 731 to perform extended discovery to a specific destination target, as 732 well as to fine-tune the per-target parameters. 734 4.2.1.5. Per-VRF Peer parameters 736 This container is used to hold LDP configuration related to LDP 737 sessions and peers under a VRF instance. This container allows to 738 configure parameters that either apply on VRF's all peers or a subset 739 (peer-list) of VRF peers. The example of such parameters include 740 authentication password, session KA timers etc. Moreover, the model 741 also allows per-peer parameter tuning by specifying a "peer" list 742 under the "peers" container. A peer is uniquely identified using its 743 LSR Id and hence LSR Id is the key for peer list 745 Like per-interface parameters, some per-peer parameters are AF- 746 agnostic (i.e. either non AF related or apply to both IP address 747 families), and some that belong to an AF. The example of former is 748 per-peer session password configuration, whereas the example of 749 latter is prefix-list based label policies (inbound and outbound) 750 that apply to a given peer. 752 4.2.1.6. Per-VRF Forwarding parameters 754 This container is used to hold configuration used to control LDP 755 forwarding behavior under a VRF instance. One example of a 756 configuration under this container is when a user wishes to enable 757 neighbor discovery on an interface but wishes to disable use of the 758 same interface as forwarding nexthop. This example configuration 759 makes sense only when there are more than one LDP enabled interfaces 760 towards the neighbor. 762 5. Operational State 764 Operational state of LDP can be queried and obtained from read-only 765 state containers that fall under the same tree (/rt:routing/ 766 rt:control-plane-protocols/) as the configuration. 768 Please note this state tree refers both the configuration "applied" 769 state as well as the "derived" state related to the protocol. [Ed 770 note: This is where this model differs presently from 771 [I-D.openconfig-netmod-opstate] and subject to alignment in later 772 revisions] 774 5.1. Operational Tree 776 5.1.1. Base 778 Following is a simplified graphical representation of the base data 779 model for LDP operational state. 781 module: ietf-mpls-ldp 782 augment /rt:routing/rt:control-plane-protocols: 783 +--rw mpls-ldp! 784 +--rw global 785 | +--ro state 786 | | +--ro capability 787 | | +--ro graceful-restart 788 | | | +--ro enable? boolean 789 | | | +--ro reconnect-time? uint16 790 | | | +--ro recovery-time? uint16 791 | | | +--ro forwarding-holdtime? uint16 792 | | +--ro lsr-id? yang:dotted-quad 793 | +--rw address-families 794 | | +--rw ipv4 795 | | +--ro state 796 | | +--ro enable? boolean 797 | | +--ro label-distribution-controlmode? enumeration 798 | | +--ro label-policy 799 | | | +--ro advertise 800 | | | +--ro egress-explicit-null 801 | | | +--ro enable? boolean 802 | | +--ro bindings 803 | | +--ro address* [address] 804 | | | +--ro address inet:ipv4-address 805 | | | +--ro advertisement-type? advertised-received 806 | | | +--ro peer? leafref 807 | | +--ro fec-label* [fec] 808 | | +--ro fec inet:ipv4-prefix 809 | | +--ro peer* [peer advertisement-type] 810 | | +--ro peer leafref 811 | | +--ro advertisement-type advertised-received 812 | | +--ro label? rt-types:mpls-label 813 | | +--ro used-in-forwarding? boolean 814 | +--rw discovery 815 | +--rw interfaces 816 | | +--ro state 817 | | | +--ro hello-holdtime? uint16 818 | | | +--ro hello-interval? uint16 819 | | +--rw interface* [interface] 820 | | +--rw interface mpls-interface-ref 821 | | +--ro state 822 | | | +--ro next-hello? uint16 823 | | +--rw address-families 824 | | +--rw ipv4 825 | | +--ro state 826 | | +--ro enable? boolean 827 | | +--ro hello-adjacencies* [adjacent-address] 828 | | +--ro adjacent-address inet:ipv4-address 829 | | +--ro flag* identityref 830 | | +--ro hello-holdtime 831 | | | +--ro adjacent? uint16 832 | | | +--ro negotiated? uint16 833 | | | +--ro remaining? uint16 834 | | +--ro next-hello? uint16 835 | | +--ro statistics 836 | | | +--ro discontinuity-time yang:date-and-time 837 | | | +--ro hello-received? yang:counter64 838 | | | +--ro hello-dropped? yang:counter64 839 | | +--ro peer? leafref 840 | +--rw targeted 841 | +--ro state 842 | | +--ro hello-holdtime? uint16 843 | | +--ro hello-interval? uint16 844 | | +--ro hello-accept 845 | | +--ro enable? boolean 846 | +--rw address-families 847 | +--rw ipv4 848 | +--ro state 849 | | +--ro hello-adjacencies* [local-address adjacent-address] 850 | | +--ro local-address inet:ipv4-address 851 | | +--ro adjacent-address inet:ipv4-address 852 | | +--ro flag* identityref 853 | | +--ro hello-holdtime 854 | | | +--ro adjacent? uint16 855 | | | +--ro negotiated? uint16 856 | | | +--ro remaining? uint16 857 | | +--ro next-hello? uint16 858 | | +--ro statistics 859 | | | +--ro discontinuity-time yang:date-and-time 860 | | | +--ro hello-received? yang:counter64 861 | | | +--ro hello-dropped? yang:counter64 862 | | +--ro peer? leafref 863 | +--rw target* [adjacent-address] 864 | +--rw adjacent-address inet:ipv4-address 865 | +--ro state 866 | +--ro enable? boolean 867 | +--ro local-address? inet:ipv4-address 868 +--rw peers 869 +--ro state 870 | +--ro authentication 871 | | +--ro (auth-type-selection)? 872 | | +--:(auth-key) 873 | | +--ro md5-key? string 874 | +--ro capability 875 | +--ro session-ka-holdtime? uint16 876 | +--ro session-ka-interval? uint16 877 +--rw peer* [lsr-id] 878 +--rw lsr-id yang:dotted-quad 879 +--ro state 880 +--ro authentication 881 | +--ro (auth-type-selection)? 882 | +--:(auth-key) 883 | +--ro md5-key? string 884 +--ro address-families 885 | +--ro ipv4 886 | +--ro hello-adjacencies* [local-address adjacent-address] 887 | +--ro local-address inet:ipv4-address 888 | +--ro adjacent-address inet:ipv4-address 889 | +--ro flag* identityref 890 | +--ro hello-holdtime 891 | | +--ro adjacent? uint16 892 | | +--ro negotiated? uint16 893 | | +--ro remaining? uint16 894 | +--ro next-hello? uint16 895 | +--ro statistics 896 | | +--ro discontinuity-time yang:date-and-time 897 | | +--ro hello-received? yang:counter64 898 | | +--ro hello-dropped? yang:counter64 899 | +--ro interface? mpls-interface-ref 900 +--ro label-advertisement-mode 901 | +--ro local? label-adv-mode 902 | +--ro peer? label-adv-mode 903 | +--ro negotiated? label-adv-mode 904 +--ro next-keep-alive? uint16 905 +--ro peer-ldp-id? yang:dotted-quad 906 +--ro received-peer-state 907 | +--ro graceful-restart 908 | | +--ro enable? boolean 909 | | +--ro reconnect-time? uint16 910 | | +--ro recovery-time? uint16 911 | +--ro capability 912 | +--ro end-of-lib 913 | | +--ro enable? boolean 914 | +--ro typed-wildcard-fec 915 | | +--ro enable? boolean 916 | +--ro upstream-label-assignment 917 | +--ro enable? boolean 918 +--ro session-holdtime 919 | +--ro peer? uint16 920 | +--ro negotiated? uint16 921 | +--ro remaining? uint16 922 +--ro session-state? enumeration 923 +--ro tcp-connection 924 | +--ro local-address? inet:ip-address 925 | +--ro local-port? inet:port-number 926 | +--ro remote-address? inet:ip-address 927 | +--ro remote-port? inet:port-number 928 +--ro up-time? string 929 +--ro statistics 930 +--ro discontinuity-time yang:date-and-time 931 +--ro received 932 | +--ro total-octets? yang:counter64 933 | +--ro total-messages? yang:counter64 934 | +--ro address? yang:counter64 935 | +--ro address-withdraw? yang:counter64 936 | +--ro initialization? yang:counter64 937 | +--ro keepalive? yang:counter64 938 | +--ro label-abort-request? yang:counter64 939 | +--ro label-mapping? yang:counter64 940 | +--ro label-release? yang:counter64 941 | +--ro label-request? yang:counter64 942 | +--ro label-withdraw? yang:counter64 943 | +--ro notification? yang:counter64 944 +--ro sent 945 | +--ro total-octets? yang:counter64 946 | +--ro total-messages? yang:counter64 947 | +--ro address? yang:counter64 948 | +--ro address-withdraw? yang:counter64 949 | +--ro initialization? yang:counter64 950 | +--ro keepalive? yang:counter64 951 | +--ro label-abort-request? yang:counter64 952 | +--ro label-mapping? yang:counter64 953 | +--ro label-release? yang:counter64 954 | +--ro label-request? yang:counter64 955 | +--ro label-withdraw? yang:counter64 956 | +--ro notification? yang:counter64 957 +--ro total-addresses? uint32 958 +--ro total-labels? uint32 959 +--ro total-fec-label-bindings? uint32 961 Figure 7 963 5.1.2. Extended 965 Following is a simplified graphical representation of the extended 966 data model for LDP operational state. 968 module: ietf-mpls-ldp 969 augment /rt:routing/rt:control-plane-protocols: 970 +--rw mpls-ldp! 971 +--rw global 972 | +--ro state 973 | | +--ro capability 974 | | | +--ro ldp-ext:end-of-lib {capability-end-of-lib}? 975 | | | | +--ro ldp-ext:enable? boolean 976 | | | +--ro ldp-ext:typed-wildcard-fec {capability-typed-wildcard-fec}? 977 | | | | +--ro ldp-ext:enable? boolean 978 | | | +--ro ldp-ext:upstream-label-assignment {capability-upstream-label-assignment}? 979 | | | +--ro ldp-ext:enable? boolean 980 | | +--ro graceful-restart 981 | | | +--ro ldp-ext:helper-enable? boolean {graceful-restart-helper-mode}? 982 | | +--ro ldp-ext:igp-synchronization-delay? uint16 983 | | +--ro ldp-ext:label-policy 984 | | +--ro ldp-ext:advertise 985 | | +--ro ldp-ext:egress-explicit-null 986 | | +--ro ldp-ext:enable? boolean 987 | +--rw address-families 988 | | +--rw ipv4 989 | | | +--ro state 990 | | | +--ro label-policy 991 | | | | +--ro advertise 992 | | | | | +--ro ldp-ext:prefix-list? prefix-list-ref 993 | | | | +--ro ldp-ext:accept 994 | | | | | +--ro ldp-ext:prefix-list? prefix-list-ref 995 | | | | +--ro ldp-ext:assign {policy-label-assignment-config}? 996 | | | | +--ro ldp-ext:independent-mode 997 | | | | | +--ro ldp-ext:prefix-list? prefix-list-ref 998 | | | | +--ro ldp-ext:ordered-mode {policy-ordered-label-config}? 999 | | | | +--ro ldp-ext:egress-prefix-list? prefix-list-ref 1000 | | | +--ro ldp-ext:transport-address? inet:ipv4-address 1001 | | +--rw ldp-ext:ipv6 1002 | | +--ro ldp-ext:state 1003 | | +--ro ldp-ext:enable? boolean 1004 | | +--ro ldp-ext:label-distribution-controlmode? enumeration 1005 | | +--ro ldp-ext:label-policy 1006 | | | +--ro ldp-ext:advertise 1007 | | | | +--ro ldp-ext:egress-explicit-null 1008 | | | | | +--ro ldp-ext:enable? boolean 1009 | | | | +--ro ldp-ext:prefix-list? prefix-list-ref 1010 | | | +--ro ldp-ext:accept 1011 | | | | +--ro ldp-ext:prefix-list? prefix-list-ref 1012 | | | +--ro ldp-ext:assign {policy-label-assignment-config}? 1013 | | | +--ro ldp-ext:independent-mode 1014 | | | | +--ro ldp-ext:prefix-list? prefix-list-ref 1015 | | | +--ro ldp-ext:ordered-mode {policy-ordered-label-config}? 1016 | | | +--ro ldp-ext:egress-prefix-list? prefix-list-ref 1017 | | +--ro ldp-ext:bindings 1018 | | | +--ro ldp-ext:address* [address] 1019 | | | | +--ro ldp-ext:address inet:ipv6-address 1020 | | | | +--ro ldp-ext:advertisement-type? advertised-received 1021 | | | | +--ro ldp-ext:peer? leafref 1022 | | | +--ro ldp-ext:fec-label* [fec] 1023 | | | +--ro ldp-ext:fec inet:ipv6-prefix 1024 | | | +--ro ldp-ext:peer* [peer advertisement-type] 1025 | | | +--ro ldp-ext:peer leafref 1026 | | | +--ro ldp-ext:advertisement-type advertised-received 1027 | | | +--ro ldp-ext:label? rt-types:mpls-label 1028 | | | +--ro ldp-ext:used-in-forwarding? boolean 1029 | | +--ro ldp-ext:transport-address? inet:ipv6-address 1030 | +--rw discovery 1031 | | +--rw interfaces 1032 | | | +--rw interface* [interface] 1033 | | | +--rw interface mpls-interface-ref 1034 | | | +--ro state 1035 | | | | +--ro ldp-ext:hello-holdtime? uint16 1036 | | | | +--ro ldp-ext:hello-interval? uint16 1037 | | | | +--ro ldp-ext:igp-synchronization-delay? uint16 {per-interface-timer-config}? 1038 | | | +--rw address-families 1039 | | | +--rw ipv4 1040 | | | | +--ro state 1041 | | | | +--ro ldp-ext:transport-address? union 1042 | | | +--rw ldp-ext:ipv6 1043 | | | +--ro ldp-ext:state 1044 | | | +--ro ldp-ext:enable? boolean 1045 | | | +--ro ldp-ext:hello-adjacencies* [adjacent-address] 1046 | | | | +--ro ldp-ext:adjacent-address inet:ipv6-address 1047 | | | | +--ro ldp-ext:flag* identityref 1048 | | | | +--ro ldp-ext:hello-holdtime 1049 | | | | | +--ro ldp-ext:adjacent? uint16 1050 | | | | | +--ro ldp-ext:negotiated? uint16 1051 | | | | | +--ro ldp-ext:remaining? uint16 1052 | | | | +--ro ldp-ext:next-hello? uint16 1053 | | | | +--ro ldp-ext:statistics 1054 | | | | | +--ro ldp-ext:discontinuity-time yang:date-and-time 1055 | | | | | +--ro ldp-ext:hello-received? yang:counter64 1056 | | | | | +--ro ldp-ext:hello-dropped? yang:counter64 1057 | | | | +--ro ldp-ext:peer? leafref 1058 | | | +--ro ldp-ext:transport-address? union 1059 | | +--rw targeted 1060 | | +--ro state 1061 | | | +--ro hello-accept 1062 | | | +--ro ldp-ext:neighbor-list? neighbor-list-ref {policy-targeted-discovery-config}? 1063 | | +--rw address-families 1064 | | +--rw ldp-ext:ipv6 1065 | | +--ro ldp-ext:state 1066 | | | +--ro ldp-ext:hello-adjacencies* [local-address adjacent-address] 1067 | | | +--ro ldp-ext:local-address inet:ipv6-address 1068 | | | +--ro ldp-ext:adjacent-address inet:ipv6-address 1069 | | | +--ro ldp-ext:flag* identityref 1070 | | | +--ro ldp-ext:hello-holdtime 1071 | | | | +--ro ldp-ext:adjacent? uint16 1072 | | | | +--ro ldp-ext:negotiated? uint16 1073 | | | | +--ro ldp-ext:remaining? uint16 1074 | | | +--ro ldp-ext:next-hello? uint16 1075 | | | +--ro ldp-ext:statistics 1076 | | | | +--ro ldp-ext:discontinuity-time yang:date-and-time 1077 | | | | +--ro ldp-ext:hello-received? yang:counter64 1078 | | | | +--ro ldp-ext:hello-dropped? yang:counter64 1079 | | | +--ro ldp-ext:peer? leafref 1080 | | +--rw ldp-ext:target* [adjacent-address] 1081 | | +--rw ldp-ext:adjacent-address inet:ipv6-address 1082 | | +--ro ldp-ext:state 1083 | | +--ro ldp-ext:enable? boolean 1084 | | +--ro ldp-ext:local-address? inet:ipv6-address 1085 | +--rw ldp-ext:forwarding-nexthop {forwarding-nexthop-config}? 1086 | +--rw ldp-ext:interfaces 1087 | +--rw ldp-ext:interface* [interface] 1088 | +--rw ldp-ext:interface ldp:mpls-interface-ref 1089 | +--rw ldp-ext:address-family* [afi] 1090 | +--rw ldp-ext:afi ldp:ldp-address-family 1091 | +--ro ldp-ext:state 1092 | +--ro ldp-ext:ldp-disable? boolean 1093 +--rw peers 1094 +--ro state 1095 | +--ro authentication 1096 | | +--ro (auth-type-selection)? 1097 | | +--:(ldp-ext:auth-key-chain) 1098 | | +--ro ldp-ext:key-chain? key-chain:key-chain-ref 1099 | +--ro session-ka-interval? uint16 1100 | +--ro ldp-ext:session-downstream-on-demand {session-downstream-on-demand-config}? 1101 | +--ro ldp-ext:enable? boolean 1102 | +--ro ldp-ext:peer-list? peer-list-ref 1103 +--rw peer* [lsr-id] 1104 +--rw lsr-id yang:dotted-quad 1105 +--ro state 1106 +--ro authentication 1107 | +--ro (auth-type-selection)? 1108 | +--:(ldp-ext:auth-key-chain) 1109 | +--ro ldp-ext:key-chain? key-chain:key-chain-ref 1110 +--ro address-families 1111 | +--ro ipv4 1112 | | +--ro ldp-ext:label-policy 1113 | | +--ro ldp-ext:advertise 1114 | | | +--ro ldp-ext:prefix-list? prefix-list-ref 1115 | | +--ro ldp-ext:accept 1116 | | +--ro ldp-ext:prefix-list? prefix-list-ref 1117 | +--ro ldp-ext:ipv6 1118 | +--ro ldp-ext:hello-adjacencies* [local-address adjacent-address] 1119 | | +--ro ldp-ext:local-address inet:ipv6-address 1120 | | +--ro ldp-ext:adjacent-address inet:ipv6-address 1121 | | +--ro ldp-ext:flag* identityref 1122 | | +--ro ldp-ext:hello-holdtime 1123 | | | +--ro ldp-ext:adjacent? uint16 1124 | | | +--ro ldp-ext:negotiated? uint16 1125 | | | +--ro ldp-ext:remaining? uint16 1126 | | +--ro ldp-ext:next-hello? uint16 1127 | | +--ro ldp-ext:statistics 1128 | | | +--ro ldp-ext:discontinuity-time yang:date-and-time 1129 | | | +--ro ldp-ext:hello-received? yang:counter64 1130 | | | +--ro ldp-ext:hello-dropped? yang:counter64 1131 | | +--ro ldp-ext:interface? ldp:mpls-interface-ref 1132 | +--ro ldp-ext:label-policy 1133 | +--ro ldp-ext:advertise 1134 | | +--ro ldp-ext:prefix-list? prefix-list-ref 1135 | +--ro ldp-ext:accept 1136 | +--ro ldp-ext:prefix-list? prefix-list-ref 1137 +--ro ldp-ext:admin-down? boolean 1138 +--ro ldp-ext:label-policy 1139 | +--ro ldp-ext:advertise 1140 | | +--ro ldp-ext:prefix-list? prefix-list-ref 1141 | +--ro ldp-ext:accept 1142 | +--ro ldp-ext:prefix-list? prefix-list-ref 1143 +--ro ldp-ext:graceful-restart 1144 | +--ro ldp-ext:enable? boolean 1145 | +--ro ldp-ext:reconnect-time? uint16 1146 | +--ro ldp-ext:recovery-time? uint16 1147 +--ro ldp-ext:session-ka-holdtime? uint16 1148 +--ro ldp-ext:session-ka-interval? uint16 1150 Figure 8 1152 5.2. Derived States 1154 Following are main areas for which LDP operational "derived" state is 1155 defined: 1157 Neighbor Adjacencies 1159 Peer 1161 Bindings (FEC-label and address) 1163 Capabilities 1165 5.2.1. Adjacency state 1167 Neighbor adjacencies are per address-family hello adjacencies that 1168 are formed with neighbors as result of LDP basic or extended 1169 discovery. In terms of organization, there is a source of discovery 1170 (e.g. interface or target address) along with its associated 1171 parameters and one or more discovered neighbors along with neighbor 1172 discovery related parameters. For the basic discovery, there could 1173 be more than one discovered neighbor for a given source (interface), 1174 whereas there is at most one discovered neighbor for an extended 1175 discovery source (local-address and target-address). This is also to 1176 be noted that the reason for a targeted neighbor adjacency could be 1177 either an active source (locally configured targeted) or passive 1178 source (to allow any incoming extended/targeted hellos). A neighbor/ 1179 adjacency record also contains session-state that helps highlight 1180 whether a given adjacency has progressed to subsequent session level 1181 or to eventual peer level. 1183 Following captures high level tree hierarchy for neighbor adjacency 1184 state. 1186 +--rw mpls-ldp! 1187 +--rw discovery 1188 +--rw interfaces 1189 | +--rw interface* [interface] 1190 | +--rw address-families 1191 | +--rw ipv4 (or ipv6) 1192 | +--ro state 1193 | +--ro hello-adjacencies* [adjacent-address] 1194 | +--ro adjacent-address 1195 | . . . . 1196 | . . . . 1197 +--rw targeted 1198 +--rw address-families 1199 +--rw ipv4 (or ipv6) 1200 +--ro state 1201 +--ro hello-adjacencies* [local-address adjacent-address] 1202 +--ro local-address 1203 +--ro adjacent-address 1204 . . . . 1205 . . . . 1207 Figure 9 1209 5.2.2. Peer state 1211 Peer related derived state is presented under peers tree. This is 1212 one of the core state that provides info on the session related 1213 parameters (mode, authentication, KA timeout etc.), TCP connection 1214 info, hello adjacencies for the peer, statistics related to messages 1215 and bindings, and capabilities exchange info. 1217 Following captures high level tree hierarchy for peer state. 1219 +--rw mpls-ldp! 1220 +--rw peers 1221 +--rw peer* [lsr-id] 1222 +--rw lsr-id 1223 +--ro state 1224 +--ro session-ka-holdtime? 1225 +-- . . . . 1226 +-- . . . . 1227 +--ro capability 1228 + +-- ro . . . 1229 +--ro address-families 1230 | +--ro ipv4 (or ipv6) 1231 | +--ro hello-adjacencies* [local-address adjacent-address] 1232 | . . . . 1233 | . . . . 1234 +--ro received-peer-state 1235 | +--ro . . . . 1236 | +--ro capability 1237 | +--ro . . . . 1238 +--ro statistics 1239 +-- . . . . 1240 +-- received 1241 | +-- ... 1242 +-- sent 1243 +-- ... 1245 Figure 10 1247 5.2.3. Bindings state 1249 Binding state provides information on LDP FEC-label bindings as well 1250 as address binding for both inbound (received) as well as outbound 1251 (advertised) direction. FEC-label bindings are presented as a FEC- 1252 centric view, and address bindings are presented as an address- 1253 centric view: 1255 FEC-Label bindings: 1256 FEC 200.1.1.1/32: 1257 advertised: local-label 16000 1258 peer 192.168.0.2:0 1259 peer 192.168.0.3:0 1260 peer 192.168.0.4:0 1261 received: 1262 peer 192.168.0.2:0, label 16002, used-in-forwarding=Yes 1263 peer 192.168.0.3:0, label 17002, used-in-forwarding=No 1264 FEC 200.1.1.2/32: 1265 . . . . 1266 FEC 201.1.0.0/16: 1267 . . . . 1269 Address bindings: 1270 Addr 1.1.1.1: 1271 advertised 1272 Addr 1.1.1.2: 1273 advertised 1274 Addr 2.2.2.2: 1275 received, peer 192.168.0.2 1276 Addr 2.2.2.22: 1277 received, peer 192.168.0.2 1278 Addr 3.3.3.3: 1279 received, peer 192.168.0.3 1280 Addr 3.3.3.33: 1281 received, peer 192.168.0.3 1283 Figure 11 1285 Note that all local addresses are advertised to all peers and hence 1286 no need to provide per-peer information for local address 1287 advertisement. Furthermore, note that it is easy to derive a peer- 1288 centric view for the bindings from the information already provided 1289 in this model. 1291 Following captures high level tree hierarchy for bindings state. 1293 +--rw mpls-ldp! 1294 +--rw global 1295 +--rw address-families 1296 +--rw ipv4 (or ipv6) 1297 +--ro state 1298 +--ro bindings 1299 +--ro address* [address] 1300 | +--ro address 1301 | +--ro dvertisement-type? advertised-received 1302 | +--ro peer? leafref 1303 +--ro fec-label* [fec] 1304 +--ro fec inet:ipv4-prefix 1305 +--ro peer* [peer advertisement-type] 1306 +--ro peer leafref 1307 +--ro advertisement-type? advertised-received 1308 +--ro label? rt-types:mpls-label 1309 +--ro used-in-forwarding? boolean 1311 Figure 12 1313 5.2.4. Capabilities state 1315 LDP capabilities state comprise two types of information - global 1316 information (such as timer etc.), and per-peer information. 1318 Following captures high level tree hierarchy for LDP capabilities 1319 state. 1321 +--rw mpls-ldp! 1322 +--rw global 1323 | +--ro state 1324 | +--ro capability 1325 | +--ro . . . . 1326 | +--ro . . . . 1327 +--rw peers 1328 +--rw peer* [lsr-id] 1329 +--rw lsr-id yang:dotted-quad 1330 +--ro state 1331 +--ro received-peer-state 1332 +--ro capability 1333 +--ro . . . . 1334 +--ro . . . . 1336 Figure 13 1338 6. Notifications 1340 This model defines a list of notifications to inform client of 1341 important events detected during the protocol operation. These 1342 events include events related to changes in the operational state of 1343 an LDP peer, hello adjacency, and FEC etc. It is to be noted that an 1344 LDP FEC is treated as operational (up) as long as it has at least 1 1345 NHLFE with outgoing label. 1347 Following is a simplified graphical representation of the data model 1348 for LDP notifications. 1350 module: ietf-mpls-ldp 1351 notifications: 1352 +---n mpls-ldp-peer-event 1353 | +--ro event-type? oper-status-event-type 1354 | +--ro peer-ref? leafref 1355 +---n mpls-ldp-hello-adjacency-event 1356 | +--ro event-type? oper-status-event-type 1357 | +--ro (hello-adjacency-type)? 1358 | +--:(targeted) 1359 | | +--ro targeted 1360 | | +--ro target-address? inet:ip-address 1361 | +--:(link) 1362 | +--ro link 1363 | +--ro next-hop-interface? mpls-interface-ref 1364 | +--ro next-hop-address? inet:ip-address 1365 +---n mpls-ldp-fec-event 1366 +--ro event-type? oper-status-event-type 1367 +--ro prefix? inet:ip-prefix 1369 Figure 14 1371 7. Actions 1373 This model defines a list of rpcs that allow performing an action or 1374 executing a command on the protocol. For example, it allows to clear 1375 (reset) LDP peers, hello-adjacencies, and statistics. The model 1376 makes an effort to provide different level of control so that a user 1377 is able to either clear all, or clear all for a given type, or clear 1378 a specific entity. 1380 Following is a simplified graphical representation of the data model 1381 for LDP actions. 1383 module: ietf-mpls-ldp 1384 rpcs: 1385 +---x mpls-ldp-clear-peer 1386 | +---w input 1387 | +---w lsr-id? union 1388 +---x mpls-ldp-clear-hello-adjacency 1389 | +---w input 1390 | +---w hello-adjacency 1391 | +---w (hello-adjacency-type)? 1392 | +--:(targeted) 1393 | | +---w targeted! 1394 | | +---w target-address? inet:ip-address 1395 | +--:(link) 1396 | +---w link! 1397 | +---w next-hop-interface? mpls-interface-ref 1398 | +---w next-hop-address? inet:ip-address 1399 +---x mpls-ldp-clear-peer-statistics 1400 +---w input 1401 +---w lsr-id? union 1403 Figure 15 1405 8. Open Items 1407 Following is a list of open items that are to be discussed and 1408 addressed in future revisions of this document: 1410 o Align operational state modeling with other routing protocols and 1411 [I-D.openconfig-netmod-opstate] 1413 o Specify default values for configuration parameters 1415 o Close on augmentation off "mpls" list in "ietf-mpls" defined in 1416 [I-D.ietf-mpls-base-yang] 1418 o The use of grouping (templates) for bundling and grouping the 1419 configuration items is not employed in current revision, and is a 1420 subject for consideration in future. 1422 o Decide on which label-policy mode (global, per-af, per-peer, per- 1423 peer-per-af) to use as base. 1425 9. YANG Specification 1427 Following are the actual YANG definition (module) for LDP constructs 1428 defined earlier in the document. 1430 9.1. Base 1432 file "ietf-mpls-ldp@2017-03-12.yang" 1434 module ietf-mpls-ldp { 1435 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; 1436 prefix "ldp"; 1438 import ietf-inet-types { 1439 prefix "inet"; 1440 } 1442 import ietf-yang-types { 1443 prefix "yang"; 1444 } 1446 import ietf-routing { 1447 prefix "rt"; 1448 } 1450 import ietf-routing-types { 1451 prefix "rt-types"; 1452 } 1454 import ietf-mpls { 1455 prefix "mpls"; 1456 } 1458 organization 1459 "IETF MPLS Working Group"; 1460 contact 1461 "WG Web: 1462 WG List: 1464 WG Chair: Loa Andersson 1465 1467 WG Chair: Ross Callon 1468 1470 WG Chair: George Swallow 1471 1473 Editor: Kamran Raza 1474 1476 Editor: Rajiv Asati 1477 1479 Editor: Xufeng Liu 1480 1482 Editor: Santosh Esale 1483 1485 Editor: Xia Chen 1486 1488 Editor: Himanshu Shah 1489 "; 1491 description 1492 "This YANG module defines the essential components for the 1493 management of Multi-Protocol Label Switching (MPLS) Label 1494 Distribution Protocol (LDP). It is also the base model to 1495 be augmented for Multipoint LDP (mLDP)."; 1497 revision 2017-03-12 { 1498 description 1499 "Initial revision."; 1500 reference 1501 "RFC XXXX: YANG Data Model for MPLS LDP."; 1502 } 1504 /* 1505 * Typedefs 1506 */ 1507 typedef ldp-address-family { 1508 type identityref { 1509 base rt:address-family; 1510 } 1511 description 1512 "LDP address family type."; 1513 } 1515 typedef duration32-inf { 1516 type union { 1517 type uint32; 1518 type enumeration { 1519 enum "infinite" { 1520 description "The duration is infinite."; 1521 } 1522 } 1523 } 1524 units seconds; 1525 description 1526 "Duration represented as 32 bit seconds with infinite."; 1528 } 1530 typedef advertised-received { 1531 type enumeration { 1532 enum advertised { 1533 description "Advertised information."; 1534 } 1535 enum received { 1536 description "Received information."; 1537 } 1538 } 1539 description 1540 "Received or advertised."; 1541 } 1543 typedef downstream-upstream { 1544 type enumeration { 1545 enum downstream { 1546 description "Downstream information."; 1547 } 1548 enum upstream { 1549 description "Upstream information."; 1550 } 1551 } 1552 description 1553 "Received or advertised."; 1554 } 1556 typedef label-adv-mode { 1557 type enumeration { 1558 enum downstream-unsolicited { 1559 description "Downstream Unsolicited."; 1560 } 1561 enum downstream-on-demand { 1562 description "Downstream on Demand."; 1563 } 1564 } 1565 description 1566 "Label Advertisement Mode."; 1567 } 1569 typedef mpls-interface-ref { 1570 type leafref { 1571 path "/rt:routing/mpls:mpls/mpls:interface/mpls:name"; 1572 } 1573 description 1574 "This type is used by data models that need to reference 1575 mpls interfaces."; 1577 } 1579 typedef oper-status-event-type { 1580 type enumeration { 1581 enum up { 1582 value 1; 1583 description 1584 "Operational status changed to up."; 1585 } 1586 enum down { 1587 value 2; 1588 description 1589 "Operational status changed to down."; 1590 } 1591 } 1592 description "Operational status event type for notifications."; 1593 } 1595 /* 1596 * Identities 1597 */ 1598 identity adjacency-flag-base { 1599 description "Base type for adjacency flags."; 1600 } 1602 identity adjacency-flag-active { 1603 base "adjacency-flag-base"; 1604 description 1605 "This adjacency is configured and actively created."; 1606 } 1608 identity adjacency-flag-passive { 1609 base "adjacency-flag-base"; 1610 description 1611 "This adjacency is not configured and passively accepted."; 1612 } 1614 /* 1615 * Groupings 1616 */ 1618 grouping adjacency-state-attributes { 1619 description 1620 "Adjacency state attributes."; 1622 leaf-list flag { 1623 type identityref { 1624 base "adjacency-flag-base"; 1626 } 1627 description "Adjacency flags."; 1628 } 1629 container hello-holdtime { 1630 description "Hello holdtime state."; 1631 leaf adjacent { 1632 type uint16; 1633 units seconds; 1634 description "Peer holdtime."; 1635 } 1636 leaf negotiated { 1637 type uint16; 1638 units seconds; 1639 description "Negotiated holdtime."; 1640 } 1641 leaf remaining { 1642 type uint16; 1643 units seconds; 1644 description "Remaining holdtime."; 1645 } 1646 } 1648 leaf next-hello { 1649 type uint16; 1650 units seconds; 1651 description "Time to send the next hello message."; 1652 } 1654 container statistics { 1655 description 1656 "Statistics objects."; 1658 leaf discontinuity-time { 1659 type yang:date-and-time; 1660 mandatory true; 1661 description 1662 "The time on the most recent occasion at which any one or 1663 more of this interface's counters suffered a 1664 discontinuity. If no such discontinuities have occurred 1665 since the last re-initialization of the local management 1666 subsystem, then this node contains the time the local 1667 management subsystem re-initialized itself."; 1668 } 1670 leaf hello-received { 1671 type yang:counter64; 1672 description 1673 "The number of hello messages received."; 1675 } 1676 leaf hello-dropped { 1677 type yang:counter64; 1678 description 1679 "The number of hello messages received."; 1680 } 1681 } // statistics 1682 } // adjacency-state-attributes 1684 grouping basic-discovery-timers { 1685 description 1686 "Basic discovery timer attributes."; 1687 leaf hello-holdtime { 1688 type uint16 { 1689 range 15..3600; 1690 } 1691 units seconds; 1692 description 1693 "The time interval for which a LDP link Hello adjacency 1694 is maintained in the absence of link Hello messages from 1695 the LDP neighbor"; 1696 } 1697 leaf hello-interval { 1698 type uint16 { 1699 range 5..1200; 1700 } 1701 units seconds; 1702 description 1703 "The interval between consecutive LDP link Hello messages 1704 used in basic LDP discovery"; 1705 } 1706 } // basic-discovery-timers 1708 grouping binding-address-state-attributes { 1709 description 1710 "Address binding attributes"; 1711 leaf advertisement-type { 1712 type advertised-received; 1713 description 1714 "Received or advertised."; 1715 } 1716 leaf peer { 1717 type leafref { 1718 path "../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; 1719 } 1720 must "../advertisement-type = 'received'" { 1721 description 1722 "Applicable for received address."; 1724 } 1725 description 1726 "LDP peer from which this address is received."; 1727 } // peer 1728 } // binding-address-state-attributes 1730 grouping binding-label-state-attributes { 1731 description 1732 "Label binding attributes"; 1733 list peer { 1734 key "peer advertisement-type"; 1735 description 1736 "List of advertised and received peers."; 1737 leaf peer { 1738 type leafref { 1739 path "../../../../../../../../ldp:peers/ldp:peer/" 1740 + "ldp:lsr-id"; 1741 } 1742 description 1743 "LDP peer from which this binding is received, 1744 or to which this binding is advertised."; 1745 } 1746 leaf advertisement-type { 1747 type advertised-received; 1748 description 1749 "Received or advertised."; 1750 } 1751 leaf label { 1752 type rt-types:mpls-label; 1753 description 1754 "Advertised (outbound) or received (inbound) 1755 label."; 1756 } 1757 leaf used-in-forwarding { 1758 type boolean; 1759 description 1760 "'true' if the lable is used in forwarding."; 1761 } 1762 } // peer 1763 } // binding-label-state-attributes 1765 grouping extended-discovery-policy-attributes { 1766 description 1767 "LDP policy to control the acceptance of extended neighbor 1768 discovery hello messages."; 1769 container hello-accept { 1770 description 1771 "Extended discovery acceptance policies."; 1773 leaf enable { 1774 type boolean; 1775 description 1776 "'true' to accept; 'false' to deny."; 1777 } 1778 } // hello-accept 1779 } // extended-discovery-policy-attributes 1781 grouping extended-discovery-timers { 1782 description 1783 "Extended discovery timer attributes."; 1784 leaf hello-holdtime { 1785 type uint16 { 1786 range 15..3600; 1787 } 1788 units seconds; 1789 description 1790 "The time interval for which LDP targeted Hello adjacency 1792 is maintained in the absence of targeted Hello messages 1793 from an LDP neighbor."; 1794 } 1795 leaf hello-interval { 1796 type uint16 { 1797 range 5..3600; 1798 } 1799 units seconds; 1800 description 1801 "The interval between consecutive LDP targeted Hello 1802 messages used in extended LDP discovery."; 1803 } 1804 } // extended-discovery-timers 1806 grouping global-attributes { 1807 description "Configuration attributes at global level."; 1809 uses instance-attributes; 1810 } // global-attributes 1812 grouping graceful-restart-attributes { 1813 description 1814 "Graceful restart configuration attributes."; 1815 container graceful-restart { 1816 description 1817 "Attributes for graceful restart."; 1818 leaf enable { 1819 type boolean; 1820 description 1821 "Enable or disable graceful restart."; 1822 } 1823 leaf reconnect-time { 1824 type uint16 { 1825 range 10..1800; 1826 } 1827 units seconds; 1828 description 1829 "Specifies the time interval that the remote LDP peer 1830 must wait for the local LDP peer to reconnect after the 1831 remote peer detects the LDP communication failure."; 1832 } 1833 leaf recovery-time { 1834 type uint16 { 1835 range 30..3600; 1836 } 1837 units seconds; 1838 description 1839 "Specifies the time interval, in seconds, that the remote 1840 LDP peer preserves its MPLS forwarding state after 1841 receiving the Initialization message from the restarted 1842 local LDP peer."; 1843 } 1844 leaf forwarding-holdtime { 1845 type uint16 { 1846 range 30..3600; 1847 } 1848 units seconds; 1849 description 1850 "Specifies the time interval, in seconds, before the 1851 termination of the recovery phase."; 1852 } 1853 } // graceful-restart 1854 } // graceful-restart-attributes 1856 grouping graceful-restart-attributes-per-peer { 1857 description 1858 "Per peer graceful restart configuration attributes."; 1859 container graceful-restart { 1860 description 1861 "Attributes for graceful restart."; 1862 leaf enable { 1863 type boolean; 1864 description 1865 "Enable or disable graceful restart."; 1866 } 1867 leaf reconnect-time { 1868 type uint16 { 1869 range 10..1800; 1870 } 1871 units seconds; 1872 description 1873 "Specifies the time interval that the remote LDP peer 1874 must wait for the local LDP peer to reconnect after the 1875 remote peer detects the LDP communication failure."; 1876 } 1877 leaf recovery-time { 1878 type uint16 { 1879 range 30..3600; 1880 } 1881 units seconds; 1882 description 1883 "Specifies the time interval, in seconds, that the remote 1884 LDP peer preserves its MPLS forwarding state after 1885 receiving the Initialization message from the restarted 1886 local LDP peer."; 1887 } 1888 } // graceful-restart 1889 } // graceful-restart-attributes-per-peer 1891 grouping instance-attributes { 1892 description "Configuration attributes at instance level."; 1894 container capability { 1895 description "Configure capability."; 1896 } // capability 1898 uses graceful-restart-attributes; 1900 leaf lsr-id { 1901 type yang:dotted-quad; 1902 description "Router ID."; 1903 } 1904 } // instance-attributes 1906 grouping ldp-adjacency-ref { 1907 description 1908 "An absolute reference to an LDP adjacency."; 1909 choice hello-adjacency-type { 1910 description 1911 "Interface or targeted adjacency."; 1912 case targeted { 1913 container targeted { 1914 description "Targeted adjacency."; 1915 leaf target-address { 1916 type inet:ip-address; 1917 description 1918 "The target address."; 1919 } 1920 } // targeted 1921 } 1922 case link { 1923 container link { 1924 description "Link adjacency."; 1925 leaf next-hop-interface { 1926 type mpls-interface-ref; 1927 description 1928 "Interface connecting to next-hop."; 1929 } 1930 leaf next-hop-address { 1931 type inet:ip-address; 1932 must "../next-hop-interface" { 1933 description 1934 "Applicable when interface is specified."; 1936 } 1937 description 1938 "IP address of next-hop."; 1939 } 1940 } // link 1941 } 1942 } 1943 } // ldp-adjacency-ref 1945 grouping ldp-fec-event { 1946 description 1947 "A LDP FEC event."; 1948 leaf prefix { 1949 type inet:ip-prefix; 1950 description 1951 "FEC."; 1952 } 1953 } // ldp-fec-event 1955 grouping ldp-peer-ref { 1956 description 1957 "An absolute reference to an LDP peer."; 1958 leaf peer-ref { 1959 type leafref { 1960 path "/rt:routing/rt:control-plane-protocols/mpls-ldp/" 1961 + "peers/peer/lsr-id"; 1962 } 1963 description 1964 "Reference to an LDP peer."; 1966 } 1967 } // ldp-peer-ref 1969 grouping peer-attributes { 1970 description "Peer configuration attributes."; 1972 leaf session-ka-holdtime { 1973 type uint16 { 1974 range 45..3600; 1975 } 1976 units seconds; 1977 description 1978 "The time interval after which an inactive LDP session 1979 terminates and the corresponding TCP session closes. 1980 Inactivity is defined as not receiving LDP packets from the 1981 peer."; 1982 } 1983 leaf session-ka-interval { 1984 type uint16 { 1985 range 15..1200; 1986 } 1987 units seconds; 1988 description 1989 "The interval between successive transmissions of keepalive 1990 packets. Keepalive packets are only sent in the absence of 1991 other LDP packets transmitted over the LDP session."; 1992 } 1993 } // peer-attributes 1995 grouping peer-authentication { 1996 description 1997 "Peer authentication container."; 1998 /* 1999 leaf session-authentication-md5-password { 2000 type string { 2001 length "1..80"; 2002 } 2003 description 2004 "Assigns an encrypted MD5 password to an LDP 2005 peer"; 2006 } // md5-password 2007 */ 2008 container authentication { 2009 description "Containing authentication information."; 2010 choice auth-type-selection { 2011 description 2012 "Options for expressing authentication setting."; 2013 case auth-key { 2014 leaf md5-key { 2015 type string; 2016 description 2017 "MD5 Key string."; 2018 } 2019 } 2020 } 2021 } // authentication 2022 } // peer-authentication 2024 grouping peer-state-derived { 2025 description "Peer derived state attributes."; 2027 container label-advertisement-mode { 2028 description "Label advertisement mode state."; 2029 leaf local { 2030 type label-adv-mode; 2031 description 2032 "Local Label Advertisement Mode."; 2033 } 2034 leaf peer { 2035 type label-adv-mode; 2036 description 2037 "Peer Label Advertisement Mode."; 2038 } 2039 leaf negotiated { 2040 type label-adv-mode; 2041 description 2042 "Negotiated Label Advertisement Mode."; 2043 } 2044 } 2045 leaf next-keep-alive { 2046 type uint16; 2047 units seconds; 2048 description "Time to send the next KeepAlive message."; 2049 } 2051 leaf peer-ldp-id { 2052 type yang:dotted-quad; 2053 description "Peer LDP ID."; 2054 } 2056 container received-peer-state { 2057 description "Peer features."; 2059 uses graceful-restart-attributes-per-peer; 2061 container capability { 2062 description "Configure capability."; 2063 container end-of-lib { 2064 description 2065 "Configure end-of-lib capability."; 2066 leaf enable { 2067 type boolean; 2068 description 2069 "Enable end-of-lib capability."; 2070 } 2071 } 2072 container typed-wildcard-fec { 2073 description 2074 "Configure typed-wildcard-fec capability."; 2075 leaf enable { 2076 type boolean; 2077 description 2078 "Enable typed-wildcard-fec capability."; 2079 } 2080 } 2081 container upstream-label-assignment { 2082 description 2083 "Configure upstream label assignment capability."; 2084 leaf enable { 2085 type boolean; 2086 description 2087 "Enable upstream label assignment."; 2088 } 2089 } 2090 } // capability 2091 } // received-peer-state 2093 container session-holdtime { 2094 description "Session holdtime state."; 2095 leaf peer { 2096 type uint16; 2097 units seconds; 2098 description "Peer holdtime."; 2099 } 2100 leaf negotiated { 2101 type uint16; 2102 units seconds; 2103 description "Negotiated holdtime."; 2104 } 2105 leaf remaining { 2106 type uint16; 2107 units seconds; 2108 description "Remaining holdtime."; 2109 } 2111 } // session-holdtime 2113 leaf session-state { 2114 type enumeration { 2115 enum non-existent { 2116 description "NON EXISTENT state. Transport disconnected."; 2117 } 2118 enum initialized { 2119 description "INITIALIZED state."; 2120 } 2121 enum openrec { 2122 description "OPENREC state."; 2123 } 2124 enum opensent { 2125 description "OPENSENT state."; 2126 } 2127 enum operational { 2128 description "OPERATIONAL state."; 2129 } 2130 } 2131 description 2132 "Representing the operational status."; 2133 } 2135 container tcp-connection { 2136 description "TCP connection state."; 2137 leaf local-address { 2138 type inet:ip-address; 2139 description "Local address."; 2140 } 2141 leaf local-port { 2142 type inet:port-number; 2143 description "Local port."; 2144 } 2145 leaf remote-address { 2146 type inet:ip-address; 2147 description "Remote address."; 2148 } 2149 leaf remote-port { 2150 type inet:port-number; 2151 description "Remote port."; 2152 } 2153 } // tcp-connection 2155 leaf up-time { 2156 type string; 2157 description "Up time. The interval format in ISO 8601."; 2158 } 2159 container statistics { 2160 description 2161 "Statistics objects."; 2163 leaf discontinuity-time { 2164 type yang:date-and-time; 2165 mandatory true; 2166 description 2167 "The time on the most recent occasion at which any one or 2168 more of this interface's counters suffered a 2169 discontinuity. If no such discontinuities have occurred 2170 since the last re-initialization of the local management 2171 subsystem, then this node contains the time the local 2172 management subsystem re-initialized itself."; 2173 } 2175 container received { 2176 description "Inbound statistics."; 2177 uses statistics-peer-received-sent; 2178 } 2179 container sent { 2180 description "Outbound statistics."; 2181 uses statistics-peer-received-sent; 2182 } 2184 leaf total-addresses { 2185 type uint32; 2186 description 2187 "The number of learned addresses."; 2188 } 2189 leaf total-labels { 2190 type uint32; 2191 description 2192 "The number of learned labels."; 2193 } 2194 leaf total-fec-label-bindings { 2195 type uint32; 2196 description 2197 "The number of learned label-address bindings."; 2198 } 2199 } // statistics 2200 } // peer-state-derived 2202 grouping policy-container { 2203 description 2204 "LDP policy attributes."; 2205 container label-policy { 2206 description 2207 "Label policy attributes."; 2208 container advertise { 2209 description 2210 "Label advertising policies."; 2211 container egress-explicit-null { 2212 description 2213 "Enables an egress router to advertise an 2214 explicit null label (value 0) in place of an 2215 implicit null label (value 3) to the 2216 penultimate hop router."; 2217 leaf enable { 2218 type boolean; 2219 description 2220 "'true' to enable explicit null."; 2221 } 2222 } 2223 } // advertise 2224 } // label-policy 2225 } // policy-container 2227 grouping statistics-peer-received-sent { 2228 description 2229 "Inbound and outbound statistic counters."; 2230 leaf total-octets { 2231 type yang:counter64; 2232 description 2233 "The total number of octets sent or received."; 2234 } 2235 leaf total-messages { 2236 type yang:counter64; 2237 description 2238 "The number of messages sent or received."; 2239 } 2240 leaf address { 2241 type yang:counter64; 2242 description 2243 "The number of address messages sent or received."; 2244 } 2245 leaf address-withdraw { 2246 type yang:counter64; 2247 description 2248 "The number of address-withdraw messages sent or received."; 2249 } 2250 leaf initialization { 2251 type yang:counter64; 2252 description 2253 "The number of initialization messages sent or received."; 2254 } 2255 leaf keepalive { 2256 type yang:counter64; 2257 description 2258 "The number of keepalive messages sent or received."; 2259 } 2260 leaf label-abort-request { 2261 type yang:counter64; 2262 description 2263 "The number of label-abort-request messages sent or 2264 received."; 2265 } 2266 leaf label-mapping { 2267 type yang:counter64; 2268 description 2269 "The number of label-mapping messages sent or received."; 2270 } 2271 leaf label-release { 2272 type yang:counter64; 2273 description 2274 "The number of label-release messages sent or received."; 2275 } 2276 leaf label-request { 2277 type yang:counter64; 2278 description 2279 "The number of label-request messages sent or received."; 2280 } 2281 leaf label-withdraw { 2282 type yang:counter64; 2283 description 2284 "The number of label-withdraw messages sent or received."; 2285 } 2286 leaf notification { 2287 type yang:counter64; 2288 description 2289 "The number of messages sent or received."; 2290 } 2291 } // statistics-peer-received-sent 2293 /* 2294 * Configuration data nodes 2295 */ 2297 augment "/rt:routing/rt:control-plane-protocols" { 2298 description "LDP augmentation."; 2300 container mpls-ldp { 2301 presence "Container for LDP protocol."; 2302 description 2303 "Container for LDP protocol."; 2305 container global { 2306 description 2307 "Global attributes for LDP."; 2308 container config { 2309 description 2310 "Configuration data."; 2311 uses global-attributes; 2312 } 2313 container state { 2314 config false; 2315 description 2316 "Operational state data."; 2317 uses global-attributes; 2318 } 2320 container address-families { 2321 description 2322 "Container for address families."; 2323 container ipv4 { 2324 presence 2325 "Present if IPv4 is enabled, unless the 'enable' 2326 leaf is set to 'false'"; 2327 description 2328 "IPv4 address family."; 2329 container config { 2330 description 2331 "Configuration data."; 2332 leaf enable { 2333 type boolean; 2334 default true; 2335 description 2336 "'true' to enable the address family."; 2337 } 2338 uses policy-container; 2339 } 2340 container state { 2341 config false; 2342 description 2343 "Operational state data."; 2344 leaf enable { 2345 type boolean; 2346 description 2347 "'true' to enable the address family."; 2348 } 2349 leaf label-distribution-controlmode { 2350 type enumeration { 2351 enum independent { 2352 description 2353 "Independent label distribution control."; 2354 } 2355 enum Ordered { 2356 description 2357 "Ordered Label Distribution Control."; 2358 } 2359 } 2360 description 2361 "Label distribution control mode."; 2362 reference 2363 "RFC5036: LDP Specification. Sec 2.6."; 2364 } 2366 uses policy-container; 2368 // ipv4 bindings 2369 container bindings { 2370 description 2371 "LDP address and label binding information."; 2372 list address { 2373 key "address"; 2374 description 2375 "List of address bindings."; 2376 leaf address { 2377 type inet:ipv4-address; 2378 description 2379 "Binding address."; 2380 } 2381 uses binding-address-state-attributes; 2382 } // binding-address 2384 list fec-label { 2385 key "fec"; 2386 description 2387 "List of label bindings."; 2388 leaf fec { 2389 type inet:ipv4-prefix; 2390 description 2391 "Prefix FEC."; 2392 } 2393 uses binding-label-state-attributes; 2394 } // fec-label 2395 } // bindings 2396 } // state 2397 } // ipv4 2398 } // address-families 2399 container discovery { 2400 description 2401 "Neibgbor discovery configuration."; 2403 container interfaces { 2404 description 2405 "A list of interfaces for basic descovery."; 2406 container config { 2407 description 2408 "Configuration data."; 2409 uses basic-discovery-timers; 2410 } 2411 container state { 2412 config false; 2413 description 2415 "Operational state data."; 2416 uses basic-discovery-timers; 2417 } 2419 list interface { 2420 key "interface"; 2421 description 2422 "List of LDP interfaces."; 2423 leaf interface { 2424 type mpls-interface-ref; 2425 description 2426 "Interface."; 2427 } 2428 container state { 2429 config false; 2430 description 2431 "Operational state data."; 2432 leaf next-hello { 2433 type uint16; 2434 units seconds; 2435 description "Time to send the next hello message."; 2436 } 2437 } // state 2439 container address-families { 2440 description 2441 "Container for address families."; 2442 container ipv4 { 2443 presence 2444 "Present if IPv4 is enabled, unless the 'enable' 2445 leaf is set to 'false'"; 2446 description 2447 "IPv4 address family."; 2448 container config { 2449 description 2450 "Configuration data."; 2451 leaf enable { 2452 type boolean; 2453 default true; 2454 description 2455 "Enable the address family on the interface."; 2456 } 2457 } 2459 container state { 2460 config false; 2461 description 2462 "Operational state data."; 2463 leaf enable { 2464 type boolean; 2465 description 2466 "Enable the address family on the interface."; 2467 } 2469 // ipv4 2470 list hello-adjacencies { 2471 key "adjacent-address"; 2472 description "List of hello adjacencies."; 2474 leaf adjacent-address { 2475 type inet:ipv4-address; 2476 description 2477 "Neighbor address of the hello adjacency."; 2478 } 2480 uses adjacency-state-attributes; 2482 leaf peer { 2483 type leafref { 2484 path "../../../../../../../../../" 2485 + "peers/peer/lsr-id"; 2486 } 2487 description 2488 "LDP peer from this adjacency."; 2489 } 2490 } // hello-adjacencies 2491 } // state 2492 } // ipv4 2493 } // address-families 2494 } // list interface 2496 } // interfaces 2498 container targeted 2499 { 2500 description 2501 "A list of targeted neighbors for extended discovery."; 2502 container config { 2504 description 2505 "Configuration data."; 2506 uses extended-discovery-timers; 2507 uses extended-discovery-policy-attributes; 2508 } 2509 container state { 2510 config false; 2511 description 2512 "Operational state data."; 2513 uses extended-discovery-timers; 2514 uses extended-discovery-policy-attributes; 2515 } 2517 container address-families { 2518 description 2519 "Container for address families."; 2520 container ipv4 { 2521 presence 2522 "Present if IPv4 is enabled."; 2523 description 2524 "IPv4 address family."; 2525 container state { 2526 config false; 2527 description 2528 "Operational state data."; 2530 list hello-adjacencies { 2531 key "local-address adjacent-address"; 2532 description "List of hello adjacencies."; 2534 leaf local-address { 2535 type inet:ipv4-address; 2536 description 2537 "Local address of the hello adjacency."; 2538 } 2539 leaf adjacent-address { 2540 type inet:ipv4-address; 2541 description 2542 "Neighbor address of the hello adjacency."; 2543 } 2544 uses adjacency-state-attributes; 2546 leaf peer { 2547 type leafref { 2548 path "../../../../../../../../peers/peer/" 2549 + "lsr-id"; 2550 } 2551 description 2552 "LDP peer from this adjacency."; 2553 } 2554 } // hello-adjacencies 2555 } // state 2557 list target { 2558 key "adjacent-address"; 2559 description 2560 "Targeted discovery params."; 2562 leaf adjacent-address { 2563 type inet:ipv4-address; 2564 description 2565 "Configures a remote LDP neighbor and enables 2566 extended LDP discovery of the specified 2567 neighbor."; 2568 } 2569 container config { 2570 description 2571 "Configuration data."; 2572 leaf enable { 2573 type boolean; 2574 description 2575 "Enable the target."; 2576 } 2577 leaf local-address { 2578 type inet:ipv4-address; 2579 description 2580 "The local address."; 2581 } 2582 } 2583 container state { 2584 config false; 2585 description 2586 "Operational state data."; 2587 leaf enable { 2588 type boolean; 2589 description 2590 "Enable the target."; 2591 } 2592 leaf local-address { 2593 type inet:ipv4-address; 2594 description 2595 "The local address."; 2596 } 2597 } // state 2598 } // target 2599 } // ipv4 2600 } // address-families 2601 } // targeted 2602 } // discovery 2603 } // global 2605 container peers { 2606 description 2607 "Peers configuration attributes."; 2609 container config { 2610 description 2611 "Configuration data."; 2612 uses peer-authentication; 2613 uses peer-attributes; 2614 } 2615 container state { 2616 config false; 2617 description 2618 "Operational state data."; 2619 uses peer-authentication; 2620 uses peer-attributes; 2621 } 2623 list peer { 2624 key "lsr-id"; 2625 description 2626 "List of peers."; 2628 leaf lsr-id { 2629 type yang:dotted-quad; 2630 description "LSR ID."; 2631 } 2633 container config { 2634 description 2635 "Configuration data."; 2637 uses peer-authentication; 2638 container capability { 2639 description 2640 "Per peer capability"; 2641 } 2642 } 2643 container state { 2644 config false; 2645 description 2646 "Operational state data."; 2648 uses peer-authentication; 2649 container capability { 2650 description 2651 "Per peer capability"; 2652 } 2654 container address-families { 2655 description 2656 "Per-vrf per-af params."; 2657 container ipv4 { 2658 presence 2659 "Present if IPv4 is enabled."; 2660 description 2661 "IPv4 address family."; 2663 list hello-adjacencies { 2664 key "local-address adjacent-address"; 2665 description "List of hello adjacencies."; 2667 leaf local-address { 2668 type inet:ipv4-address; 2669 description 2670 "Local address of the hello adjacency."; 2671 } 2672 leaf adjacent-address { 2673 type inet:ipv4-address; 2674 description 2675 "Neighbor address of the hello adjacency."; 2676 } 2678 uses adjacency-state-attributes; 2680 leaf interface { 2681 type mpls-interface-ref; 2682 description "Interface for this adjacency."; 2683 } 2684 } // hello-adjacencies 2685 } // ipv4 2686 } // address-families 2687 uses peer-state-derived; 2688 } // state 2689 } // list peer 2690 } // peers 2691 } // container mpls-ldp 2692 } 2694 /* 2695 * RPCs 2696 */ 2697 rpc mpls-ldp-clear-peer { 2698 description 2699 "Clears the session to the peer."; 2700 input { 2701 leaf lsr-id { 2702 type union { 2703 type yang:dotted-quad; 2704 type uint32; 2705 } 2706 description 2707 "LSR ID of peer to be cleared. If this is not provided 2708 then all peers are cleared"; 2709 } 2710 } 2711 } 2713 rpc mpls-ldp-clear-hello-adjacency { 2714 description 2715 "Clears the hello adjacency"; 2716 input { 2717 container hello-adjacency { 2718 description 2719 "Link adjacency or targettted adjacency. If this is not 2720 provided then all hello adjacencies are cleared"; 2721 choice hello-adjacency-type { 2722 description "Adjacency type."; 2723 case targeted { 2724 container targeted { 2725 presence "Present to clear targeted adjacencies."; 2726 description 2727 "Clear targeted adjacencies."; 2728 leaf target-address { 2729 type inet:ip-address; 2730 description 2731 "The target address. If this is not provided then 2732 all targeted adjacencies are cleared"; 2733 } 2734 } // targeted 2736 } 2737 case link { 2738 container link { 2739 presence "Present to clear link adjacencies."; 2740 description 2741 "Clear link adjacencies."; 2742 leaf next-hop-interface { 2743 type mpls-interface-ref; 2744 description 2746 "Interface connecting to next-hop. If this is not 2747 provided then all link adjacencies are cleared."; 2748 } 2749 leaf next-hop-address { 2750 type inet:ip-address; 2751 must "../next-hop-interface" { 2752 description 2753 "Applicable when interface is specified."; 2754 } 2755 description 2756 "IP address of next-hop. If this is not provided 2757 then adjacencies to all next-hops on the given 2758 interface are cleared."; 2759 } // next-hop-address 2760 } // link 2761 } 2762 } 2763 } 2764 } 2765 } 2767 rpc mpls-ldp-clear-peer-statistics { 2768 description 2769 "Clears protocol statistics (e.g. sent and received 2770 counters)."; 2771 input { 2772 leaf lsr-id { 2773 type union { 2774 type yang:dotted-quad; 2775 type uint32; 2776 } 2777 description 2778 "LSR ID of peer whose statistic are to be cleared. 2779 If this is not provided then all peers statistics are 2780 cleared"; 2781 } 2782 } 2783 } 2784 /* 2785 * Notifications 2786 */ 2787 notification mpls-ldp-peer-event { 2789 description 2790 "Notification event for a change of LDP peer operational 2791 status."; 2792 leaf event-type { 2793 type oper-status-event-type; 2794 description "Event type."; 2795 } 2796 uses ldp-peer-ref; 2797 } 2799 notification mpls-ldp-hello-adjacency-event { 2800 description 2801 "Notification event for a change of LDP adjacency operational 2802 status."; 2803 leaf event-type { 2804 type oper-status-event-type; 2805 description "Event type."; 2806 } 2807 uses ldp-adjacency-ref; 2808 } 2810 notification mpls-ldp-fec-event { 2811 description 2812 "Notification event for a change of FEC status."; 2813 leaf event-type { 2814 type oper-status-event-type; 2815 description "Event type."; 2816 } 2817 uses ldp-fec-event; 2818 } 2819 } 2821 2823 Figure 16 2825 9.2. Extended 2827 file "ietf-mpls-ldp-extended@2017-03-12.yang" 2828 module ietf-mpls-ldp-extended { 2829 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended"; 2830 prefix "ldp-ext"; 2832 import ietf-inet-types { 2833 prefix "inet"; 2834 } 2835 import ietf-routing { 2836 prefix "rt"; 2837 } 2839 import ietf-routing-types { 2840 prefix "rt-types"; 2841 } 2843 import ietf-key-chain { 2844 prefix "key-chain"; 2845 } 2847 import ietf-mpls-ldp { 2848 prefix "ldp"; 2849 } 2851 organization 2852 "IETF MPLS Working Group"; 2853 contact 2854 "WG Web: 2855 WG List: 2857 WG Chair: Loa Andersson 2858 2860 WG Chair: Ross Callon 2861 2863 WG Chair: George Swallow 2864 2866 Editor: Kamran Raza 2867 2869 Editor: Rajiv Asati 2870 2872 Editor: Xufeng Liu 2873 2875 Editor: Santosh Esale 2876 2878 Editor: Xia Chen 2879 2881 Editor: Himanshu Shah 2882 "; 2884 description 2885 "This YANG module defines the essential components for the 2886 management of Multi-Protocol Label Switching (MPLS) Label 2887 Distribution Protocol (LDP). It is also the base model to 2888 be augmented for Multipoint LDP (mLDP)."; 2890 revision 2017-03-12 { 2891 description 2892 "Initial revision."; 2893 reference 2894 "RFC XXXX: YANG Data Model for MPLS LDP."; 2895 } 2897 /* 2898 * Features 2899 */ 2900 feature all-af-policy-config { 2901 description 2902 "This feature indicates that the system allows to configure 2903 policies that are applied to all address families."; 2904 } 2906 feature capability-end-of-lib { 2907 description 2908 "This feature indicates that the system allows to configure 2909 LDP end-of-lib capability."; 2910 } 2912 feature capability-typed-wildcard-fec { 2913 description 2914 "This feature indicates that the system allows to configure 2915 LDP typed-wildcard-fec capability."; 2916 } 2918 feature capability-upstream-label-assignment { 2919 description 2920 "This feature indicates that the system allows to configure 2921 LDP upstream label assignment capability."; 2922 } 2924 feature forwarding-nexthop-config { 2925 description 2926 "This feature indicates that the system allows to configure 2927 forwarding nexthop on interfaces."; 2928 } 2930 feature graceful-restart-helper-mode { 2931 description 2932 "This feature indicates that the system supports graceful 2933 restart helper mode."; 2934 } 2936 feature per-interface-timer-config { 2937 description 2938 "This feature indicates that the system allows to configure 2939 interface hello timers at the per-interface level."; 2940 } 2942 feature per-peer-graceful-restart-config { 2943 description 2944 "This feature indicates that the system allows to configure 2945 graceful restart at the per-peer level."; 2946 } 2948 feature per-peer-session-attributes-config { 2949 description 2950 "This feature indicates that the system allows to configure 2951 session attributes at the per-peer level."; 2952 } 2954 feature policy-label-assignment-config { 2955 description 2956 "This feature indicates that the system allows to configure 2957 policies to assign labels according to certain prefixes."; 2958 } 2960 feature policy-ordered-label-config { 2961 description 2962 "This feature indicates that the system allows to configure 2963 ordered label policies."; 2964 } 2966 feature policy-targeted-discovery-config { 2967 description 2968 "This feature indicates that the system allows to configure 2969 policies to control the acceptance of targeted neighbor 2970 discovery hello messages."; 2971 } 2973 feature session-downstream-on-demand-config { 2974 description 2975 "This feature indicates that the system allows to configure 2976 session downstream-on-demand"; 2977 } 2979 /* 2980 * Typedefs 2981 */ 2982 typedef neighbor-list-ref { 2983 type string; 2984 description 2985 "A type for a reference to a neighbor list."; 2986 } 2988 typedef prefix-list-ref { 2989 type string; 2990 description 2991 "A type for a reference to a prefix list."; 2992 } 2994 typedef peer-list-ref { 2995 type string; 2996 description 2997 "A type for a reference to a peer list."; 2998 } 3000 /* 3001 * Identities 3002 */ 3004 /* 3005 * Groupings 3006 */ 3007 grouping address-family-ipv4-augment { 3008 description "Augmentation to address family IPv4."; 3010 leaf transport-address { 3011 type inet:ipv4-address; 3012 description 3013 "The transport address advertised in LDP Hello messages."; 3014 } 3015 } // address-family-ipv4-augment 3017 grouping address-family-ipv6-augment { 3018 description "Augmentation to address family IPv6."; 3020 leaf transport-address { 3021 type inet:ipv6-address; 3022 mandatory true; 3023 description 3024 "The transport address advertised in LDP Hello messages."; 3025 } 3026 } // address-family-ipv6-augment 3028 grouping authentication-keychain-augment { 3029 description "Augmentation to authentication to add keychain."; 3031 leaf key-chain { 3032 type key-chain:key-chain-ref; 3033 description 3034 "key-chain name."; 3035 } 3036 } // authentication-keychain-augment 3038 grouping capability-augment { 3039 description "Augmentation to capability."; 3041 container end-of-lib { 3042 if-feature capability-end-of-lib; 3043 description 3044 "Configure end-of-lib capability."; 3045 leaf enable { 3046 type boolean; 3047 description 3048 "Enable end-of-lib capability."; 3049 } 3050 } 3051 container typed-wildcard-fec { 3052 if-feature capability-typed-wildcard-fec; 3053 description 3054 "Configure typed-wildcard-fec capability."; 3055 leaf enable { 3056 type boolean; 3057 description 3058 "Enable typed-wildcard-fec capability."; 3059 } 3060 } 3061 container upstream-label-assignment { 3062 if-feature capability-upstream-label-assignment; 3063 description 3064 "Configure upstream label assignment capability."; 3065 leaf enable { 3066 type boolean; 3067 description 3068 "Enable upstream label assignment."; 3069 } 3070 } 3072 } // capability-augment 3074 grouping global-augment { 3075 description "Augmentation to global attributes."; 3077 leaf igp-synchronization-delay { 3078 type uint16 { 3079 range 3..60; 3080 } 3081 units seconds; 3082 description 3083 "Sets the interval that the LDP waits before notifying the 3084 Interior Gateway Protocol (IGP) that label exchange is 3085 completed so that IGP can start advertising the normal 3086 metric for the link."; 3087 } 3089 uses ldp:policy-container { 3090 if-feature all-af-policy-config; 3091 } 3092 } // global-augment 3094 grouping global-forwarding-nexthop-augment { 3095 description 3096 "Augmentation to global forwarding nexthop interfaces."; 3098 container forwarding-nexthop { 3099 if-feature forwarding-nexthop-config; 3100 description 3101 "Configuration for forwarding nexthop."; 3103 container interfaces { 3104 description 3105 "A list of interfaces on which forwarding is disabled."; 3107 list interface { 3108 key "interface"; 3109 description 3110 "List of LDP interfaces."; 3111 leaf interface { 3112 type ldp:mpls-interface-ref; 3113 description 3114 "Interface."; 3115 } 3116 list address-family { 3117 key "afi"; 3118 description 3119 "Per-vrf per-af params."; 3121 leaf afi { 3122 type ldp:ldp-address-family; 3123 description 3124 "Address family type value."; 3125 } 3126 container config { 3127 description 3128 "Configuration data."; 3129 leaf ldp-disable { 3130 type boolean; 3131 description 3132 "Disable LDP forwarding on the interface."; 3133 } 3134 } 3135 container state { 3136 config false; 3137 description 3138 "Operational state data."; 3139 leaf ldp-disable { 3140 type boolean; 3141 description 3142 "Disable LDP forwarding on the interface."; 3143 } 3144 } 3145 } // address-family 3146 } // list interface 3147 } // interfaces 3148 } // forwarding-nexthop 3149 } // global-forwarding-nexthop-augment 3151 grouping graceful-restart-augment { 3152 description "Augmentation to graceful restart."; 3154 leaf helper-enable { 3155 if-feature graceful-restart-helper-mode; 3156 type boolean; 3157 description 3158 "Enable or disable graceful restart helper mode."; 3159 } 3160 } // graceful-restart-augment 3162 grouping interface-address-family-ipv4-augment { 3163 description "Augmentation to interface address family IPv4."; 3165 leaf transport-address { 3166 type union { 3167 type enumeration { 3168 enum "use-interface-address" { 3169 description 3170 "Use interface address as the transport address."; 3171 } 3172 } 3173 type inet:ipv4-address; 3174 } 3175 description 3176 "IP address to be advertised as the LDP transport address."; 3177 } 3178 } // interface-address-family-ipv4-augment 3180 grouping interface-address-family-ipv6-augment { 3181 description "Augmentation to interface address family IPv6."; 3183 leaf transport-address { 3184 type union { 3185 type enumeration { 3186 enum "use-interface-address" { 3187 description 3188 "Use interface address as the transport address."; 3189 } 3190 } 3191 type inet:ipv6-address; 3192 } 3193 description 3194 "IP address to be advertised as the LDP transport address."; 3195 } 3196 } // interface-address-family-ipv6-augment 3198 grouping interface-augment { 3199 description "Augmentation to interface."; 3201 uses ldp:basic-discovery-timers { 3202 if-feature per-interface-timer-config; 3203 } 3204 leaf igp-synchronization-delay { 3205 if-feature per-interface-timer-config; 3206 type uint16 { 3207 range 3..60; 3208 } 3209 units seconds; 3210 description 3211 "Sets the interval that the LDP waits before 3212 notifying the Interior Gateway Protocol (IGP) 3213 that label exchange is completed so that IGP 3214 can start advertising the normal metric for 3215 the link."; 3216 } 3218 } // interface-augment 3220 grouping label-policy-augment { 3221 description "Augmentation to graceful restart."; 3223 container accept { 3224 description 3225 "Label advertisement acceptance policies."; 3226 leaf prefix-list { 3227 type prefix-list-ref; 3228 description 3229 "Applies the prefix list to incoming label 3230 advertisements."; 3231 } 3232 } // accept 3233 container assign { 3234 if-feature policy-label-assignment-config; 3235 description 3236 "Label assignment policies"; 3237 container independent-mode { 3238 description 3239 "Independent label policy attributes."; 3240 leaf prefix-list { 3241 type prefix-list-ref; 3242 description 3243 "Assign labels according to certain prefixes."; 3244 } 3245 } // independent-mode 3246 container ordered-mode { 3247 if-feature policy-ordered-label-config; 3248 description 3249 "Ordered label policy attributes."; 3250 leaf egress-prefix-list { 3251 type prefix-list-ref; 3252 description 3253 "Assign labels according to certain prefixes for 3254 egress LSR."; 3255 } 3256 } // ordered-mode 3257 } // assign 3258 } // label-policy-augment 3260 grouping label-policy-advertise-augment { 3261 description "Augmentation to graceful restart."; 3263 leaf prefix-list { 3264 type prefix-list-ref; 3265 description 3266 "Applies the prefix list to outgoing label 3267 advertisements."; 3268 } 3269 } // label-policy-advertise-augment 3271 grouping peer-af-policy-container { 3272 description 3273 "LDP policy attribute container under peer address-family."; 3274 container label-policy { 3275 description 3276 "Label policy attributes."; 3277 container advertise { 3278 description 3279 "Label advertising policies."; 3280 leaf prefix-list { 3281 type prefix-list-ref; 3282 description 3283 "Applies the prefix list to outgoing label 3284 advertisements."; 3285 } 3286 } 3287 container accept { 3288 description 3289 "Label advertisement acceptance policies."; 3290 leaf prefix-list { 3291 type prefix-list-ref; 3292 description 3293 "Applies the prefix list to incoming label 3294 advertisements."; 3295 } 3296 } // accept 3297 } // label-policy 3298 } // peer-af-policy-container 3300 grouping peer-augment { 3301 description "Augmentation to each peer list entry."; 3303 leaf admin-down { 3304 type boolean; 3305 default false; 3306 description 3307 "'true' to disable the peer."; 3308 } 3310 uses peer-af-policy-container { 3311 if-feature all-af-policy-config; 3312 } 3313 uses ldp:graceful-restart-attributes-per-peer { 3314 if-feature per-peer-graceful-restart-config; 3315 } 3317 uses ldp:peer-attributes { 3318 if-feature per-peer-session-attributes-config; 3319 } 3320 } // peer-augment 3322 grouping peers-augment { 3323 description "Augmentation to peers container."; 3325 container session-downstream-on-demand { 3326 if-feature session-downstream-on-demand-config; 3327 description 3328 "Session downstream-on-demand attributes."; 3329 leaf enable { 3330 type boolean; 3331 description 3332 "'true' if session downstream-on-demand is enabled."; 3333 } 3334 leaf peer-list { 3335 type peer-list-ref; 3336 description 3337 "The name of a peer ACL."; 3338 } 3339 } 3340 } // peers-augment 3342 /* 3343 * Configuration and state data nodes 3344 */ 3345 // Forwarding nexthop augmentation to the global tree 3346 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3347 + "ldp:global" { 3348 description "Graceful forwarding nexthop augmentation."; 3349 uses global-forwarding-nexthop-augment; 3350 } 3352 // global/address-families/ipv6 3353 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3354 + "ldp:global/ldp:address-families" { 3355 description "Global IPv6 augmentation."; 3357 container ipv6 { 3358 presence 3359 "Present if IPv6 is enabled, unless the 'enable' 3360 leaf is set to 'false'"; 3362 description 3363 "IPv6 address family."; 3364 container config { 3365 description 3366 "Configuration data."; 3367 leaf enable { 3368 type boolean; 3369 default true; 3370 description 3371 "'true' to enable the address family."; 3372 } 3373 uses ldp:policy-container; 3374 } 3375 container state { 3376 config false; 3377 description 3378 "Operational state data."; 3379 leaf enable { 3380 type boolean; 3381 description 3382 "'true' to enable the address family."; 3383 } 3384 leaf label-distribution-controlmode { 3385 type enumeration { 3386 enum independent { 3387 description 3388 "Independent label distribution control."; 3389 } 3390 enum Ordered { 3391 description 3392 "Ordered Label Distribution Control."; 3393 } 3394 } 3395 description 3396 "Label distribution control mode."; 3397 reference 3398 "RFC5036: LDP Specification. Sec 2.6."; 3399 } 3401 uses ldp:policy-container; 3403 // ipv6 bindings 3404 container bindings { 3405 description 3406 "LDP address and label binding information."; 3407 list address { 3408 key "address"; 3409 description 3410 "List of address bindings."; 3411 leaf address { 3412 type inet:ipv6-address; 3413 description 3414 "Binding address."; 3415 } 3416 uses ldp:binding-address-state-attributes; 3417 } // binding-address 3419 list fec-label { 3420 key "fec"; 3421 description 3422 "List of label bindings."; 3423 leaf fec { 3424 type inet:ipv6-prefix; 3425 description 3426 "Prefix FEC."; 3427 } 3428 uses ldp:binding-label-state-attributes; 3429 } // fec-label 3430 } // bindings 3431 } // state 3432 } // ipv6 3433 } 3435 // discovery/interfaces/interface/address-families/ipv6 3436 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3437 + "ldp:global/ldp:discovery/ldp:interfaces/ldp:interface/" 3438 + "ldp:address-families" { 3439 description "Interface IPv6 augmentation."; 3441 container ipv6 { 3442 presence 3443 "Present if IPv6 is enabled, unless the 'enable' 3444 leaf is set to 'false'"; 3445 description 3446 "IPv6 address family."; 3447 container config { 3448 description 3449 "Configuration data."; 3450 leaf enable { 3451 type boolean; 3452 default true; 3453 description 3454 "Enable the address family on the interface."; 3455 } 3456 } 3457 container state { 3458 config false; 3459 description 3460 "Operational state data."; 3461 leaf enable { 3462 type boolean; 3463 description 3464 "Enable the address family on the interface."; 3465 } 3467 // ipv6 3468 list hello-adjacencies { 3469 key "adjacent-address"; 3470 description "List of hello adjacencies."; 3472 leaf adjacent-address { 3473 type inet:ipv6-address; 3474 description 3475 "Neighbor address of the hello adjacency."; 3476 } 3478 uses ldp:adjacency-state-attributes; 3480 leaf peer { 3481 type leafref { 3482 path "../../../../../../../../../ldp:peers/ldp:peer/" 3483 + "ldp:lsr-id"; 3484 } 3485 description 3486 "LDP peer from this adjacency."; 3487 } 3488 } // hello-adjacencies 3489 } // state 3490 } // ipv6 3491 } 3493 // discovery/targeted/address-families/ipv6 3494 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3495 + "ldp:global/ldp:discovery/ldp:targeted/" 3496 + "ldp:address-families" { 3497 description "Targeted discovery IPv6 augmentation."; 3499 container ipv6 { 3500 presence 3501 "Present if IPv6 is enabled."; 3502 description 3503 "IPv6 address family."; 3504 container state { 3505 config false; 3506 description 3507 "Operational state data."; 3509 list hello-adjacencies { 3510 key "local-address adjacent-address"; 3511 description "List of hello adjacencies."; 3513 leaf local-address { 3514 type inet:ipv6-address; 3515 description 3516 "Local address of the hello adjacency."; 3517 } 3518 leaf adjacent-address { 3519 type inet:ipv6-address; 3520 description 3521 "Neighbor address of the hello adjacency."; 3522 } 3524 uses ldp:adjacency-state-attributes; 3526 leaf peer { 3527 type leafref { 3528 path "../../../../../../../../ldp:peers/ldp:peer/" 3529 + "ldp:lsr-id"; 3530 } 3531 description 3532 "LDP peer from this adjacency."; 3533 } 3534 } // hello-adjacencies 3535 } // state 3537 list target { 3538 key "adjacent-address"; 3539 description 3540 "Targeted discovery params."; 3542 leaf adjacent-address { 3543 type inet:ipv6-address; 3544 description 3545 "Configures a remote LDP neighbor and enables 3546 extended LDP discovery of the specified 3547 neighbor."; 3548 } 3549 container config { 3550 description 3551 "Configuration data."; 3552 leaf enable { 3553 type boolean; 3554 description 3555 "Enable the target."; 3556 } 3557 leaf local-address { 3558 type inet:ipv6-address; 3559 description 3560 "The local address."; 3561 } 3562 } 3563 container state { 3564 config false; 3565 description 3566 "Operational state data."; 3567 leaf enable { 3568 type boolean; 3569 description 3570 "Enable the target."; 3571 } 3572 leaf local-address { 3573 type inet:ipv6-address; 3574 description 3575 "The local address."; 3576 } 3577 } // state 3578 } // target 3579 } // ipv6 3580 } 3582 // /peers/peer/state/address-families/ipv6 3583 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3584 + "ldp:peers/ldp:peer/ldp:state/ldp:address-families" { 3585 description "Peer state IPv6 augmentation."; 3587 container ipv6 { 3588 presence 3589 "Present if IPv6 is enabled."; 3590 description 3591 "IPv6 address family."; 3593 list hello-adjacencies { 3594 key "local-address adjacent-address"; 3595 description "List of hello adjacencies."; 3597 leaf local-address { 3598 type inet:ipv6-address; 3599 description 3600 "Local address of the hello adjacency."; 3602 } 3603 leaf adjacent-address { 3604 type inet:ipv6-address; 3605 description 3606 "Neighbor address of the hello adjacency."; 3607 } 3609 uses ldp:adjacency-state-attributes; 3611 leaf interface { 3612 type ldp:mpls-interface-ref; 3613 description "Interface for this adjacency."; 3614 } 3615 } // hello-adjacencies 3616 } // ipv6 3617 } 3619 /* 3620 * Configuration data nodes 3621 */ 3622 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3623 + "ldp:global/ldp:config" { 3624 description "Graceful restart augmentation."; 3625 uses global-augment; 3626 } 3628 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3629 + "ldp:global/ldp:config/ldp:capability" { 3630 description "Capability augmentation."; 3631 uses capability-augment; 3632 } 3634 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3635 + "ldp:global/ldp:config/ldp:graceful-restart" { 3636 description "Graceful restart augmentation."; 3637 uses graceful-restart-augment; 3638 } 3640 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3641 + "ldp:global/ldp:address-families/ldp:ipv4/ldp:config/" 3642 + "ldp:label-policy" { 3643 description "Label policy augmentation."; 3644 uses label-policy-augment; 3645 } 3647 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3648 + "ldp:global/ldp:address-families/ldp-ext:ipv6/ldp-ext:config/" 3649 + "ldp-ext:label-policy" { 3650 description "Label policy augmentation."; 3651 uses label-policy-augment; 3652 } 3654 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3655 + "ldp:global/ldp:address-families/ldp:ipv4/ldp:config/" 3656 + "ldp:label-policy/ldp:advertise" { 3657 description "Label policy advertise augmentation."; 3658 uses label-policy-advertise-augment; 3659 } 3661 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3662 + "ldp:global/ldp:address-families/ldp-ext:ipv6/ldp-ext:config/" 3663 + "ldp-ext:label-policy/ldp-ext:advertise" { 3664 description "Label policy advertise augmentation."; 3665 uses label-policy-advertise-augment; 3666 } 3668 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3669 + "ldp:global/ldp:address-families/ldp:ipv4/ldp:config" { 3670 description "Address family IPv4 augmentation."; 3671 uses address-family-ipv4-augment; 3672 } 3674 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3675 + "ldp:global/ldp:address-families/ldp-ext:ipv6/ldp-ext:config" { 3676 description "Address family IPv4 augmentation."; 3677 uses address-family-ipv6-augment; 3678 } 3680 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3681 + "ldp:global/ldp:discovery/ldp:interfaces/ldp:interface" { 3682 description "Interface augmentation."; 3683 container config { 3684 description 3685 "Configuration data."; 3686 uses interface-augment; 3687 } 3688 } 3690 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3691 + "ldp:global/ldp:discovery/ldp:interfaces/ldp:interface/" 3692 + "ldp:address-families/ldp:ipv4/ldp:config" { 3693 description "Interface address family IPv4 augmentation."; 3694 uses interface-address-family-ipv4-augment; 3695 } 3697 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3698 + "ldp:global/ldp:discovery/ldp:interfaces/ldp:interface/" 3699 + "ldp:address-families/ldp-ext:ipv6/ldp-ext:config" { 3700 description "Interface address family IPv6 augmentation."; 3701 uses interface-address-family-ipv6-augment; 3702 } 3704 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3705 + "ldp:global/ldp:discovery/ldp:targeted/ldp:config/" 3706 + "ldp:hello-accept" { 3707 description "Targeted discovery augmentation."; 3708 leaf neighbor-list { 3709 if-feature policy-targeted-discovery-config; 3710 type neighbor-list-ref; 3711 description 3712 "The name of a peer ACL."; 3713 } 3714 } 3716 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3717 + "ldp:peers/ldp:config" { 3718 description "Peers augmentation."; 3719 uses peers-augment; 3720 } 3722 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3723 + "ldp:peers/ldp:config/ldp:authentication/" 3724 + "ldp:auth-type-selection" { 3725 description "Peers authentication augmentation."; 3726 case auth-key-chain { 3727 uses authentication-keychain-augment; 3728 } 3729 } 3731 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3732 + "ldp:peers/ldp:peer/ldp:config" { 3733 description "Peer list entry augmentation."; 3734 uses peer-augment; 3735 } 3737 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3738 + "ldp:peers/ldp:peer/ldp:config/ldp:authentication/" 3739 + "ldp:auth-type-selection" { 3740 description "Peer list entry authentication augmentation."; 3741 case auth-key-chain { 3742 uses authentication-keychain-augment; 3743 } 3744 } 3745 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3746 + "ldp:peers/ldp:peer/ldp:config" { 3747 description 3748 "Peer list entry augmentation to add address family."; 3749 container address-families { 3750 description 3751 "Per-vrf per-af params."; 3752 container ipv4 { 3753 description 3754 "IPv4 address family."; 3755 uses peer-af-policy-container; 3756 } 3757 container ipv6 { 3758 description 3759 "IPv6 address family."; 3760 uses peer-af-policy-container; 3761 } // ipv6 3762 } // address-family 3763 } 3765 /* 3766 * Operational data nodes 3767 */ 3768 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3769 + "ldp:global/ldp:state" { 3770 description "Graceful restart augmentation."; 3771 uses global-augment; 3772 } 3774 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3775 + "ldp:global/ldp:state/ldp:capability" { 3776 description "Capability augmentation."; 3777 uses capability-augment; 3778 } 3780 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3781 + "ldp:global/ldp:state/ldp:graceful-restart" { 3782 description "Graceful restart augmentation."; 3783 uses graceful-restart-augment; 3784 } 3786 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3787 + "ldp:global/ldp:address-families/ldp:ipv4/ldp:state/" 3788 + "ldp:label-policy" { 3789 description "Label policy augmentation."; 3790 uses label-policy-augment; 3791 } 3792 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3793 + "ldp:global/ldp:address-families/ldp-ext:ipv6/ldp-ext:state/" 3794 + "ldp-ext:label-policy" { 3795 description "Label policy augmentation."; 3796 uses label-policy-augment; 3797 } 3799 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3800 + "ldp:global/ldp:address-families/ldp:ipv4/ldp:state/" 3801 + "ldp:label-policy/ldp:advertise" { 3802 description "Label policy advertise augmentation."; 3803 uses label-policy-advertise-augment; 3804 } 3806 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3807 + "ldp:global/ldp:address-families/ldp-ext:ipv6/ldp-ext:state/" 3808 + "ldp-ext:label-policy/ldp-ext:advertise" { 3809 description "Label policy advertise augmentation."; 3810 uses label-policy-advertise-augment; 3811 } 3813 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3814 + "ldp:global/ldp:address-families/ldp:ipv4/ldp:state" { 3815 description "Address family IPv4 augmentation."; 3816 uses address-family-ipv4-augment; 3817 } 3819 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3820 + "ldp:global/ldp:address-families/ldp-ext:ipv6/ldp-ext:state" { 3821 description "Address family IPv6 augmentation."; 3822 uses address-family-ipv6-augment; 3823 } 3825 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3826 + "ldp:global/ldp:discovery/ldp:interfaces/ldp:interface/" 3827 + "ldp:state" { 3828 description "Interface augmentation."; 3829 uses interface-augment; 3830 } 3832 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3833 + "ldp:global/ldp:discovery/ldp:interfaces/ldp:interface/" 3834 + "ldp:address-families/ldp:ipv4/ldp:state" { 3835 description "Interface address family IPv4 augmentation."; 3836 uses interface-address-family-ipv4-augment; 3837 } 3839 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3840 + "ldp:global/ldp:discovery/ldp:interfaces/ldp:interface/" 3841 + "ldp:address-families/ldp-ext:ipv6/ldp-ext:state" { 3842 description "Interface address family IPv6 augmentation."; 3843 uses interface-address-family-ipv6-augment; 3844 } 3846 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3847 + "ldp:global/ldp:discovery/ldp:targeted/ldp:state/" 3848 + "ldp:hello-accept" { 3849 description "Targeted discovery augmentation."; 3850 leaf neighbor-list { 3851 if-feature policy-targeted-discovery-config; 3852 type neighbor-list-ref; 3853 description 3854 "The name of a peer ACL."; 3855 } 3856 } 3858 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3859 + "ldp:peers/ldp:state" { 3860 description "Peers augmentation."; 3861 uses peers-augment; 3862 } 3864 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3865 + "ldp:peers/ldp:state/ldp:authentication/" 3866 + "ldp:auth-type-selection" { 3867 description "Peers authentication augmentation."; 3868 case auth-key-chain { 3869 uses authentication-keychain-augment; 3870 } 3871 } 3873 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3874 + "ldp:peers/ldp:peer/ldp:state" { 3875 description "Peer list entry augmentation."; 3876 uses peer-augment; 3877 } 3879 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3880 + "ldp:peers/ldp:peer/ldp:state/ldp:authentication/" 3881 + "ldp:auth-type-selection" { 3882 description "Peer list entry authentication augmentation."; 3883 case auth-key-chain { 3884 uses authentication-keychain-augment; 3885 } 3886 } 3887 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3888 + "ldp:peers/ldp:peer/ldp:state/ldp:address-families/ldp:ipv4" { 3889 description 3890 "Peer list entry IPv4 augmentation."; 3891 uses peer-af-policy-container; 3892 } 3894 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3895 + "ldp:peers/ldp:peer/ldp:state/ldp:address-families/" 3896 + "ldp-ext:ipv6" { 3897 description 3898 "Peer list entry IPv6 augmentation."; 3899 uses peer-af-policy-container; 3900 } 3902 /* 3903 * RPCs 3904 */ 3906 /* 3907 * Notifications 3908 */ 3909 } 3911 3913 Figure 17 3915 10. Security Considerations 3917 The configuration, state, action and notification data defined using 3918 YANG data models in this document are likely to be accessed via the 3919 protocols such as NETCONF [RFC6241] etc. 3921 Hence, YANG implementations MUST comply with the security 3922 requirements specified in section 15 of [RFC6020]. Additionally, 3923 NETCONF implementations MUST comply with the security requirements 3924 specified in sections 2.2, 2.3 and 9 of [RFC6241] as well as section 3925 3.7 of [RFC6536]. 3927 11. IANA Considerations 3929 This document does not extend LDP base protocol specifiction and 3930 hence there are no IANA considerations. 3932 Note to the RFC Editor: Please remove IANA section before the 3933 publication. 3935 12. Acknowledgments 3937 The authors would like to acknowledge Eddie Chami, Nagendra Kumar, 3938 Mannan Venkatesan, Pavan Beeram for their contribution to this 3939 document. We also acknowledge Ladislav Lhotka for his useful 3940 comments as the YANG Doctor. 3942 13. References 3944 13.1. Normative References 3946 [I-D.ietf-mpls-base-yang] 3947 Raza, K., Gandhi, R., Liu, X., Beeram, V., Saad, T., 3948 Bryskin, I., Chen, X., Jones, R., and B. Wen, "A YANG Data 3949 Model for MPLS Base", draft-ietf-mpls-base-yang-05 (work 3950 in progress), July 2017. 3952 [I-D.ietf-mpls-mldp-yang] 3953 Raza, K., Krishnaswamy, S., Liu, X., Esale, S., Chen, X., 3954 and j. jefftant@gmail.com, "YANG Data Model for MPLS 3955 mLDP", draft-ietf-mpls-mldp-yang-01 (work in progress), 3956 March 2017. 3958 [I-D.rtgyangdt-rtgwg-ni-model] 3959 Berger, L., Hopps, C., Lindem, A., and D. Bogdanovic, 3960 "Network Instance Model", draft-rtgyangdt-rtgwg-ni- 3961 model-00 (work in progress), May 2016. 3963 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3964 Requirement Levels", BCP 14, RFC 2119, 3965 DOI 10.17487/RFC2119, March 1997, 3966 . 3968 [RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful 3969 Restart Mechanism for Label Distribution Protocol", 3970 RFC 3478, DOI 10.17487/RFC3478, February 2003, 3971 . 3973 [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., 3974 "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, 3975 October 2007, . 3977 [RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream 3978 Label Assignment and Context-Specific Label Space", 3979 RFC 5331, DOI 10.17487/RFC5331, August 2008, 3980 . 3982 [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. 3983 Le Roux, "LDP Capabilities", RFC 5561, 3984 DOI 10.17487/RFC5561, July 2009, 3985 . 3987 [RFC5918] Asati, R., Minei, I., and B. Thomas, "Label Distribution 3988 Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class 3989 (FEC)", RFC 5918, DOI 10.17487/RFC5918, August 2010, 3990 . 3992 [RFC5919] Asati, R., Mohapatra, P., Chen, E., and B. Thomas, 3993 "Signaling LDP Label Advertisement Completion", RFC 5919, 3994 DOI 10.17487/RFC5919, August 2010, 3995 . 3997 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 3998 the Network Configuration Protocol (NETCONF)", RFC 6020, 3999 DOI 10.17487/RFC6020, October 2010, 4000 . 4002 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 4003 and A. Bierman, Ed., "Network Configuration Protocol 4004 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 4005 . 4007 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 4008 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 4009 November 2011, . 4011 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 4012 Protocol (NETCONF) Access Control Model", RFC 6536, 4013 DOI 10.17487/RFC6536, March 2012, 4014 . 4016 [RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. 4017 Papneja, "Updates to LDP for IPv6", RFC 7552, 4018 DOI 10.17487/RFC7552, June 2015, 4019 . 4021 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 4022 Management", RFC 8022, DOI 10.17487/RFC8022, November 4023 2016, . 4025 13.2. Informative References 4027 [I-D.ietf-rtgwg-policy-model] 4028 Shaikh, A., Shakir, R., D'Souza, K., and C. Chase, 4029 "Routing Policy Configuration Model for Service Provider 4030 Networks", draft-ietf-rtgwg-policy-model-01 (work in 4031 progress), April 2016. 4033 [I-D.openconfig-netmod-opstate] 4034 Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling 4035 of Operational State Data in YANG", draft-openconfig- 4036 netmod-opstate-01 (work in progress), July 2015. 4038 [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private 4039 Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February 4040 2006, . 4042 [RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. 4043 King, "LDP Extensions for Multi-Topology", RFC 7307, 4044 DOI 10.17487/RFC7307, July 2014, 4045 . 4047 Appendix A. Additional Contributors 4049 Reshad Rahman 4050 Cisco Systems Inc. 4051 Email: rrahman@cisco.com 4053 Stephane Litkowski 4054 Orange. 4055 Email: stephane.litkowski@orange.com 4057 Danial Johari 4058 Cisco Systems Inc. 4059 Email: dajohari@cisco.com 4061 Authors' Addresses 4063 Kamran Raza 4064 Cisco Systems, Inc. 4065 Email: skraza@cisco.com 4067 Rajiv Asati 4068 Cisco Systems, Inc. 4069 Email: rajiva@cisco.com 4071 Xufeng Liu 4072 Jabil 4073 Email: xufeng_liu@jabil.com 4074 Jeff Tantsura 4075 Email: jefftant.ietf@gmail.com 4077 Santosh Esale 4078 Juniper Networks 4079 Email: sesale@juniper.net 4081 Xia Chen 4082 Huawei Technologies 4083 Email: jescia.chenxia@huawei.com 4085 Loa Andersson 4086 Huawei Technologies 4087 Email: loa@pi.nu 4089 Himanshu Shah 4090 Ciena Corporation 4091 Email: hshah@ciena.com 4093 Matthew Bocci 4094 Nokia 4095 Email: matthew.bocci@nokia.com