idnits 2.17.1 draft-ietf-mpls-ldp-yang-03.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == The page length should not exceed 58 lines per page, but there was 1 longer page, the longest (page 75) being 61 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 65 instances of too long lines in the document, the longest one being 61 characters in excess of 72. -- The document has examples using IPv4 documentation addresses according to RFC6890, but does not use any IPv6 documentation addresses. Maybe there should be IPv6 examples, too? Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 467 has weird spacing: '...address ine...' == Line 560 has weird spacing: '...address ine...' == Line 733 has weird spacing: '...nt-type adv...' == Line 745 has weird spacing: '...address ine...' == Line 753 has weird spacing: '...ty-time yan...' == (12 more instances...) -- The document date (November 11, 2017) is 2357 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 (-10) exists of draft-ietf-netmod-revised-datastores-06 == Outdated reference: A later version (-20) exists of draft-ietf-netmod-rfc6087bis-14 == Outdated reference: A later version (-12) exists of draft-ietf-rtgwg-ni-model-04 ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) == Outdated reference: A later version (-11) exists of draft-ietf-mpls-mldp-yang-02 == 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: May 15, 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 November 11, 2017 19 YANG Data Model for MPLS LDP 20 draft-ietf-mpls-ldp-yang-03 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 https://datatracker.ietf.org/drafts/current/. 39 Internet-Drafts are draft documents valid for a maximum of six months 40 and may be updated, replaced, or obsoleted by other documents at any 41 time. It is inappropriate to use Internet-Drafts as reference 42 material or to cite them other than as "work in progress." 44 This Internet-Draft will expire on May 15, 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 (https://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 . . . . . . . . . . . . . . . . . . . . . . . . 7 68 4.1. Configuration Tree . . . . . . . . . . . . . . . . . . . 10 69 4.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 10 70 4.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 11 71 4.2. Configuration Hierarchy . . . . . . . . . . . . . . . . . 14 72 4.2.1. Per-VRF parameters . . . . . . . . . . . . . . . . . 14 73 5. Operational State . . . . . . . . . . . . . . . . . . . . . . 16 74 5.1. Operational Tree . . . . . . . . . . . . . . . . . . . . 16 75 5.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 16 76 5.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 19 77 5.2. States . . . . . . . . . . . . . . . . . . . . . . . . . 21 78 5.2.1. Adjacency state . . . . . . . . . . . . . . . . . . . 21 79 5.2.2. Peer state . . . . . . . . . . . . . . . . . . . . . 22 80 5.2.3. Bindings state . . . . . . . . . . . . . . . . . . . 23 81 5.2.4. Capabilities state . . . . . . . . . . . . . . . . . 25 82 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 26 83 7. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 84 8. Open Items . . . . . . . . . . . . . . . . . . . . . . . . . 27 85 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 27 86 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 27 87 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 55 88 10. Security Considerations . . . . . . . . . . . . . . . . . . . 73 89 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 73 90 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 73 91 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 73 92 13.1. Normative References . . . . . . . . . . . . . . . . . . 73 93 13.2. Informative References . . . . . . . . . . . . . . . . . 75 95 Appendix A. Additional Contributors . . . . . . . . . . . . . . 75 96 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 75 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 extended "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 The modeling in this document complies with the Network Management 191 Datastore Architecture (NMDA) [I-D.ietf-netmod-revised-datastores]. 192 The operational state data is combined with the associated 193 configuration data in the same hierarchy 194 [I-D.ietf-netmod-rfc6087bis]. When protocol states are retrieved 195 from the NMDA operational state datastore, the returned states cover 196 all "config true" (rw) and "config false" (ro) nodes defined in the 197 schema. 199 Following diagram depicts high level LDP yang tree organization and 200 hierarchy: 202 +-- rw routing 203 +-- rw control-plane-protocols 204 +-- rw mpls-ldp 205 +-- rw ... 206 +-- rw ... // base 207 | +-- rw ... 208 | +-- ro ... 209 | +-- 210 +-- ro ... 211 | +-- ro ... 212 | +-- ro ... 213 | +-- 214 +-- rw ldp-ext: .... // extended 215 | +-- rw ... 216 | +-- ro ... 217 | +-- 218 +-- ro ... 219 +-- ro ... 220 +-- ro ... 222 rpcs: 223 +-- x mpls-ldp-some_action 224 +-- x . . . . . 226 notifications: 227 +--- n mpls-ldp-some_event 228 +--- n ... 230 Figure 1 232 Before going into data model details, it is important to take note of 233 the following points: 235 o This module aims to address only the core LDP parameters as per 236 RFC specification, as well as some widely deployed non-RFC 237 features (such as label policies, session authentication etc). 238 Any vendor specific feature should be defined in a vendor-specific 239 augmentation of this model. 241 o Multi-topology LDP [RFC7307] is beyond the scope of this document. 243 o This module does not cover any applications running on top of LDP, 244 nor does it cover any OAM procedures for LDP. 246 o This model is a VPN Forwarding and Routing (VRF)-centric model. 247 It is important to note that [RFC4364] defines VRF tables and 248 default forwarding tables as different, however from a yang 249 modelling perspective this introduces unnecessary complications, 250 hence we are treating the default forwarding table as just another 251 VRF. 253 o A "network-instance", as defined in [I-D.ietf-rtgwg-ni-model], 254 refers to a VRF instance (both default and non-default) within the 255 scope of this model. 257 o This model supports two address-families, namely "ipv4" and 258 "ipv6". 260 o This model assumes platform-wide label space (i.e. label space Id 261 of zero). However, when Upstream Label assignment [RFC6389] is in 262 use, an upstream assigned label is looked up in a Context-Specific 263 label space as defined in [RFC5331]. 265 o The label and peer policies (including filters) are defined using 266 a prefix-list. When used for a peer policy, the prefix refers to 267 the LSR Id of the peer. The prefix-list is referenced from 268 routing-policy model as defined in [I-D.ietf-rtgwg-policy-model]. 270 o This model uses the terms LDP "neighbor"/"adjacency", "session", 271 and "peer" with the following semantics: 273 * Neighbor/Adjacency: An LDP enabled LSR that is discovered 274 through LDP discovery mechanisms. 276 * Session: An LDP neighbor with whom a TCP connection has been 277 established. 279 * Peer: An LDP session which has successfully progressed beyond 280 its initialization phase and is either already exchanging the 281 bindings or is ready to do so. 283 It is to be noted that LDP Graceful Restart mechanisms defined in 284 [RFC3478] allow keeping the exchanged bindings for some time after 285 a session goes down with a peer. We call such a state belonging 286 to a "stale" peer -- i.e. keeping peer bindings from a peer with 287 whom currently there is either no connection established or 288 connection is established but GR session is in recovery state. 289 When used in this document, the above terms will refer strictly to 290 the semantics and definitions defined for them. 292 A graphical representation of LDP YANG data model is presented in 293 Figure 4, Figure 5, Figure 7, Figure 8, Figure 14, and Figure 15. 294 Whereas, the actual model definition in YANG is captured in 295 Section 9. 297 While presenting the YANG tree view and actual .yang specification, 298 this document assumes readers' familiarity with the concepts of YANG 299 modeling, its presentation and its compilation. 301 4. Configuration 303 This specification defines the configuration parameters for base LDP 304 as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it 305 incorporates provisions to enable LDP Capabilities [RFC5561], and 306 defines some of the most significant and commonly used capabilities 307 such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP 308 Upstream Label Assignment [RFC6389]. 310 This model augments /rt:routing/rt:control-plane-protocols that is 311 defined in [RFC8022] and follows NMDA as mentioned earlier. 313 Following is the high-level configuration organization for base LDP: 315 augment /rt:routing/rt:control-plane-protocols: 316 +-- mpls-ldp 317 +-- global 318 | +-- ... 319 | +-- ... 320 | +-- address-families 321 | | +-- ipv4 322 | | +-- . . . 323 | | +-- . . . 324 | +-- capability 325 | +-- ... 326 | +-- ... 327 +-- discovery 328 | +-- interfaces 329 | | +-- ... 330 | | +-- ... 331 | | +-- interface* [interface] 332 | | +-- ... 333 | | +-- address-families 334 | | +-- ipv4 335 | | +-- ... 336 | | +-- ... 337 | +-- targeteted 338 | +-- ... 339 | +-- address-families 340 | +-- ipv4 341 | +- target* [adjacent-address] 342 | +- ... 343 | +- ... 344 +-- peers 345 +-- ... 346 +-- ... 347 +-- peer* [lsr-id] 348 +-- ... 349 +-- ... 351 Figure 2 353 Following is the high-level configuration organization for extended 354 LDP: 356 augment /rt:routing/rt:control-plane-protocols: 357 +-- mpls-ldp 358 +-- global 359 | +-- ... 360 | +-- ... 362 | +-- address-families 363 | | +-- ipv4 364 | | | +-- . . . 365 | | | +-- . . . 366 | | | +-- label-policy 367 | | | +-- ... 368 | | | +-- ... 369 | | +-- ipv6 370 | | +-- . . . 371 | | +-- . . . 372 | | +-- label-policy 373 | | +-- ... 374 | | +-- ... 375 | +-- capability 376 | | +-- ... 377 | | +-- ... 378 | +-- discovery 379 | +-- interfaces 380 | | +-- ... 381 | | +-- ... 382 | | +-- interface* [interface] 383 | | +-- ... 384 | | +-- address-families 385 | | +-- ipv4 386 | | | +-- ... 387 | | | +-- ... 388 | | +-- ipv6 389 | | +-- ... 390 | | +-- ... 391 | +-- targeteted 392 | +-- ... 393 | +-- address-families 394 | +-- ipv4 395 | | +- target* [adjacent-address] 396 | | +- ... 397 | | +- ... 398 | +-- ipv6 399 | +- target* [adjacent-address] 400 | +- ... 401 | +- ... 402 +-- forwarding-nexthop 403 | +-- ... 404 | +-- ... 405 +-- peers 406 +-- ... 407 +-- ... 408 +-- peer* 409 +-- ... 411 +-- ... 412 +-- label-policy 413 | +-- .. 414 +-- address-families 415 +-- ipv4 416 | +-- ... 417 +-- ipv6 418 +-- ... 420 Figure 3 422 Given the configuration hierarchy, the model allows inheritance such 423 that an item in a child tree is able to derive value from a similar 424 or related item in one of the parent. For instance, hello holdtime 425 can be configured per-VRF or per-VRF-interface, thus allowing 426 inheritance as well flexibility to override with a different value at 427 any child level. 429 4.1. Configuration Tree 431 4.1.1. Base 433 Following is a simplified graphical representation of the data model 434 for LDP base configuration 436 module: ietf-mpls-ldp 437 augment /rt:routing/rt:control-plane-protocols: 438 +--rw mpls-ldp! 439 +--rw global 440 | +--rw capability 441 | +--rw graceful-restart 442 | | +--rw enable? boolean 443 | | +--rw reconnect-time? uint16 444 | | +--rw recovery-time? uint16 445 | | +--rw forwarding-holdtime? uint16 446 | +--rw lsr-id? yang:dotted-quad 447 | +--rw address-families 448 | +--rw ipv4! 449 | +--rw enable? boolean 450 +--rw discovery 451 | +--rw interfaces 452 | | +--rw hello-holdtime? uint16 453 | | +--rw hello-interval? uint16 454 | | +--rw interface* [name] 455 | | +--rw name if:interface-ref 456 | | +--rw address-families 457 | | +--rw ipv4! 458 | | +--rw enable? boolean 459 | +--rw targeted 460 | +--rw hello-holdtime? uint16 461 | +--rw hello-interval? uint16 462 | +--rw hello-accept 463 | | +--rw enable? boolean 464 | +--rw address-families 465 | +--rw ipv4! 466 | +--rw target* [adjacent-address] 467 | +--rw adjacent-address inet:ipv4-address 468 | +--rw enable? boolean 469 | +--rw local-address? inet:ipv4-address 470 +--rw peers 471 +--rw authentication 472 | +--rw (auth-type-selection)? 473 | +--:(auth-key) 474 | +--rw md5-key? string 475 +--rw session-ka-holdtime? uint16 476 +--rw session-ka-interval? uint16 477 +--rw peer* [lsr-id] 478 +--rw lsr-id yang:dotted-quad 479 +--rw authentication 480 | +--rw (auth-type-selection)? 481 | +--:(auth-key) 482 | +--rw md5-key? string 483 +--rw capability 485 Figure 4 487 4.1.2. Extended 489 Following is a simplified graphical representation of the data model 490 for LDP extended configuration 492 module: ietf-mpls-ldp 493 augment /rt:routing/rt:control-plane-protocols: 494 +--rw mpls-ldp! 495 +--rw global 496 | +--rw capability 497 | | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? 498 | | | +--rw ldp-ext:enable? boolean 499 | | +--rw ldp-ext:typed-wildcard-fec {capability-typed-wildcard-fec}? 500 | | | +--rw ldp-ext:enable? boolean 501 | | +--rw ldp-ext:upstream-label-assignment {capability-upstream-label-assignment}? 502 | | +--rw ldp-ext:enable? boolean 503 | +--rw address-families 504 | | +--rw ipv4! 505 | | | +--rw ldp-ext:label-policy 506 | | | | +--rw ldp-ext:advertise 507 | | | | | +--rw ldp-ext:egress-explicit-null 508 | | | | | | +--rw ldp-ext:enable? boolean 509 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 510 | | | | +--rw ldp-ext:accept 511 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 512 | | | | +--rw ldp-ext:assign {policy-label-assignment-config}? 513 | | | | +--rw ldp-ext:independent-mode 514 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 515 | | | | +--rw ldp-ext:ordered-mode {policy-ordered-label-config}? 516 | | | | +--rw ldp-ext:egress-prefix-list? prefix-list-ref 517 | | | +--rw ldp-ext:transport-address? inet:ipv4-address 518 | | +--rw ldp-ext:ipv6! 519 | | +--rw ldp-ext:enable? boolean 520 | | +--rw ldp-ext:label-policy 521 | | | +--rw ldp-ext:advertise 522 | | | | +--rw ldp-ext:egress-explicit-null 523 | | | | | +--rw ldp-ext:enable? boolean 524 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 525 | | | +--rw ldp-ext:accept 526 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 527 | | | +--rw ldp-ext:assign {policy-label-assignment-config}? 528 | | | +--rw ldp-ext:independent-mode 529 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 530 | | | +--rw ldp-ext:ordered-mode {policy-ordered-label-config}? 531 | | | +--rw ldp-ext:egress-prefix-list? prefix-list-ref 532 | | +--rw ldp-ext:transport-address inet:ipv6-address 533 | +--rw ldp-ext:forwarding-nexthop {forwarding-nexthop-config}? 534 | | +--rw ldp-ext:interfaces 535 | | +--rw ldp-ext:interface* [name] 536 | | +--rw ldp-ext:name if:interface-ref 537 | | +--rw ldp-ext:address-family* [afi] 538 | | +--rw ldp-ext:afi ldp:ldp-address-family 539 | | +--rw ldp-ext:ldp-disable? boolean 540 | +--rw ldp-ext:igp-synchronization-delay? uint16 541 +--rw discovery 542 | +--rw interfaces 543 | | +--rw interface* [name] 544 | | +--rw name if:interface-ref 545 | | +--rw address-families 546 | | | +--rw ipv4! 547 | | | | +--rw ldp-ext:transport-address? union 548 | | | +--rw ldp-ext:ipv6! 549 | | | +--rw ldp-ext:enable? boolean 550 | | | +--rw ldp-ext:transport-address? union 551 | | +--rw ldp-ext:hello-holdtime? uint16 552 | | +--rw ldp-ext:hello-interval? uint16 553 | | +--rw ldp-ext:igp-synchronization-delay? uint16 {per-interface-timer-config}? 554 | +--rw targeted 555 | +--rw hello-accept 556 | | +--rw ldp-ext:neighbor-list? neighbor-list-ref {policy-targeted-discovery-config}? 557 | +--rw address-families 558 | +--rw ldp-ext:ipv6! 559 | +--rw ldp-ext:target* [adjacent-address] 560 | +--rw ldp-ext:adjacent-address inet:ipv6-address 561 | +--rw ldp-ext:enable? boolean 562 | +--rw ldp-ext:local-address? inet:ipv6-address 563 +--rw peers 564 +--rw authentication 565 | +--rw (auth-type-selection)? 566 | +--:(ldp-ext:auth-key-chain) 567 | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 568 +--rw ldp-ext:session-downstream-on-demand {session-downstream-on-demand-config}? 569 | +--rw ldp-ext:enable? boolean 570 | +--rw ldp-ext:peer-list? peer-list-ref 571 +--rw peer* [lsr-id] 572 +--rw lsr-id yang:dotted-quad 573 +--rw authentication 574 | +--rw (auth-type-selection)? 575 | +--:(ldp-ext:auth-key-chain) 576 | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 577 +--rw address-families 578 +--rw ipv4! 579 | +--rw ldp-ext:label-policy 580 | +--rw ldp-ext:advertise 581 | | +--rw ldp-ext:prefix-list? prefix-list-ref 582 | +--rw ldp-ext:accept 583 | +--rw ldp-ext:prefix-list? prefix-list-ref 584 +--rw ldp-ext:ipv6! 585 +--rw ldp-ext:label-policy 586 +--rw ldp-ext:advertise 587 | +--rw ldp-ext:prefix-list? prefix-list-ref 588 +--rw ldp-ext:accept 589 +--rw ldp-ext:prefix-list? prefix-list-ref 591 Figure 5 593 4.2. Configuration Hierarchy 595 The LDP configuration container is logically divided into following 596 high-level config areas: 598 Per-VRF parameters 599 o Global parameters 600 o Per-address-family parameters 601 o LDP Capabilities parameters 602 o Hello Discovery parameters 603 - interfaces 604 - Per-interface: 605 Global 606 Per-address-family 607 - targeted 608 - Per-target 609 o Peer parameters 610 - Global 611 - Per-peer 612 Per-address-family 613 Capabilities parameters 614 o Forwarding parameters 616 Figure 6 618 Following subsections briefly explain these configuration areas. 620 4.2.1. Per-VRF parameters 622 LDP module resides under an network-instance and the scope of any LDP 623 configuration defined under this tree is per network-instance (per- 624 VRF). This configuration is further divided into sub categories as 625 follows. 627 4.2.1.1. Per-VRF global parameters 629 There are configuration items that are available directly under a VRF 630 instance and do not fall under any other sub tree. Example of such a 631 parameter is LDP LSR id that is typically configured per VRF. To 632 keep legacy LDP features and applications working in an LDP IPv4 633 networks with this model, this document recommends an operator to 634 pick a routable IPv4 unicast address as an LSR Id. 636 4.2.1.2. Per-VRF Capabilities parameters 638 This container falls under global tree and holds the LDP capabilities 639 that are to be enabled for certain features. By default, an LDP 640 capability is disabled unless explicitly enabled. These capabilities 641 are typically used to negotiate with LDP peer(s) the support/non- 642 support related to a feature and its parameters. The scope of a 643 capability enabled under this container applies to all LDP peers in 644 the given VRF instance. There is also a peer level capability 645 container that is provided to override a capability that is enabled/ 646 specified at VRF level. 648 4.2.1.3. Per-VRF Per-Address-Family parameters 650 Any LDP configuration parameter related to IP address family (AF) 651 whose scope is VRF wide is configured under this tree. The examples 652 of per-AF parameters include enabling LDP for an address family, 653 prefix-list based label policies, and LDP transport address. 655 4.2.1.4. Per-VRF Hello Discovery parameters 657 This container is used to hold LDP configuration related to Hello and 658 discovery process for both basic (link) and extended (targeted) 659 discovery. 661 The "interfaces" is a container to configure parameters related to 662 VRF interfaces. There are parameters that apply to all interfaces 663 (such as hello timers), as well as parameters that can be configured 664 per-interface. Hence, an interface list is defined under 665 "interfaces" container. The model defines parameters to configure 666 per-interface non AF related items, as well as per-interface per-AF 667 items. The example of former is interface hello timers, and example 668 of latter is enabling hellos for a given AF under an interface. 670 The "targeted" container under a VRF instance allows to configure LDP 671 targeted discovery related parameters. Within this container, the 672 "target" list provides a mean to configure multiple target addresses 673 to perform extended discovery to a specific destination target, as 674 well as to fine-tune the per-target parameters. 676 4.2.1.5. Per-VRF Peer parameters 678 This container is used to hold LDP configuration related to LDP 679 sessions and peers under a VRF instance. This container allows to 680 configure parameters that either apply on VRF's all peers or a subset 681 (peer-list) of VRF peers. The example of such parameters include 682 authentication password, session KA timers etc. Moreover, the model 683 also allows per-peer parameter tuning by specifying a "peer" list 684 under the "peers" container. A peer is uniquely identified using its 685 LSR Id and hence LSR Id is the key for peer list 687 Like per-interface parameters, some per-peer parameters are AF- 688 agnostic (i.e. either non AF related or apply to both IP address 689 families), and some that belong to an AF. The example of former is 690 per-peer session password configuration, whereas the example of 691 latter is prefix-list based label policies (inbound and outbound) 692 that apply to a given peer. 694 4.2.1.6. Per-VRF Forwarding parameters 696 This container is used to hold configuration used to control LDP 697 forwarding behavior under a VRF instance. One example of a 698 configuration under this container is when a user wishes to enable 699 neighbor discovery on an interface but wishes to disable use of the 700 same interface as forwarding nexthop. This example configuration 701 makes sense only when there are more than one LDP enabled interfaces 702 towards the neighbor. 704 5. Operational State 706 Operational state of LDP can be queried and obtained from read-only 707 state containers that fall under the same tree (/rt:routing/ 708 rt:control-plane-protocols/) as the configuration. 710 5.1. Operational Tree 712 5.1.1. Base 714 Following is a simplified graphical representation of the base data 715 model for LDP operational state. 717 module: ietf-mpls-ldp 718 augment /rt:routing/rt:control-plane-protocols: 719 +--rw mpls-ldp! 720 +--rw global 721 | +--rw address-families 722 | +--rw ipv4! 723 | +--ro label-distribution-controlmode? enumeration 724 | +--ro bindings 725 | +--ro address* [address] 726 | | +--ro address inet:ipv4-address 727 | | +--ro advertisement-type? advertised-received 728 | | +--ro peer? -> ../../../../../../peers/peer/lsr-id 729 | +--ro fec-label* [fec] 730 | +--ro fec inet:ipv4-prefix 731 | +--ro peer* [lsr-id advertisement-type] 732 | +--ro lsr-id -> ../../../../../../../peers/peer/lsr-id 733 | +--ro advertisement-type advertised-received 734 | +--ro label? rt-types:mpls-label 735 | +--ro used-in-forwarding? boolean 736 +--rw discovery 737 | +--rw interfaces 738 | +--rw interface* [name] 739 | +--rw name if:interface-ref 740 | +--ro next-hello? uint16 741 | +--rw address-families 742 | +--rw ipv4! 743 | +--ro hello-adjacencies 744 | +--ro hello-adjacency* [adjacent-address] 745 | +--ro adjacent-address inet:ipv4-address 746 | +--ro flag* identityref 747 | +--ro hello-holdtime 748 | | +--ro adjacent? uint16 749 | | +--ro negotiated? uint16 750 | | +--ro remaining? uint16 751 | +--ro next-hello? uint16 752 | +--ro statistics 753 | | +--ro discontinuity-time yang:date-and-time 754 | | +--ro hello-received? yang:counter64 755 | | +--ro hello-dropped? yang:counter64 756 | +--ro peer? -> ../../../../../../../../peers/peer/lsr-id 757 | +--rw targeted 758 | +--rw address-families 759 | +--rw ipv4! 760 | +--ro hello-adjacencies 761 | +--ro hello-adjacency* [local-address adjacent-address] 762 | +--ro local-address inet:ipv4-address 763 | +--ro adjacent-address inet:ipv4-address 764 | +--ro flag* identityref 765 | +--ro hello-holdtime 766 | | +--ro adjacent? uint16 767 | | +--ro negotiated? uint16 768 | | +--ro remaining? uint16 769 | +--ro next-hello? uint16 770 | +--ro statistics 771 | | +--ro discontinuity-time yang:date-and-time 772 | | +--ro hello-received? yang:counter64 773 | | +--ro hello-dropped? yang:counter64 774 | +--ro peer? -> ../../../../../../../peers/peer/lsr-id 775 +--rw peers 776 +--rw peer* [lsr-id] 777 +--rw address-families 778 | +--rw ipv4! 779 | +--ro hello-adjacencies 780 | +--ro hello-adjacency* [local-address adjacent-address] 781 | +--ro local-address inet:ipv4-address 782 | +--ro adjacent-address inet:ipv4-address 783 | +--ro flag* identityref 784 | +--ro hello-holdtime 785 | | +--ro adjacent? uint16 786 | | +--ro negotiated? uint16 787 | | +--ro remaining? uint16 788 | +--ro next-hello? uint16 789 | +--ro statistics 790 | | +--ro discontinuity-time yang:date-and-time 791 | | +--ro hello-received? yang:counter64 792 | | +--ro hello-dropped? yang:counter64 793 | +--ro interface? if:interface-ref 794 +--ro label-advertisement-mode 795 | +--ro local? label-adv-mode 796 | +--ro peer? label-adv-mode 797 | +--ro negotiated? label-adv-mode 798 +--ro next-keep-alive? uint16 799 +--ro peer-ldp-id? yang:dotted-quad 800 +--ro received-peer-state 801 | +--ro graceful-restart 802 | | +--ro enable? boolean 803 | | +--ro reconnect-time? uint16 804 | | +--ro recovery-time? uint16 805 | +--ro capability 806 | +--ro end-of-lib 807 | | +--ro enable? boolean 808 | +--ro typed-wildcard-fec 809 | | +--ro enable? boolean 810 | +--ro upstream-label-assignment 811 | +--ro enable? boolean 812 +--ro session-holdtime 813 | +--ro peer? uint16 814 | +--ro negotiated? uint16 815 | +--ro remaining? uint16 816 +--ro session-state? enumeration 817 +--ro tcp-connection 818 | +--ro local-address? inet:ip-address 819 | +--ro local-port? inet:port-number 820 | +--ro remote-address? inet:ip-address 821 | +--ro remote-port? inet:port-number 822 +--ro up-time? string 823 +--ro statistics 824 +--ro discontinuity-time yang:date-and-time 825 +--ro received 826 | +--ro total-octets? yang:counter64 827 | +--ro total-messages? yang:counter64 828 | +--ro address? yang:counter64 829 | +--ro address-withdraw? yang:counter64 830 | +--ro initialization? yang:counter64 831 | +--ro keepalive? yang:counter64 832 | +--ro label-abort-request? yang:counter64 833 | +--ro label-mapping? yang:counter64 834 | +--ro label-release? yang:counter64 835 | +--ro label-request? yang:counter64 836 | +--ro label-withdraw? yang:counter64 837 | +--ro notification? yang:counter64 838 +--ro sent 839 | +--ro total-octets? yang:counter64 840 | +--ro total-messages? yang:counter64 841 | +--ro address? yang:counter64 842 | +--ro address-withdraw? yang:counter64 843 | +--ro initialization? yang:counter64 844 | +--ro keepalive? yang:counter64 845 | +--ro label-abort-request? yang:counter64 846 | +--ro label-mapping? yang:counter64 847 | +--ro label-release? yang:counter64 848 | +--ro label-request? yang:counter64 849 | +--ro label-withdraw? yang:counter64 850 | +--ro notification? yang:counter64 851 +--ro total-addresses? uint32 852 +--ro total-labels? uint32 853 +--ro total-fec-label-bindings? uint32 855 Figure 7 857 5.1.2. Extended 859 Following is a simplified graphical representation of the extended 860 data model for LDP operational state. 862 module: ietf-mpls-ldp 863 augment /rt:routing/rt:control-plane-protocols: 864 +--rw mpls-ldp! 865 +--rw global 866 | +--rw address-families 867 | +--rw ldp-ext:ipv6! 868 | +--ro ldp-ext:label-distribution-controlmode? enumeration 869 | +--ro ldp-ext:bindings 870 | +--ro ldp-ext:address* [address] 871 | | +--ro ldp-ext:address inet:ipv6-address 872 | | +--ro ldp-ext:advertisement-type? advertised-received 873 | | +--ro ldp-ext:peer? -> ../../../../../../ldp:peers/peer/lsr-id 874 | +--ro ldp-ext:fec-label* [fec] 875 | +--ro ldp-ext:fec inet:ipv6-prefix 876 | +--ro ldp-ext:peer* [lsr-id advertisement-type] 877 | +--ro ldp-ext:lsr-id -> ../../../../../../../ldp:peers/peer/lsr-id 878 | +--ro ldp-ext:advertisement-type advertised-received 879 | +--ro ldp-ext:label? rt-types:mpls-label 880 | +--ro ldp-ext:used-in-forwarding? boolean 881 +--rw discovery 882 | +--rw interfaces 883 | | +--rw interface* [name] 884 | | +--rw name if:interface-ref 885 | | +--rw address-families 886 | | +--rw ldp-ext:ipv6! 887 | | +--ro ldp-ext:hello-adjacencies 888 | | +--ro ldp-ext:hello-adjacency* [adjacent-address] 889 | | +--ro ldp-ext:adjacent-address inet:ipv6-address 890 | | +--ro ldp-ext:flag* identityref 891 | | +--ro ldp-ext:hello-holdtime 892 | | | +--ro ldp-ext:adjacent? uint16 893 | | | +--ro ldp-ext:negotiated? uint16 894 | | | +--ro ldp-ext:remaining? uint16 895 | | +--ro ldp-ext:next-hello? uint16 896 | | +--ro ldp-ext:statistics 897 | | | +--ro ldp-ext:discontinuity-time yang:date-and-time 898 | | | +--ro ldp-ext:hello-received? yang:counter64 899 | | | +--ro ldp-ext:hello-dropped? yang:counter64 900 | | +--ro ldp-ext:peer? -> ../../../../../../../../ldp:peers/peer/lsr-id 901 | +--rw targeted 902 | +--rw address-families 903 | +--rw ldp-ext:ipv6! 904 | +--ro ldp-ext:hello-adjacencies 905 | +--ro ldp-ext:hello-adjacency* [local-address adjacent-address] 906 | +--ro ldp-ext:local-address inet:ipv6-address 907 | +--ro ldp-ext:adjacent-address inet:ipv6-address 908 | +--ro ldp-ext:flag* identityref 909 | +--ro ldp-ext:hello-holdtime 910 | | +--ro ldp-ext:adjacent? uint16 911 | | +--ro ldp-ext:negotiated? uint16 912 | | +--ro ldp-ext:remaining? uint16 913 | +--ro ldp-ext:next-hello? uint16 914 | +--ro ldp-ext:statistics 915 | | +--ro ldp-ext:discontinuity-time yang:date-and-time 916 | | +--ro ldp-ext:hello-received? yang:counter64 917 | | +--ro ldp-ext:hello-dropped? yang:counter64 918 | +--ro ldp-ext:peer? -> ../../../../../../../ldp:peers/peer/lsr-id 919 +--rw peers 920 +--rw peer* [lsr-id] 921 +--rw lsr-id yang:dotted-quad 922 +--rw address-families 923 +--rw ldp-ext:ipv6! 924 +--ro ldp-ext:hello-adjacencies 925 +--ro ldp-ext:hello-adjacency* [local-address adjacent-address] 926 +--ro ldp-ext:local-address inet:ipv6-address 927 +--ro ldp-ext:adjacent-address inet:ipv6-address 928 +--ro ldp-ext:flag* identityref 929 +--ro ldp-ext:hello-holdtime 930 | +--ro ldp-ext:adjacent? uint16 931 | +--ro ldp-ext:negotiated? uint16 932 | +--ro ldp-ext:remaining? uint16 933 +--ro ldp-ext:next-hello? uint16 934 +--ro ldp-ext:statistics 935 | +--ro ldp-ext:discontinuity-time yang:date-and-time 936 | +--ro ldp-ext:hello-received? yang:counter64 937 | +--ro ldp-ext:hello-dropped? yang:counter64 938 +--ro ldp-ext:interface? if:interface-ref 940 Figure 8 942 5.2. States 944 Following are main areas for which LDP operational state is defined: 946 Neighbor Adjacencies 948 Peer 950 Bindings (FEC-label and address) 952 Capabilities 954 5.2.1. Adjacency state 956 Neighbor adjacencies are per address-family hello adjacencies that 957 are formed with neighbors as result of LDP basic or extended 958 discovery. In terms of organization, there is a source of discovery 959 (e.g. interface or target address) along with its associated 960 parameters and one or more discovered neighbors along with neighbor 961 discovery related parameters. For the basic discovery, there could 962 be more than one discovered neighbor for a given source (interface), 963 whereas there is at most one discovered neighbor for an extended 964 discovery source (local-address and target-address). This is also to 965 be noted that the reason for a targeted neighbor adjacency could be 966 either an active source (locally configured targeted) or passive 967 source (to allow any incoming extended/targeted hellos). A neighbor/ 968 adjacency record also contains session-state that helps highlight 969 whether a given adjacency has progressed to subsequent session level 970 or to eventual peer level. 972 Following captures high level tree hierarchy for neighbor adjacency 973 state. 975 +--rw mpls-ldp! 976 +--rw discovery 977 +--rw interfaces 978 | +--rw interface* [interface] 979 | +--rw address-families 980 | +--rw ipv4 (or ipv6) 981 | +--ro hello-adjacencies* [adjacent-address] 982 | +--ro adjacent-address 983 | . . . . 984 | . . . . 985 +--rw targeted 986 +--rw address-families 987 +--rw ipv4 (or ipv6) 988 +--ro hello-adjacencies* [local-address adjacent-address] 989 +--ro local-address 990 +--ro adjacent-address 991 . . . . 992 . . . . 994 Figure 9 996 5.2.2. Peer state 998 Peer related state is presented under peers tree. This is one of the 999 core state that provides info on the session related parameters 1000 (mode, authentication, KA timeout etc.), TCP connection info, hello 1001 adjacencies for the peer, statistics related to messages and 1002 bindings, and capabilities exchange info. 1004 Following captures high level tree hierarchy for peer state. 1006 +--rw mpls-ldp! 1007 +--rw peers 1008 +--rw peer* [lsr-id] 1009 +--rw lsr-id 1010 +--ro session-ka-holdtime? 1011 +-- . . . . 1012 +-- . . . . 1013 +--ro capability 1014 + +-- ro . . . 1015 +--ro address-families 1016 | +--ro ipv4 (or ipv6) 1017 | +--ro hello-adjacencies* [local-address adjacent-address] 1018 | . . . . 1019 | . . . . 1020 +--ro received-peer-state 1021 | +--ro . . . . 1022 | +--ro capability 1023 | +--ro . . . . 1024 +--ro statistics 1025 +-- . . . . 1026 +-- received 1027 | +-- ... 1028 +-- sent 1029 +-- ... 1031 Figure 10 1033 5.2.3. Bindings state 1035 Binding state provides information on LDP FEC-label bindings as well 1036 as address binding for both inbound (received) as well as outbound 1037 (advertised) direction. FEC-label bindings are presented as a FEC- 1038 centric view, and address bindings are presented as an address- 1039 centric view: 1041 FEC-Label bindings: 1042 FEC 203.0.113.1/32: 1043 advertised: local-label 16000 1044 peer 192.0.2.1:0 1045 peer 192.0.2.2:0 1046 peer 192.0.2.3:0 1047 received: 1048 peer 192.0.2.1:0, label 16002, used-in-forwarding=Yes 1049 peer 192.0.2.2:0, label 17002, used-in-forwarding=No 1050 FEC 203.0.113.2/32: 1051 . . . . 1052 FEC 198.51.100.0/24: 1053 . . . . 1055 Address bindings: 1056 Addr 192.0.2.10: 1057 advertised 1058 Addr 192.0.2.1: 1059 received, peer 192.0.2.1:0 1060 Addr 192.0.2.2: 1061 received, peer 192.0.2.2:0 1062 Addr 192.0.2.3: 1063 received, peer 192.0.2.3:0 1065 Figure 11 1067 Note that all local addresses are advertised to all peers and hence 1068 no need to provide per-peer information for local address 1069 advertisement. Furthermore, note that it is easy to derive a peer- 1070 centric view for the bindings from the information already provided 1071 in this model. 1073 Following captures high level tree hierarchy for bindings state. 1075 +--rw mpls-ldp! 1076 +--rw global 1077 +--rw address-families 1078 +--rw ipv4 (or ipv6) 1079 +--ro bindings 1080 +--ro address* [address] 1081 | +--ro address 1082 | +--ro dvertisement-type? advertised-received 1083 | +--ro peer? leafref 1084 +--ro fec-label* [fec] 1085 +--ro fec inet:ipv4-prefix 1086 +--ro peer* [peer advertisement-type] 1087 +--ro peer leafref 1088 +--ro advertisement-type? advertised-received 1089 +--ro label? mpls:mpls-label 1090 +--ro used-in-forwarding? boolean 1092 Figure 12 1094 5.2.4. Capabilities state 1096 LDP capabilities state comprise two types of information - global 1097 information (such as timer etc.), and per-peer information. 1099 Following captures high level tree hierarchy for LDP capabilities 1100 state. 1102 +--rw mpls-ldp! 1103 +--rw global 1104 | +--ro capability 1105 | +--ro . . . . 1106 | +--ro . . . . 1107 +--rw peers 1108 +--rw peer* [lsr-id] 1109 +--rw lsr-id yang:dotted-quad 1110 +--ro received-peer-state 1111 +--ro capability 1112 +--ro . . . . 1113 +--ro . . . . 1115 Figure 13 1117 6. Notifications 1119 This model defines a list of notifications to inform client of 1120 important events detected during the protocol operation. These 1121 events include events related to changes in the operational state of 1122 an LDP peer, hello adjacency, and FEC etc. It is to be noted that an 1123 LDP FEC is treated as operational (up) as long as it has at least 1 1124 NHLFE with outgoing label. 1126 Following is a simplified graphical representation of the data model 1127 for LDP notifications. 1129 module: ietf-mpls-ldp 1130 notifications: 1131 +---n mpls-ldp-peer-event 1132 | +--ro event-type? oper-status-event-type 1133 | +--ro peer-ref? -> /rt:routing/control-plane-protocols/mpls-ldp/peers/peer/lsr-id 1134 +---n mpls-ldp-hello-adjacency-event 1135 | +--ro event-type? oper-status-event-type 1136 | +--ro (hello-adjacency-type)? 1137 | +--:(targeted) 1138 | | +--ro targeted 1139 | | +--ro target-address? inet:ip-address 1140 | +--:(link) 1141 | +--ro link 1142 | +--ro next-hop-interface? if:interface-ref 1143 | +--ro next-hop-address? inet:ip-address 1144 +---n mpls-ldp-fec-event 1145 +--ro event-type? oper-status-event-type 1146 +--ro prefix? inet:ip-prefix 1148 Figure 14 1150 7. Actions 1152 This model defines a list of rpcs that allow performing an action or 1153 executing a command on the protocol. For example, it allows to clear 1154 (reset) LDP peers, hello-adjacencies, and statistics. The model 1155 makes an effort to provide different level of control so that a user 1156 is able to either clear all, or clear all for a given type, or clear 1157 a specific entity. 1159 Following is a simplified graphical representation of the data model 1160 for LDP actions. 1162 module: ietf-mpls-ldp 1163 rpcs: 1164 +---x mpls-ldp-clear-peer 1165 | +---w input 1166 | +---w lsr-id? union 1167 +---x mpls-ldp-clear-hello-adjacency 1168 | +---w input 1169 | +---w hello-adjacency 1170 | +---w (hello-adjacency-type)? 1171 | +--:(targeted) 1172 | | +---w targeted! 1173 | | +---w target-address? inet:ip-address 1174 | +--:(link) 1175 | +---w link! 1176 | +---w next-hop-interface? -> /rt:routing/control-plane-protocols/mpls-ldp/discovery/interfaces/interface/name 1177 | +---w next-hop-address? inet:ip-address 1178 +---x mpls-ldp-clear-peer-statistics 1179 +---w input 1180 +---w lsr-id? union 1182 Figure 15 1184 8. Open Items 1186 Following is a list of open items that are to be discussed and 1187 addressed in future revisions of this document: 1189 o Specify default values for configuration parameters 1191 9. YANG Specification 1193 Following are the actual YANG definition (module) for LDP constructs 1194 defined earlier in the document. 1196 9.1. Base 1198 file "ietf-mpls-ldp@2017-10-29.yang" 1200 module ietf-mpls-ldp { 1201 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; 1202 prefix "ldp"; 1204 import ietf-inet-types { 1205 prefix "inet"; 1207 } 1209 import ietf-yang-types { 1210 prefix "yang"; 1211 } 1213 import ietf-routing { 1214 prefix "rt"; 1215 } 1217 import ietf-routing-types { 1218 prefix "rt-types"; 1219 } 1221 import ietf-interfaces { 1222 prefix "if"; 1223 } 1225 import ietf-ip { 1226 prefix "ip"; 1227 } 1229 organization 1230 "IETF MPLS Working Group"; 1231 contact 1232 "WG Web: 1233 WG List: 1235 WG Chair: Loa Andersson 1236 1238 WG Chair: Ross Callon 1239 1241 WG Chair: George Swallow 1242 1244 Editor: Kamran Raza 1245 1247 Editor: Rajiv Asati 1248 1250 Editor: Xufeng Liu 1251 1253 Editor: Santosh Esale 1254 1256 Editor: Xia Chen 1257 1259 Editor: Himanshu Shah 1260 "; 1262 description 1263 "This YANG module defines the essential components for the 1264 management of Multi-Protocol Label Switching (MPLS) Label 1265 Distribution Protocol (LDP). It is also the base model to 1266 be augmented for Multipoint LDP (mLDP)."; 1268 revision 2017-10-29 { 1269 description 1270 "Initial revision."; 1271 reference 1272 "RFC XXXX: YANG Data Model for MPLS LDP."; 1273 } 1275 /* 1276 * Typedefs 1277 */ 1278 typedef ldp-address-family { 1279 type identityref { 1280 base rt:address-family; 1281 } 1282 description 1283 "LDP address family type."; 1284 } 1286 typedef duration32-inf { 1287 type union { 1288 type uint32; 1289 type enumeration { 1290 enum "infinite" { 1291 description "The duration is infinite."; 1292 } 1293 } 1294 } 1295 units seconds; 1296 description 1297 "Duration represented as 32 bit seconds with infinite."; 1298 } 1300 typedef advertised-received { 1301 type enumeration { 1302 enum advertised { 1303 description "Advertised information."; 1305 } 1306 enum received { 1307 description "Received information."; 1308 } 1309 } 1310 description 1311 "Received or advertised."; 1312 } 1314 typedef downstream-upstream { 1315 type enumeration { 1316 enum downstream { 1317 description "Downstream information."; 1318 } 1319 enum upstream { 1320 description "Upstream information."; 1321 } 1322 } 1323 description 1324 "Received or advertised."; 1325 } 1327 typedef label-adv-mode { 1328 type enumeration { 1329 enum downstream-unsolicited { 1330 description "Downstream Unsolicited."; 1331 } 1332 enum downstream-on-demand { 1333 description "Downstream on Demand."; 1334 } 1335 } 1336 description 1337 "Label Advertisement Mode."; 1338 } 1340 typedef oper-status-event-type { 1341 type enumeration { 1342 enum up { 1343 value 1; 1344 description 1345 "Operational status changed to up."; 1346 } 1347 enum down { 1348 value 2; 1349 description 1350 "Operational status changed to down."; 1351 } 1352 } 1353 description "Operational status event type for notifications."; 1354 } 1356 /* 1357 * Identities 1358 */ 1359 identity adjacency-flag-base { 1360 description "Base type for adjacency flags."; 1361 } 1363 identity adjacency-flag-active { 1364 base "adjacency-flag-base"; 1365 description 1366 "This adjacency is configured and actively created."; 1367 } 1369 identity adjacency-flag-passive { 1370 base "adjacency-flag-base"; 1371 description 1372 "This adjacency is not configured and passively accepted."; 1373 } 1375 /* 1376 * Groupings 1377 */ 1379 grouping adjacency-state-attributes { 1380 description 1381 "Adjacency state attributes."; 1383 leaf-list flag { 1384 type identityref { 1385 base "adjacency-flag-base"; 1386 } 1387 description "Adjacency flags."; 1388 } 1389 container hello-holdtime { 1390 description "Hello holdtime state."; 1391 leaf adjacent { 1392 type uint16; 1393 units seconds; 1394 description "Peer holdtime."; 1395 } 1396 leaf negotiated { 1397 type uint16; 1398 units seconds; 1399 description "Negotiated holdtime."; 1400 } 1401 leaf remaining { 1402 type uint16; 1403 units seconds; 1404 description "Remaining holdtime."; 1405 } 1406 } 1408 leaf next-hello { 1409 type uint16; 1410 units seconds; 1411 description "Time to send the next hello message."; 1412 } 1414 container statistics { 1415 description 1416 "Statistics objects."; 1418 leaf discontinuity-time { 1419 type yang:date-and-time; 1420 mandatory true; 1421 description 1422 "The time on the most recent occasion at which any one or 1423 more of this interface's counters suffered a 1424 discontinuity. If no such discontinuities have occurred 1425 since the last re-initialization of the local management 1426 subsystem, then this node contains the time the local 1427 management subsystem re-initialized itself."; 1428 } 1430 leaf hello-received { 1431 type yang:counter64; 1432 description 1433 "The number of hello messages received."; 1434 } 1435 leaf hello-dropped { 1436 type yang:counter64; 1437 description 1438 "The number of hello messages dropped."; 1439 } 1440 } // statistics 1441 } // adjacency-state-attributes 1443 grouping basic-discovery-timers { 1444 description 1445 "Basic discovery timer attributes."; 1446 leaf hello-holdtime { 1447 type uint16 { 1448 range 15..3600; 1450 } 1451 units seconds; 1452 default 15; 1453 description 1454 "The time interval for which a LDP link Hello adjacency 1455 is maintained in the absence of link Hello messages from 1456 the LDP neighbor"; 1457 } 1458 leaf hello-interval { 1459 type uint16 { 1460 range 5..1200; 1461 } 1462 units seconds; 1463 default 5; 1464 description 1465 "The interval between consecutive LDP link Hello messages 1466 used in basic LDP discovery"; 1467 } 1468 } // basic-discovery-timers 1470 grouping binding-address-state-attributes { 1471 description 1472 "Address binding attributes"; 1473 leaf advertisement-type { 1474 type advertised-received; 1475 description 1476 "Received or advertised."; 1477 } 1478 leaf peer { 1479 type leafref { 1480 path "../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; 1481 } 1482 must "../advertisement-type = 'received'" { 1483 description 1484 "Applicable for received address."; 1485 } 1486 description 1487 "LDP peer from which this address is received."; 1488 } // peer 1489 } // binding-address-state-attributes 1491 grouping binding-label-state-attributes { 1492 description 1493 "Label binding attributes"; 1494 list peer { 1495 key "lsr-id advertisement-type"; 1496 description 1497 "List of advertised and received peers."; 1499 leaf lsr-id { 1500 type leafref { 1501 path "../../../../../../../ldp:peers/ldp:peer/" 1502 + "ldp:lsr-id"; 1503 } 1504 description 1505 "LDP peer from which this binding is received, 1506 or to which this binding is advertised."; 1507 } 1508 leaf advertisement-type { 1509 type advertised-received; 1510 description 1511 "Received or advertised."; 1512 } 1513 leaf label { 1514 type rt-types:mpls-label; 1515 description 1516 "Advertised (outbound) or received (inbound) 1517 label."; 1518 } 1519 leaf used-in-forwarding { 1520 type boolean; 1521 description 1522 "'true' if the lable is used in forwarding."; 1523 } 1524 } // peer 1525 } // binding-label-state-attributes 1527 grouping extended-discovery-policy-attributes { 1528 description 1529 "LDP policy to control the acceptance of extended neighbor 1530 discovery hello messages."; 1531 container hello-accept { 1532 description 1533 "Extended discovery acceptance policies."; 1535 leaf enable { 1536 type boolean; 1537 description 1538 "'true' to accept; 'false' to deny."; 1539 } 1540 } // hello-accept 1541 } // extended-discovery-policy-attributes 1543 grouping extended-discovery-timers { 1544 description 1545 "Extended discovery timer attributes."; 1546 leaf hello-holdtime { 1547 type uint16 { 1548 range 15..3600; 1549 } 1550 units seconds; 1551 default 45; 1552 description 1553 "The time interval for which LDP targeted Hello adjacency 1555 is maintained in the absence of targeted Hello messages 1556 from an LDP neighbor."; 1557 } 1558 leaf hello-interval { 1559 type uint16 { 1560 range 5..3600; 1561 } 1562 units seconds; 1563 default 15; 1564 description 1565 "The interval between consecutive LDP targeted Hello 1566 messages used in extended LDP discovery."; 1567 } 1568 } // extended-discovery-timers 1570 grouping global-attributes { 1571 description "Configuration attributes at global level."; 1573 uses instance-attributes; 1574 } // global-attributes 1576 grouping graceful-restart-attributes { 1577 description 1578 "Graceful restart configuration attributes."; 1579 container graceful-restart { 1580 description 1581 "Attributes for graceful restart."; 1582 leaf enable { 1583 type boolean; 1584 description 1585 "Enable or disable graceful restart."; 1586 } 1587 leaf reconnect-time { 1588 type uint16 { 1589 range 10..1800; 1590 } 1591 units seconds; 1592 description 1593 "Specifies the time interval that the remote LDP peer 1594 must wait for the local LDP peer to reconnect after the 1595 remote peer detects the LDP communication failure."; 1596 } 1597 leaf recovery-time { 1598 type uint16 { 1599 range 30..3600; 1600 } 1601 units seconds; 1602 description 1603 "Specifies the time interval, in seconds, that the remote 1604 LDP peer preserves its MPLS forwarding state after 1605 receiving the Initialization message from the restarted 1606 local LDP peer."; 1607 } 1608 leaf forwarding-holdtime { 1609 type uint16 { 1610 range 30..3600; 1611 } 1612 units seconds; 1613 description 1614 "Specifies the time interval, in seconds, before the 1615 termination of the recovery phase."; 1616 } 1617 } // graceful-restart 1618 } // graceful-restart-attributes 1620 grouping graceful-restart-attributes-per-peer { 1621 description 1622 "Per peer graceful restart configuration attributes."; 1623 container graceful-restart { 1624 description 1625 "Attributes for graceful restart."; 1626 leaf enable { 1627 type boolean; 1628 description 1629 "Enable or disable graceful restart."; 1630 } 1631 leaf reconnect-time { 1632 type uint16 { 1633 range 10..1800; 1634 } 1635 units seconds; 1636 description 1637 "Specifies the time interval that the remote LDP peer 1638 must wait for the local LDP peer to reconnect after the 1639 remote peer detects the LDP communication failure."; 1640 } 1641 leaf recovery-time { 1642 type uint16 { 1643 range 30..3600; 1644 } 1645 units seconds; 1646 description 1647 "Specifies the time interval, in seconds, that the remote 1648 LDP peer preserves its MPLS forwarding state after 1649 receiving the Initialization message from the restarted 1650 local LDP peer."; 1651 } 1652 } // graceful-restart 1653 } // graceful-restart-attributes-per-peer 1655 grouping instance-attributes { 1656 description "Configuration attributes at instance level."; 1658 container capability { 1659 description "Configure capability."; 1660 } // capability 1662 uses graceful-restart-attributes; 1664 leaf lsr-id { 1665 type yang:dotted-quad; 1666 description 1667 "Specify the value to act as the LDP LSR ID. 1668 If this attribute is not specified, LDP uses the router 1669 ID as determined by the system."; 1670 } 1671 } // instance-attributes 1673 grouping ldp-adjacency-ref { 1674 description 1675 "An absolute reference to an LDP adjacency."; 1676 choice hello-adjacency-type { 1677 description 1678 "Interface or targeted adjacency."; 1679 case targeted { 1680 container targeted { 1681 description "Targeted adjacency."; 1682 leaf target-address { 1683 type inet:ip-address; 1684 description 1685 "The target address."; 1686 } 1687 } // targeted 1688 } 1689 case link { 1690 container link { 1691 description "Link adjacency."; 1692 leaf next-hop-interface { 1693 type if:interface-ref; 1694 description 1695 "Interface connecting to next-hop."; 1696 } 1697 leaf next-hop-address { 1698 type inet:ip-address; 1699 must "../next-hop-interface" { 1700 description 1701 "Applicable when interface is specified."; 1703 } 1704 description 1705 "IP address of next-hop."; 1706 } 1707 } // link 1708 } 1709 } 1710 } // ldp-adjacency-ref 1712 grouping ldp-fec-event { 1713 description 1714 "The event attributes for a change of FEC 1715 (Forwarding Equivalence Class) status."; 1716 leaf prefix { 1717 type inet:ip-prefix; 1718 description 1719 "The address prefix element of the FEC whose status 1720 has changed."; 1721 } 1722 } // ldp-fec-event 1724 grouping ldp-interface-ref { 1725 description 1726 "Defining a reference to LDP interface."; 1728 leaf name { 1729 type if:interface-ref; 1730 must "(/if:interfaces/if:interface[if:name=current()]/ip:ipv4)" 1731 + " or " 1732 + "(/if:interfaces/if:interface[if:name=current()]/ip:ipv6)" 1733 { 1734 description "Interface is IPv4 or IPv6."; 1735 } 1736 description 1737 "The name of an LDP interface."; 1738 } 1740 } 1742 grouping ldp-peer-ref { 1743 description 1744 "An absolute reference to an LDP peer."; 1745 leaf peer-ref { 1746 type leafref { 1747 path "/rt:routing/rt:control-plane-protocols/mpls-ldp/" 1748 + "peers/peer/lsr-id"; 1749 } 1750 description 1751 "Reference to an LDP peer."; 1752 } 1753 } // ldp-peer-ref 1755 grouping peer-attributes { 1756 description "Peer configuration attributes."; 1758 leaf session-ka-holdtime { 1759 type uint16 { 1760 range 45..3600; 1761 } 1762 units seconds; 1763 description 1764 "The time interval after which an inactive LDP session 1765 terminates and the corresponding TCP session closes. 1766 Inactivity is defined as not receiving LDP packets from the 1767 peer."; 1768 } 1769 leaf session-ka-interval { 1770 type uint16 { 1771 range 15..1200; 1772 } 1773 units seconds; 1774 description 1775 "The interval between successive transmissions of keepalive 1776 packets. Keepalive packets are only sent in the absence of 1777 other LDP packets transmitted over the LDP session."; 1778 } 1779 } // peer-attributes 1781 grouping peer-authentication { 1782 description 1783 "Peer authentication container."; 1784 /* 1785 leaf session-authentication-md5-password { 1786 type string { 1787 length "1..80"; 1789 } 1790 description 1791 "Assigns an encrypted MD5 password to an LDP 1792 peer"; 1793 } // md5-password 1794 */ 1795 container authentication { 1796 description "Containing authentication information."; 1797 choice auth-type-selection { 1798 description 1799 "Options for expressing authentication setting."; 1800 case auth-key { 1801 leaf md5-key { 1802 type string; 1803 description 1804 "MD5 Key string."; 1805 } 1806 } 1807 } 1808 } // authentication 1809 } // peer-authentication 1811 grouping peer-state-derived { 1812 description "Peer derived state attributes."; 1814 container label-advertisement-mode { 1815 config false; 1816 description "Label advertisement mode state."; 1817 leaf local { 1818 type label-adv-mode; 1819 description 1820 "Local Label Advertisement Mode."; 1821 } 1822 leaf peer { 1823 type label-adv-mode; 1824 description 1825 "Peer Label Advertisement Mode."; 1826 } 1827 leaf negotiated { 1828 type label-adv-mode; 1829 description 1830 "Negotiated Label Advertisement Mode."; 1831 } 1832 } 1833 leaf next-keep-alive { 1834 type uint16; 1835 units seconds; 1836 config false; 1837 description "Time to send the next KeepAlive message."; 1838 } 1840 leaf peer-ldp-id { 1841 type yang:dotted-quad; 1842 config false; 1843 description "Peer LDP ID."; 1844 } 1846 container received-peer-state { 1847 config false; 1848 description "Peer features."; 1850 uses graceful-restart-attributes-per-peer; 1852 container capability { 1853 description "Configure capability."; 1854 container end-of-lib { 1855 description 1856 "Configure end-of-lib capability."; 1857 leaf enable { 1858 type boolean; 1859 description 1860 "Enable end-of-lib capability."; 1861 } 1862 } 1863 container typed-wildcard-fec { 1864 description 1865 "Configure typed-wildcard-fec capability."; 1866 leaf enable { 1867 type boolean; 1868 description 1869 "Enable typed-wildcard-fec capability."; 1870 } 1871 } 1872 container upstream-label-assignment { 1873 description 1874 "Configure upstream label assignment capability."; 1875 leaf enable { 1876 type boolean; 1877 description 1878 "Enable upstream label assignment."; 1879 } 1880 } 1881 } // capability 1882 } // received-peer-state 1884 container session-holdtime { 1885 config false; 1886 description "Session holdtime state."; 1887 leaf peer { 1888 type uint16; 1889 units seconds; 1890 description "Peer holdtime."; 1891 } 1892 leaf negotiated { 1893 type uint16; 1894 units seconds; 1895 description "Negotiated holdtime."; 1896 } 1897 leaf remaining { 1898 type uint16; 1899 units seconds; 1900 description "Remaining holdtime."; 1901 } 1902 } // session-holdtime 1904 leaf session-state { 1905 type enumeration { 1906 enum non-existent { 1907 description "NON EXISTENT state. Transport disconnected."; 1908 } 1909 enum initialized { 1910 description "INITIALIZED state."; 1911 } 1912 enum openrec { 1913 description "OPENREC state."; 1914 } 1915 enum opensent { 1916 description "OPENSENT state."; 1917 } 1918 enum operational { 1919 description "OPERATIONAL state."; 1920 } 1921 } 1922 config false; 1923 description 1924 "Representing the operational status."; 1925 } 1927 container tcp-connection { 1928 config false; 1929 description "TCP connection state."; 1930 leaf local-address { 1931 type inet:ip-address; 1932 description "Local address."; 1934 } 1935 leaf local-port { 1936 type inet:port-number; 1937 description "Local port."; 1938 } 1939 leaf remote-address { 1940 type inet:ip-address; 1941 description "Remote address."; 1942 } 1943 leaf remote-port { 1944 type inet:port-number; 1945 description "Remote port."; 1946 } 1947 } // tcp-connection 1949 leaf up-time { 1950 type string; 1951 config false; 1952 description "Up time. The interval format in ISO 8601."; 1953 } 1955 container statistics { 1956 config false; 1957 description 1958 "Statistics objects."; 1960 leaf discontinuity-time { 1961 type yang:date-and-time; 1962 mandatory true; 1963 description 1964 "The time on the most recent occasion at which any one or 1965 more of this interface's counters suffered a 1966 discontinuity. If no such discontinuities have occurred 1967 since the last re-initialization of the local management 1968 subsystem, then this node contains the time the local 1969 management subsystem re-initialized itself."; 1970 } 1972 container received { 1973 description "Inbound statistics."; 1974 uses statistics-peer-received-sent; 1975 } 1976 container sent { 1977 description "Outbound statistics."; 1978 uses statistics-peer-received-sent; 1979 } 1981 leaf total-addresses { 1982 type uint32; 1983 description 1984 "The number of learned addresses."; 1985 } 1986 leaf total-labels { 1987 type uint32; 1988 description 1989 "The number of learned labels."; 1990 } 1991 leaf total-fec-label-bindings { 1992 type uint32; 1993 description 1994 "The number of learned label-address bindings."; 1995 } 1996 } // statistics 1997 } // peer-state-derived 1999 grouping statistics-peer-received-sent { 2000 description 2001 "Inbound and outbound statistic counters."; 2002 leaf total-octets { 2003 type yang:counter64; 2004 description 2005 "The total number of octets sent or received."; 2006 } 2007 leaf total-messages { 2008 type yang:counter64; 2009 description 2010 "The number of messages sent or received."; 2011 } 2012 leaf address { 2013 type yang:counter64; 2014 description 2015 "The number of address messages sent or received."; 2016 } 2017 leaf address-withdraw { 2018 type yang:counter64; 2019 description 2020 "The number of address-withdraw messages sent or received."; 2021 } 2022 leaf initialization { 2023 type yang:counter64; 2024 description 2025 "The number of initialization messages sent or received."; 2026 } 2027 leaf keepalive { 2028 type yang:counter64; 2029 description 2030 "The number of keepalive messages sent or received."; 2031 } 2032 leaf label-abort-request { 2033 type yang:counter64; 2034 description 2035 "The number of label-abort-request messages sent or 2036 received."; 2037 } 2038 leaf label-mapping { 2039 type yang:counter64; 2040 description 2041 "The number of label-mapping messages sent or received."; 2042 } 2043 leaf label-release { 2044 type yang:counter64; 2045 description 2046 "The number of label-release messages sent or received."; 2047 } 2048 leaf label-request { 2049 type yang:counter64; 2050 description 2051 "The number of label-request messages sent or received."; 2052 } 2053 leaf label-withdraw { 2054 type yang:counter64; 2055 description 2056 "The number of label-withdraw messages sent or received."; 2057 } 2058 leaf notification { 2059 type yang:counter64; 2060 description 2061 "The number of messages sent or received."; 2062 } 2063 } // statistics-peer-received-sent 2065 /* 2066 * Configuration data and operational state data nodes 2067 */ 2069 augment "/rt:routing/rt:control-plane-protocols" { 2070 description "LDP augmentation."; 2072 container mpls-ldp { 2073 presence "Container for LDP protocol."; 2074 description 2075 "Container for LDP protocol."; 2077 container global { 2078 description 2079 "Global attributes for LDP."; 2081 uses global-attributes; 2083 container address-families { 2084 description 2085 "Container for address families."; 2086 container ipv4 { 2087 presence 2088 "Present if IPv4 is enabled, unless the 'enable' 2089 leaf is set to 'false'"; 2090 description 2091 "IPv4 address family."; 2093 leaf enable { 2094 type boolean; 2095 default true; 2096 description 2097 "'true' to enable the address family."; 2098 } 2100 leaf label-distribution-controlmode { 2101 type enumeration { 2102 enum independent { 2103 description 2104 "Independent label distribution control."; 2105 } 2106 enum Ordered { 2107 description 2108 "Ordered Label Distribution Control."; 2109 } 2110 } 2111 config false; 2112 description 2113 "Label distribution control mode."; 2114 reference 2115 "RFC5036: LDP Specification. Sec 2.6."; 2116 } 2118 // ipv4 bindings 2119 container bindings { 2120 config false; 2121 description 2122 "LDP address and label binding information."; 2123 list address { 2124 key "address"; 2125 description 2126 "List of address bindings."; 2127 leaf address { 2128 type inet:ipv4-address; 2129 description 2130 "Binding address."; 2131 } 2132 uses binding-address-state-attributes; 2133 } // binding-address 2135 list fec-label { 2136 key "fec"; 2137 description 2138 "List of label bindings."; 2139 leaf fec { 2140 type inet:ipv4-prefix; 2141 description 2142 "Prefix FEC."; 2143 } 2144 uses binding-label-state-attributes; 2145 } // fec-label 2146 } // bindings 2147 } // ipv4 2148 } // address-families 2149 } // global 2151 container discovery { 2152 description 2153 "Neibgbor discovery configuration."; 2155 container interfaces { 2156 description 2157 "A list of interfaces for basic descovery."; 2159 uses basic-discovery-timers; 2161 list interface { 2162 key "name"; 2163 description 2164 "List of LDP interfaces."; 2165 uses ldp-interface-ref; 2166 leaf next-hello { 2167 type uint16; 2168 units seconds; 2169 config false; 2170 description "Time to send the next hello message."; 2171 } 2173 container address-families { 2174 description 2175 "Container for address families."; 2176 container ipv4 { 2177 presence 2178 "Present if IPv4 is enabled, unless the 'enable' 2179 leaf is set to 'false'"; 2180 description 2181 "IPv4 address family."; 2183 leaf enable { 2184 type boolean; 2185 default true; 2186 description 2187 "Enable the address family on the interface."; 2188 } 2190 // ipv4 2191 container hello-adjacencies { 2192 config false; 2193 description 2194 "Containing a list of hello adjacencies."; 2196 list hello-adjacency { 2197 key "adjacent-address"; 2198 config false; 2199 description "List of hello adjacencies."; 2201 leaf adjacent-address { 2202 type inet:ipv4-address; 2203 description 2204 "Neighbor address of the hello adjacency."; 2205 } 2207 uses adjacency-state-attributes; 2209 leaf peer { 2210 type leafref { 2211 path "../../../../../../../../" 2212 + "peers/peer/lsr-id"; 2213 } 2214 description 2215 "LDP peer from this adjacency."; 2216 } 2217 } // hello-adjacency 2218 } // hello-adjacencies 2219 } // ipv4 2220 } // address-families 2221 } // list interface 2223 } // interfaces 2225 container targeted 2226 { 2227 description 2228 "A list of targeted neighbors for extended discovery."; 2230 uses extended-discovery-timers; 2231 uses extended-discovery-policy-attributes; 2233 container address-families { 2234 description 2235 "Container for address families."; 2236 container ipv4 { 2237 presence 2238 "Present if IPv4 is enabled."; 2239 description 2240 "IPv4 address family."; 2242 container hello-adjacencies { 2243 config false; 2244 description 2245 "Containing a list of hello adjacencies."; 2247 list hello-adjacency { 2248 key "local-address adjacent-address"; 2249 description "List of hello adjacencies."; 2251 leaf local-address { 2252 type inet:ipv4-address; 2253 description 2254 "Local address of the hello adjacency."; 2255 } 2256 leaf adjacent-address { 2257 type inet:ipv4-address; 2258 description 2259 "Neighbor address of the hello adjacency."; 2260 } 2262 uses adjacency-state-attributes; 2264 leaf peer { 2265 type leafref { 2266 path "../../../../../../../peers/peer/" 2267 + "lsr-id"; 2268 } 2269 description 2270 "LDP peer from this adjacency."; 2272 } 2273 } // hello-adjacency 2274 } // hello-adjacencies 2276 list target { 2277 key "adjacent-address"; 2278 description 2279 "Targeted discovery params."; 2281 leaf adjacent-address { 2282 type inet:ipv4-address; 2283 description 2284 "Configures a remote LDP neighbor and enables 2285 extended LDP discovery of the specified 2286 neighbor."; 2287 } 2289 leaf enable { 2290 type boolean; 2291 description 2292 "Enable the target."; 2293 } 2294 leaf local-address { 2295 type inet:ipv4-address; 2296 description 2297 "The local address."; 2298 } 2299 } // target 2300 } // ipv4 2301 } // address-families 2302 } // targeted 2303 } // discovery 2305 container peers { 2306 description 2307 "Peers configuration attributes."; 2309 uses peer-authentication; 2310 uses peer-attributes; 2312 list peer { 2313 key "lsr-id"; 2314 description 2315 "List of peers."; 2317 leaf lsr-id { 2318 type yang:dotted-quad; 2319 description "LSR ID."; 2321 } 2323 uses peer-authentication; 2324 container capability { 2325 description 2326 "Per peer capability"; 2327 } 2329 container address-families { 2330 description 2331 "Per-vrf per-af params."; 2332 container ipv4 { 2333 presence 2334 "Present if IPv4 is enabled."; 2335 description 2336 "IPv4 address family."; 2338 container hello-adjacencies { 2339 config false; 2340 description 2341 "Containing a list of hello adjacencies."; 2343 list hello-adjacency { 2344 key "local-address adjacent-address"; 2345 description "List of hello adjacencies."; 2347 leaf local-address { 2348 type inet:ipv4-address; 2349 description 2350 "Local address of the hello adjacency."; 2351 } 2352 leaf adjacent-address { 2353 type inet:ipv4-address; 2354 description 2355 "Neighbor address of the hello adjacency."; 2356 } 2358 uses adjacency-state-attributes; 2360 leaf interface { 2361 type if:interface-ref; 2362 description "Interface for this adjacency."; 2363 } 2364 } // hello-adjacency 2365 } // hello-adjacencies 2366 } // ipv4 2367 } // address-families 2368 uses peer-state-derived; 2369 } // list peer 2370 } // peers 2371 } // container mpls-ldp 2372 } 2374 /* 2375 * RPCs 2376 */ 2377 rpc mpls-ldp-clear-peer { 2378 description 2379 "Clears the session to the peer."; 2380 input { 2381 leaf lsr-id { 2382 type union { 2383 type yang:dotted-quad; 2384 type uint32; 2385 } 2386 description 2387 "LSR ID of peer to be cleared. If this is not provided 2388 then all peers are cleared"; 2389 } 2390 } 2391 } 2393 rpc mpls-ldp-clear-hello-adjacency { 2394 description 2395 "Clears the hello adjacency"; 2396 input { 2397 container hello-adjacency { 2398 description 2399 "Link adjacency or targettted adjacency. If this is not 2400 provided then all hello adjacencies are cleared"; 2401 choice hello-adjacency-type { 2402 description "Adjacency type."; 2403 case targeted { 2404 container targeted { 2405 presence "Present to clear targeted adjacencies."; 2406 description 2407 "Clear targeted adjacencies."; 2408 leaf target-address { 2409 type inet:ip-address; 2410 description 2411 "The target address. If this is not provided then 2412 all targeted adjacencies are cleared"; 2413 } 2414 } // targeted 2415 } 2416 case link { 2417 container link { 2418 presence "Present to clear link adjacencies."; 2419 description 2420 "Clear link adjacencies."; 2421 leaf next-hop-interface { 2422 type leafref { 2423 path "/rt:routing/rt:control-plane-protocols/" 2424 + "mpls-ldp/discovery/interfaces/interface/name"; 2425 } 2426 description 2427 "Interface connecting to next-hop. If this is not 2428 provided then all link adjacencies are cleared."; 2429 } 2430 leaf next-hop-address { 2431 type inet:ip-address; 2432 must "../next-hop-interface" { 2433 description 2434 "Applicable when interface is specified."; 2435 } 2436 description 2437 "IP address of next-hop. If this is not provided 2438 then adjacencies to all next-hops on the given 2439 interface are cleared."; 2440 } // next-hop-address 2441 } // link 2442 } 2443 } 2444 } 2445 } 2446 } 2448 rpc mpls-ldp-clear-peer-statistics { 2449 description 2450 "Clears protocol statistics (e.g. sent and received 2451 counters)."; 2452 input { 2453 leaf lsr-id { 2454 type union { 2455 type yang:dotted-quad; 2456 type uint32; 2457 } 2458 description 2459 "LSR ID of peer whose statistic are to be cleared. 2460 If this is not provided then all peers statistics are 2461 cleared"; 2462 } 2463 } 2465 } 2467 /* 2468 * Notifications 2469 */ 2470 notification mpls-ldp-peer-event { 2472 description 2473 "Notification event for a change of LDP peer operational 2474 status."; 2475 leaf event-type { 2476 type oper-status-event-type; 2477 description "Event type."; 2478 } 2479 uses ldp-peer-ref; 2480 } 2482 notification mpls-ldp-hello-adjacency-event { 2483 description 2484 "Notification event for a change of LDP adjacency operational 2485 status."; 2486 leaf event-type { 2487 type oper-status-event-type; 2488 description "Event type."; 2489 } 2490 uses ldp-adjacency-ref; 2491 } 2493 notification mpls-ldp-fec-event { 2494 description 2495 "Notification event for a change of FEC status."; 2496 leaf event-type { 2497 type oper-status-event-type; 2498 description "Event type."; 2499 } 2500 uses ldp-fec-event; 2501 } 2502 } 2504 2506 Figure 16 2508 9.2. Extended 2510 file "ietf-mpls-ldp-extended@2017-10-29.yang" 2512 module ietf-mpls-ldp-extended { 2513 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended"; 2514 prefix "ldp-ext"; 2516 import ietf-inet-types { 2517 prefix "inet"; 2518 } 2520 import ietf-routing { 2521 prefix "rt"; 2522 } 2524 import ietf-key-chain { 2525 prefix "key-chain"; 2526 } 2528 import ietf-mpls-ldp { 2529 prefix "ldp"; 2530 } 2532 import ietf-interfaces { 2533 prefix "if"; 2534 } 2536 organization 2537 "IETF MPLS Working Group"; 2538 contact 2539 "WG Web: 2540 WG List: 2542 WG Chair: Loa Andersson 2543 2545 WG Chair: Ross Callon 2546 2548 WG Chair: George Swallow 2549 2551 Editor: Kamran Raza 2552 2554 Editor: Rajiv Asati 2555 2557 Editor: Xufeng Liu 2558 2560 Editor: Santosh Esale 2561 2563 Editor: Xia Chen 2564 2566 Editor: Himanshu Shah 2567 "; 2569 description 2570 "This YANG module defines the essential components for the 2571 management of Multi-Protocol Label Switching (MPLS) Label 2572 Distribution Protocol (LDP). It is also the base model to 2573 be augmented for Multipoint LDP (mLDP)."; 2575 revision 2017-10-29 { 2576 description 2577 "Initial revision."; 2578 reference 2579 "RFC XXXX: YANG Data Model for MPLS LDP."; 2580 } 2582 /* 2583 * Features 2584 */ 2585 feature capability-end-of-lib { 2586 description 2587 "This feature indicates that the system allows to configure 2588 LDP end-of-lib capability."; 2589 } 2591 feature capability-typed-wildcard-fec { 2592 description 2593 "This feature indicates that the system allows to configure 2594 LDP typed-wildcard-fec capability."; 2595 } 2597 feature capability-upstream-label-assignment { 2598 description 2599 "This feature indicates that the system allows to configure 2600 LDP upstream label assignment capability."; 2601 } 2602 feature forwarding-nexthop-config { 2603 description 2604 "This feature indicates that the system allows to configure 2605 forwarding nexthop on interfaces."; 2606 } 2608 feature graceful-restart-helper-mode { 2609 description 2610 "This feature indicates that the system supports graceful 2611 restart helper mode."; 2612 } 2614 feature per-interface-timer-config { 2615 description 2616 "This feature indicates that the system allows to configure 2617 interface hello timers at the per-interface level."; 2618 } 2620 feature per-peer-graceful-restart-config { 2621 description 2622 "This feature indicates that the system allows to configure 2623 graceful restart at the per-peer level."; 2624 } 2626 feature per-peer-session-attributes-config { 2627 description 2628 "This feature indicates that the system allows to configure 2629 session attributes at the per-peer level."; 2630 } 2632 feature policy-label-assignment-config { 2633 description 2634 "This feature indicates that the system allows to configure 2635 policies to assign labels according to certain prefixes."; 2636 } 2638 feature policy-ordered-label-config { 2639 description 2640 "This feature indicates that the system allows to configure 2641 ordered label policies."; 2642 } 2644 feature policy-targeted-discovery-config { 2645 description 2646 "This feature indicates that the system allows to configure 2647 policies to control the acceptance of targeted neighbor 2648 discovery hello messages."; 2649 } 2650 feature session-downstream-on-demand-config { 2651 description 2652 "This feature indicates that the system allows to configure 2653 session downstream-on-demand"; 2654 } 2656 /* 2657 * Typedefs 2658 */ 2659 typedef neighbor-list-ref { 2660 type string; 2661 description 2662 "A type for a reference to a neighbor address list. 2663 The string value is the name identifier for uniquely 2664 identifying the referenced address list, which contains a list 2665 of addresses that a routing policy can applied. The definition 2666 of such an address list is outside the scope of this document."; 2667 } 2669 typedef prefix-list-ref { 2670 type string; 2671 description 2672 "A type for a reference to a prefix list. 2673 The string value is the name identifier for uniquely 2674 identifying the referenced prefix set, which contains a list 2675 of prefixes that a routing policy can applied. The definition 2676 of such a prefix set is outside the scope of this document."; 2678 } 2680 typedef peer-list-ref { 2681 type string; 2682 description 2683 "A type for a reference to a peer address list. 2684 The string value is the name identifier for uniquely 2685 identifying the referenced address list, which contains a list 2686 of addresses that a routing policy can applied. The definition 2687 of such an address list is outside the scope of this document."; 2688 } 2690 /* 2691 * Identities 2692 */ 2694 /* 2695 * Groupings 2696 */ 2697 grouping address-family-ipv4-augment { 2698 description "Augmentation to address family IPv4."; 2700 uses policy-container; 2702 leaf transport-address { 2703 type inet:ipv4-address; 2704 description 2705 "The transport address advertised in LDP Hello messages."; 2706 } 2707 } // address-family-ipv4-augment 2709 grouping authentication-keychain-augment { 2710 description "Augmentation to authentication to add keychain."; 2712 leaf key-chain { 2713 type key-chain:key-chain-ref; 2714 description 2715 "key-chain name."; 2716 } 2717 } // authentication-keychain-augment 2719 grouping capability-augment { 2720 description "Augmentation to capability."; 2722 container end-of-lib { 2723 if-feature capability-end-of-lib; 2724 description 2725 "Configure end-of-lib capability."; 2726 leaf enable { 2727 type boolean; 2728 description 2729 "Enable end-of-lib capability."; 2730 } 2731 } 2732 container typed-wildcard-fec { 2733 if-feature capability-typed-wildcard-fec; 2734 description 2735 "Configure typed-wildcard-fec capability."; 2736 leaf enable { 2737 type boolean; 2738 description 2739 "Enable typed-wildcard-fec capability."; 2740 } 2741 } 2742 container upstream-label-assignment { 2743 if-feature capability-upstream-label-assignment; 2744 description 2745 "Configure upstream label assignment capability."; 2747 leaf enable { 2748 type boolean; 2749 description 2750 "Enable upstream label assignment."; 2751 } 2752 } 2753 } // capability-augment 2755 grouping global-augment { 2756 description "Augmentation to global attributes."; 2758 leaf igp-synchronization-delay { 2759 type uint16 { 2760 range 3..60; 2761 } 2762 units seconds; 2763 description 2764 "Sets the interval that the LDP waits before notifying the 2765 Interior Gateway Protocol (IGP) that label exchange is 2766 completed so that IGP can start advertising the normal 2767 metric for the link."; 2768 } 2769 } // global-augment 2771 grouping global-forwarding-nexthop-augment { 2772 description 2773 "Augmentation to global forwarding nexthop interfaces."; 2775 container forwarding-nexthop { 2776 if-feature forwarding-nexthop-config; 2777 description 2778 "Configuration for forwarding nexthop."; 2780 container interfaces { 2781 description 2782 "A list of interfaces on which forwarding is disabled."; 2784 list interface { 2785 key "name"; 2786 description 2787 "List of LDP interfaces."; 2788 uses ldp:ldp-interface-ref; 2789 list address-family { 2790 key "afi"; 2791 description 2792 "Per-vrf per-af params."; 2793 leaf afi { 2794 type ldp:ldp-address-family; 2795 description 2796 "Address family type value."; 2797 } 2798 leaf ldp-disable { 2799 type boolean; 2800 description 2801 "Disable LDP forwarding on the interface."; 2802 } 2803 } // address-family 2804 } // list interface 2805 } // interfaces 2806 } // forwarding-nexthop 2807 } // global-forwarding-nexthop-augment 2809 grouping graceful-restart-augment { 2810 description "Augmentation to graceful restart."; 2812 leaf helper-enable { 2813 if-feature graceful-restart-helper-mode; 2814 type boolean; 2815 description 2816 "Enable or disable graceful restart helper mode."; 2817 } 2818 } // graceful-restart-augment 2820 grouping interface-address-family-ipv4-augment { 2821 description "Augmentation to interface address family IPv4."; 2823 leaf transport-address { 2824 type union { 2825 type enumeration { 2826 enum "use-interface-address" { 2827 description 2828 "Use interface address as the transport address."; 2829 } 2830 } 2831 type inet:ipv4-address; 2832 } 2833 description 2834 "IP address to be advertised as the LDP transport address."; 2835 } 2836 } // interface-address-family-ipv4-augment 2838 grouping interface-address-family-ipv6-augment { 2839 description "Augmentation to interface address family IPv6."; 2841 leaf transport-address { 2842 type union { 2843 type enumeration { 2844 enum "use-interface-address" { 2845 description 2846 "Use interface address as the transport address."; 2847 } 2848 } 2849 type inet:ipv6-address; 2850 } 2851 description 2852 "IP address to be advertised as the LDP transport address."; 2853 } 2854 } // interface-address-family-ipv6-augment 2856 grouping interface-augment { 2857 description "Augmentation to interface."; 2859 uses ldp:basic-discovery-timers { 2860 if-feature per-interface-timer-config; 2861 } 2862 leaf igp-synchronization-delay { 2863 if-feature per-interface-timer-config; 2864 type uint16 { 2865 range 3..60; 2866 } 2867 units seconds; 2868 description 2869 "Sets the interval that the LDP waits before 2870 notifying the Interior Gateway Protocol (IGP) 2871 that label exchange is completed so that IGP 2872 can start advertising the normal metric for 2873 the link."; 2874 } 2875 } // interface-augment 2877 grouping peer-af-policy-container { 2878 description 2879 "LDP policy attribute container under peer address-family."; 2880 container label-policy { 2881 description 2882 "Label policy attributes."; 2883 container advertise { 2884 description 2885 "Label advertising policies."; 2886 leaf prefix-list { 2887 type prefix-list-ref; 2888 description 2889 "Applies the prefix list to outgoing label 2890 advertisements."; 2892 } 2893 } 2894 container accept { 2895 description 2896 "Label advertisement acceptance policies."; 2897 leaf prefix-list { 2898 type prefix-list-ref; 2899 description 2900 "Applies the prefix list to incoming label 2901 advertisements."; 2902 } 2903 } // accept 2904 } // label-policy 2905 } // peer-af-policy-container 2907 grouping peer-augment { 2908 description "Augmentation to each peer list entry."; 2910 leaf admin-down { 2911 type boolean; 2912 default false; 2913 description 2914 "'true' to disable the peer."; 2915 } 2917 uses ldp:graceful-restart-attributes-per-peer { 2918 if-feature per-peer-graceful-restart-config; 2919 } 2921 uses ldp:peer-attributes { 2922 if-feature per-peer-session-attributes-config; 2923 } 2924 } // peer-augment 2926 grouping peers-augment { 2927 description "Augmentation to peers container."; 2929 container session-downstream-on-demand { 2930 if-feature session-downstream-on-demand-config; 2931 description 2932 "Session downstream-on-demand attributes."; 2933 leaf enable { 2934 type boolean; 2935 description 2936 "'true' if session downstream-on-demand is enabled."; 2937 } 2938 leaf peer-list { 2939 type peer-list-ref; 2940 description 2941 "The name of a peer ACL."; 2942 } 2943 } 2944 } // peers-augment 2946 grouping policy-container { 2947 description 2948 "LDP policy attributes."; 2949 container label-policy { 2950 description 2951 "Label policy attributes."; 2952 container advertise { 2953 description 2954 "Label advertising policies."; 2955 container egress-explicit-null { 2956 description 2957 "Enables an egress router to advertise an 2958 explicit null label (value 0) in place of an 2959 implicit null label (value 3) to the 2960 penultimate hop router."; 2961 leaf enable { 2962 type boolean; 2963 description 2964 "'true' to enable explicit null."; 2965 } 2966 } 2967 leaf prefix-list { 2968 type prefix-list-ref; 2969 description 2970 "Applies the prefix list to outgoing label 2971 advertisements."; 2972 } 2973 } // advertise 2974 container accept { 2975 description 2976 "Label advertisement acceptance policies."; 2977 leaf prefix-list { 2978 type prefix-list-ref; 2979 description 2980 "Applies the prefix list to incoming label 2981 advertisements."; 2982 } 2983 } // accept 2984 container assign { 2985 if-feature policy-label-assignment-config; 2986 description 2987 "Label assignment policies"; 2989 container independent-mode { 2990 description 2991 "Independent label policy attributes."; 2992 leaf prefix-list { 2993 type prefix-list-ref; 2994 description 2995 "Assign labels according to certain prefixes."; 2996 } 2997 } // independent-mode 2998 container ordered-mode { 2999 if-feature policy-ordered-label-config; 3000 description 3001 "Ordered label policy attributes."; 3002 leaf egress-prefix-list { 3003 type prefix-list-ref; 3004 description 3005 "Assign labels according to certain prefixes for 3006 egress LSR."; 3007 } 3008 } // ordered-mode 3009 } // assign 3010 } // label-policy 3011 } // policy-container 3013 /* 3014 * Configuration and state data nodes 3015 */ 3016 // Forwarding nexthop augmentation to the global tree 3017 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3018 + "ldp:global" { 3019 description "Graceful forwarding nexthop augmentation."; 3020 uses global-forwarding-nexthop-augment; 3021 } 3023 // global/address-families/ipv6 3024 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3025 + "ldp:global/ldp:address-families" { 3026 description "Global IPv6 augmentation."; 3028 container ipv6 { 3029 presence 3030 "Present if IPv6 is enabled, unless the 'enable' 3031 leaf is set to 'false'"; 3032 description 3033 "IPv6 address family."; 3035 leaf enable { 3036 type boolean; 3037 default true; 3038 description 3039 "'true' to enable the address family."; 3040 } 3042 uses policy-container; 3044 leaf transport-address { 3045 type inet:ipv6-address; 3046 mandatory true; 3047 description 3048 "The transport address advertised in LDP Hello messages."; 3049 } 3051 leaf label-distribution-controlmode { 3052 type enumeration { 3053 enum independent { 3054 description 3055 "Independent label distribution control."; 3056 } 3057 enum ordered { 3058 description 3059 "Ordered Label Distribution Control."; 3060 } 3061 } 3062 config false; 3063 description 3064 "Label distribution control mode."; 3065 reference 3066 "RFC5036: LDP Specification. Sec 2.6."; 3067 } 3069 // ipv6 bindings 3070 container bindings { 3071 config false; 3072 description 3073 "LDP address and label binding information."; 3074 list address { 3075 key "address"; 3076 description 3077 "List of address bindings."; 3078 leaf address { 3079 type inet:ipv6-address; 3080 description 3081 "Binding address."; 3082 } 3083 uses ldp:binding-address-state-attributes; 3084 } // binding-address 3085 list fec-label { 3086 key "fec"; 3087 description 3088 "List of label bindings."; 3089 leaf fec { 3090 type inet:ipv6-prefix; 3091 description 3092 "Prefix FEC."; 3093 } 3094 uses ldp:binding-label-state-attributes; 3095 } // fec-label 3096 } // bindings 3097 } // ipv6 3098 } 3100 // discovery/interfaces/interface/address-families/ipv6 3101 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3102 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3103 + "ldp:address-families" { 3104 description "Interface IPv6 augmentation."; 3106 container ipv6 { 3107 presence 3108 "Present if IPv6 is enabled, unless the 'enable' 3109 leaf is set to 'false'"; 3110 description 3111 "IPv6 address family."; 3113 leaf enable { 3114 type boolean; 3115 default true; 3116 description 3117 "Enable the address family on the interface."; 3118 } 3120 // ipv6 3121 container hello-adjacencies { 3122 config false; 3123 description 3124 "Containing a list of hello adjacencies."; 3126 list hello-adjacency { 3127 key "adjacent-address"; 3128 config false; 3129 description "List of hello adjacencies."; 3131 leaf adjacent-address { 3132 type inet:ipv6-address; 3133 description 3134 "Neighbor address of the hello adjacency."; 3135 } 3137 uses ldp:adjacency-state-attributes; 3139 leaf peer { 3140 type leafref { 3141 path "../../../../../../../../ldp:peers/ldp:peer/" 3142 + "ldp:lsr-id"; 3143 } 3144 description 3145 "LDP peer from this adjacency."; 3146 } 3147 } // hello-adjacency 3148 } // hello-adjacencies 3149 } // ipv6 3150 } 3152 // discovery/targeted/address-families/ipv6 3153 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3154 + "ldp:discovery/ldp:targeted/ldp:address-families" { 3155 description "Targeted discovery IPv6 augmentation."; 3157 container ipv6 { 3158 presence 3159 "Present if IPv6 is enabled."; 3160 description 3161 "IPv6 address family."; 3163 container hello-adjacencies { 3164 config false; 3165 description 3166 "Containing a list of hello adjacencies."; 3168 list hello-adjacency { 3169 key "local-address adjacent-address"; 3170 config false; 3171 description "List of hello adjacencies."; 3173 leaf local-address { 3174 type inet:ipv6-address; 3175 description 3176 "Local address of the hello adjacency."; 3177 } 3178 leaf adjacent-address { 3179 type inet:ipv6-address; 3180 description 3181 "Neighbor address of the hello adjacency."; 3182 } 3184 uses ldp:adjacency-state-attributes; 3186 leaf peer { 3187 type leafref { 3188 path "../../../../../../../ldp:peers/ldp:peer/" 3189 + "ldp:lsr-id"; 3190 } 3191 description 3192 "LDP peer from this adjacency."; 3193 } 3194 } // hello-adjacency 3195 } // hello-adjacencies 3197 list target { 3198 key "adjacent-address"; 3199 description 3200 "Targeted discovery params."; 3202 leaf adjacent-address { 3203 type inet:ipv6-address; 3204 description 3205 "Configures a remote LDP neighbor and enables 3206 extended LDP discovery of the specified 3207 neighbor."; 3208 } 3209 leaf enable { 3210 type boolean; 3211 description 3212 "Enable the target."; 3213 } 3214 leaf local-address { 3215 type inet:ipv6-address; 3216 description 3217 "The local address."; 3218 } 3219 } // target 3220 } // ipv6 3221 } 3223 // /peers/peer/state/address-families/ipv6 3224 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3225 + "ldp:peers/ldp:peer/ldp:address-families" { 3226 description "Peer state IPv6 augmentation."; 3228 container ipv6 { 3229 presence 3230 "Present if IPv6 is enabled."; 3231 description 3232 "IPv6 address family."; 3234 container hello-adjacencies { 3235 config false; 3236 description 3237 "Containing a list of hello adjacencies."; 3239 list hello-adjacency { 3240 key "local-address adjacent-address"; 3241 description "List of hello adjacencies."; 3243 leaf local-address { 3244 type inet:ipv6-address; 3245 description 3246 "Local address of the hello adjacency."; 3247 } 3248 leaf adjacent-address { 3249 type inet:ipv6-address; 3250 description 3251 "Neighbor address of the hello adjacency."; 3252 } 3254 uses ldp:adjacency-state-attributes; 3256 leaf interface { 3257 type if:interface-ref; 3258 description "Interface for this adjacency."; 3259 } 3260 } // hello-adjacency 3261 } // hello-adjacencies 3262 } // ipv6 3263 } 3265 /* 3266 * Configuration data and operational state data nodes 3267 */ 3268 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3269 + "ldp:global" { 3270 description "Graceful restart augmentation."; 3271 uses global-augment; 3272 } 3274 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3275 + "ldp:global/ldp:capability" { 3276 description "Capability augmentation."; 3277 uses capability-augment; 3278 } 3280 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3281 + "ldp:global/ldp:graceful-restart" { 3282 description "Graceful restart augmentation."; 3283 uses graceful-restart-augment; 3284 } 3286 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3287 + "ldp:global/ldp:address-families/ldp:ipv4" { 3288 description "Address family IPv4 augmentation."; 3289 uses address-family-ipv4-augment; 3290 } 3292 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3293 + "ldp:discovery/ldp:interfaces/ldp:interface" { 3294 description "Interface augmentation."; 3295 uses interface-augment; 3296 } 3298 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3299 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3300 + "ldp:address-families/ldp:ipv4" { 3301 description "Interface address family IPv4 augmentation."; 3302 uses interface-address-family-ipv4-augment; 3303 } 3305 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3306 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3307 + "ldp:address-families/ldp-ext:ipv6" { 3308 description "Interface address family IPv6 augmentation."; 3309 uses interface-address-family-ipv6-augment; 3310 } 3312 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3313 + "ldp:discovery/ldp:targeted/ldp:hello-accept" { 3314 description "Targeted discovery augmentation."; 3315 leaf neighbor-list { 3316 if-feature policy-targeted-discovery-config; 3317 type neighbor-list-ref; 3318 description 3319 "The name of a peer ACL."; 3320 } 3321 } 3323 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3324 + "ldp:peers" { 3325 description "Peers augmentation."; 3326 uses peers-augment; 3327 } 3329 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3330 + "ldp:peers/ldp:authentication/ldp:auth-type-selection" { 3331 description "Peers authentication augmentation."; 3332 case auth-key-chain { 3333 uses authentication-keychain-augment; 3334 } 3335 } 3337 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3338 + "ldp:peers/ldp:peer" { 3339 description "Peer list entry augmentation."; 3340 uses peer-augment; 3341 } 3343 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3344 + "ldp:peers/ldp:peer/ldp:authentication/" 3345 + "ldp:auth-type-selection" { 3346 description "Peer list entry authentication augmentation."; 3347 case auth-key-chain { 3348 uses authentication-keychain-augment; 3349 } 3350 } 3352 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3353 + "ldp:peers/ldp:peer/ldp:address-families/ldp:ipv4" { 3354 description 3355 "Peer list entry IPv4 augmentation."; 3356 uses peer-af-policy-container; 3357 } 3359 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3360 + "ldp:peers/ldp:peer/ldp:address-families/ldp-ext:ipv6" { 3361 description 3362 "Peer list entry IPv6 augmentation."; 3363 uses peer-af-policy-container; 3364 } 3365 } 3367 3369 Figure 17 3371 10. Security Considerations 3373 The configuration, state, action and notification data defined using 3374 YANG data models in this document are likely to be accessed via the 3375 protocols such as NETCONF [RFC6241] etc. 3377 Hence, YANG implementations MUST comply with the security 3378 requirements specified in section 15 of [RFC6020]. Additionally, 3379 NETCONF implementations MUST comply with the security requirements 3380 specified in sections 2.2, 2.3 and 9 of [RFC6241] as well as section 3381 3.7 of [RFC6536]. 3383 11. IANA Considerations 3385 This document does not extend LDP base protocol specifiction and 3386 hence there are no IANA considerations. 3388 Note to the RFC Editor: Please remove IANA section before the 3389 publication. 3391 12. Acknowledgments 3393 The authors would like to acknowledge Eddie Chami, Nagendra Kumar, 3394 Mannan Venkatesan, Pavan Beeram for their contribution to this 3395 document. We also acknowledge Ladislav Lhotka for his useful 3396 comments as the YANG Doctor. 3398 13. References 3400 13.1. Normative References 3402 [I-D.ietf-netmod-revised-datastores] 3403 Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 3404 and R. Wilton, "Network Management Datastore 3405 Architecture", draft-ietf-netmod-revised-datastores-06 3406 (work in progress), October 2017. 3408 [I-D.ietf-netmod-rfc6087bis] 3409 Bierman, A., "Guidelines for Authors and Reviewers of YANG 3410 Data Model Documents", draft-ietf-netmod-rfc6087bis-14 3411 (work in progress), September 2017. 3413 [I-D.ietf-rtgwg-ni-model] 3414 Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. 3415 Liu, "YANG Network Instances", draft-ietf-rtgwg-ni- 3416 model-04 (work in progress), September 2017. 3418 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3419 Requirement Levels", BCP 14, RFC 2119, 3420 DOI 10.17487/RFC2119, March 1997, 3421 . 3423 [RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful 3424 Restart Mechanism for Label Distribution Protocol", 3425 RFC 3478, DOI 10.17487/RFC3478, February 2003, 3426 . 3428 [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., 3429 "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, 3430 October 2007, . 3432 [RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream 3433 Label Assignment and Context-Specific Label Space", 3434 RFC 5331, DOI 10.17487/RFC5331, August 2008, 3435 . 3437 [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. 3438 Le Roux, "LDP Capabilities", RFC 5561, 3439 DOI 10.17487/RFC5561, July 2009, 3440 . 3442 [RFC5918] Asati, R., Minei, I., and B. Thomas, "Label Distribution 3443 Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class 3444 (FEC)", RFC 5918, DOI 10.17487/RFC5918, August 2010, 3445 . 3447 [RFC5919] Asati, R., Mohapatra, P., Chen, E., and B. Thomas, 3448 "Signaling LDP Label Advertisement Completion", RFC 5919, 3449 DOI 10.17487/RFC5919, August 2010, 3450 . 3452 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 3453 the Network Configuration Protocol (NETCONF)", RFC 6020, 3454 DOI 10.17487/RFC6020, October 2010, 3455 . 3457 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 3458 and A. Bierman, Ed., "Network Configuration Protocol 3459 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 3460 . 3462 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 3463 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 3464 November 2011, . 3466 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 3467 Protocol (NETCONF) Access Control Model", RFC 6536, 3468 DOI 10.17487/RFC6536, March 2012, 3469 . 3471 [RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. 3472 Papneja, "Updates to LDP for IPv6", RFC 7552, 3473 DOI 10.17487/RFC7552, June 2015, 3474 . 3476 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 3477 Management", RFC 8022, DOI 10.17487/RFC8022, November 3478 2016, . 3480 13.2. Informative References 3482 [I-D.ietf-mpls-mldp-yang] 3483 Raza, K., Krishnaswamy, S., Liu, X., Esale, S., Chen, X., 3484 and J. Tantsura, "YANG Data Model for MPLS mLDP", draft- 3485 ietf-mpls-mldp-yang-02 (work in progress), September 2017. 3487 [I-D.ietf-rtgwg-policy-model] 3488 Shaikh, A., Shakir, R., D'Souza, K., and C. Chase, 3489 "Routing Policy Configuration Model for Service Provider 3490 Networks", draft-ietf-rtgwg-policy-model-01 (work in 3491 progress), April 2016. 3493 [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private 3494 Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February 3495 2006, . 3497 [RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. 3498 King, "LDP Extensions for Multi-Topology", RFC 7307, 3499 DOI 10.17487/RFC7307, July 2014, 3500 . 3502 Appendix A. Additional Contributors 3504 Stephane Litkowski 3505 Orange. E 3506 mail: stephane.litkowski@orange.com 3508 Reshad Rahman 3509 Cisco Systems Inc. 3510 Email: rrahman@cisco.com 3512 Danial Johari 3513 Cisco Systems Inc. 3514 Email: dajohari@cisco.com 3516 Authors' Addresses 3518 Kamran Raza 3519 Cisco Systems, Inc. 3520 Email: skraza@cisco.com 3521 Rajiv Asati 3522 Cisco Systems, Inc. 3523 Email: rajiva@cisco.com 3525 Xufeng Liu 3526 Jabil 3527 Email: xufeng_liu@jabil.com 3529 Jeff Tantsura 3530 Email: jefftant.ietf@gmail.com 3532 Santosh Esale 3533 Juniper Networks 3534 Email: sesale@juniper.net 3536 Xia Chen 3537 Huawei Technologies 3538 Email: jescia.chenxia@huawei.com 3540 Loa Andersson 3541 Huawei Technologies 3542 Email: loa@pi.nu 3544 Himanshu Shah 3545 Ciena Corporation 3546 Email: hshah@ciena.com 3548 Matthew Bocci 3549 Nokia 3550 Email: matthew.bocci@nokia.com