idnits 2.17.1 draft-ietf-mpls-ldp-yang-04.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 44 instances of too long lines in the document, the longest one being 28 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 346 has weird spacing: '...nt-type adv...' == Line 430 has weird spacing: '...address ine...' == Line 487 has weird spacing: '...address ine...' == Line 503 has weird spacing: '...address ine...' == Line 531 has weird spacing: '...address ine...' == (8 more instances...) -- The document date (March 5, 2018) is 2243 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 (-20) exists of draft-ietf-netmod-rfc6087bis-18 == Outdated reference: A later version (-12) exists of draft-ietf-rtgwg-ni-model-11 ** 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-03 == Outdated reference: A later version (-31) exists of draft-ietf-rtgwg-policy-model-02 Summary: 3 errors (**), 0 flaws (~~), 11 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: September 6, 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 March 5, 2018 19 YANG Data Model for MPLS LDP 20 draft-ietf-mpls-ldp-yang-04 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 September 6, 2018. 46 Copyright Notice 48 Copyright (c) 2018 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. Consolidated Tree . . . . . . . . . . . . . . . . . . . . . . 7 68 5. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 16 69 5.1. Configuration Tree . . . . . . . . . . . . . . . . . . . 19 70 5.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 19 71 5.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 20 72 5.2. Configuration Hierarchy . . . . . . . . . . . . . . . . . 23 73 5.2.1. Per-VRF parameters . . . . . . . . . . . . . . . . . 23 74 6. Operational State . . . . . . . . . . . . . . . . . . . . . . 25 75 6.1. Operational Tree . . . . . . . . . . . . . . . . . . . . 25 76 6.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 25 77 6.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 29 78 6.2. States . . . . . . . . . . . . . . . . . . . . . . . . . 31 79 6.2.1. Adjacency state . . . . . . . . . . . . . . . . . . . 31 80 6.2.2. Peer state . . . . . . . . . . . . . . . . . . . . . 32 81 6.2.3. Bindings state . . . . . . . . . . . . . . . . . . . 33 82 6.2.4. Capabilities state . . . . . . . . . . . . . . . . . 35 83 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 35 84 8. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 85 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 37 86 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 37 87 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 65 88 10. Security Considerations . . . . . . . . . . . . . . . . . . . 85 89 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 85 90 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 85 91 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 85 92 13.1. Normative References . . . . . . . . . . . . . . . . . . 85 93 13.2. Informative References . . . . . . . . . . . . . . . . . 87 95 Appendix A. Additional Contributors . . . . . . . . . . . . . . 88 96 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 88 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 5) 182 o Read-only parameters for operational state (Discussed in 183 Section 6) 185 o Notifications for events (Discussed in Section 7) 187 o RPCs for executing commands to perform some action (Discussed in 188 Section 8) 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 tree representation of full LDP YANG data model is 293 presented in Figure 2, whereas LDP configuration (base and extended), 294 state (base and extended), notification, and rpc are grapically 295 represented in Figure 5, Figure 6, Figure 8, Figure 9, Figure 15, and 296 Figure 16 respectively. The actual base and extended model 297 definition in YANG is captured in Section 9. 299 While presenting the YANG tree view and actual .yang specification, 300 this document assumes readers' familiarity with the concepts of YANG 301 modeling, its presentation and its compilation. 303 4. Consolidated Tree 305 Following is a consolidated tree representation of configuration, 306 state, notification, and rpc items under LDP base and extended. 308 module: ietf-mpls-ldp 309 augment /rt:routing/rt:control-plane-protocols: 310 +--rw mpls-ldp! 311 +--rw global 312 | +--rw capability 313 | | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? 314 | | | +--rw ldp-ext:enable? boolean 315 | | +--rw ldp-ext:typed-wildcard-fec 316 | | | {capability-typed-wildcard-fec}? 317 | | | +--rw ldp-ext:enable? boolean 318 | | +--rw ldp-ext:upstream-label-assignment 319 | | {capability-upstream-label-assignment}? 320 | | +--rw ldp-ext:enable? boolean 321 | +--rw graceful-restart 322 | | +--rw enable? boolean 323 | | +--rw reconnect-time? uint16 324 | | +--rw recovery-time? uint16 325 | | +--rw forwarding-holdtime? uint16 326 | | +--rw ldp-ext:helper-enable? boolean 327 | | {graceful-restart-helper-mode}? 328 | +--rw lsr-id? rt-types:router-id 329 | +--rw address-families 330 | | +--rw ipv4! 331 | | | +--rw enable? boolean 332 | | | +--ro label-distribution-controlmode? enumeration 333 | | | +--ro bindings 334 | | | | +--ro address* [address] 335 | | | | | +--ro address inet:ipv4-address 336 | | | | | +--ro advertisement-type? advertised-received 337 | | | | | +--ro peer 338 | | | | | +--ro lsr-id? leafref 339 | | | | | +--ro label-space-id? leafref 340 | | | | +--ro fec-label* [fec] 341 | | | | +--ro fec inet:ipv4-prefix 342 | | | | +--ro peer* 343 | | | | [lsr-id label-space-id advertisement-type] 344 | | | | +--ro lsr-id leafref 345 | | | | +--ro label-space-id leafref 346 | | | | +--ro advertisement-type advertised-received 347 | | | | +--ro label? rt-types:mpls-label 348 | | | | +--ro used-in-forwarding? boolean 349 | | | +--rw ldp-ext:label-policy 350 | | | | +--rw ldp-ext:advertise 351 | | | | | +--rw ldp-ext:egress-explicit-null 352 | | | | | | +--rw ldp-ext:enable? boolean 353 | | | | | +--rw ldp-ext:prefix-list? 354 | | | | | prefix-list-ref 355 | | | | +--rw ldp-ext:accept 356 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 357 | | | | +--rw ldp-ext:assign 358 | | | | {policy-label-assignment-config}? 359 | | | | +--rw ldp-ext:independent-mode 360 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 361 | | | | +--rw ldp-ext:ordered-mode 362 | | | | {policy-ordered-label-config}? 363 | | | | +--rw ldp-ext:egress-prefix-list? 364 | | | | prefix-list-ref 365 | | | +--rw ldp-ext:transport-address? inet:ipv4-address 366 | | +--rw ldp-ext:ipv6! 367 | | +--rw ldp-ext:enable? boolean 368 | | +--rw ldp-ext:label-policy 369 | | | +--rw ldp-ext:advertise 370 | | | | +--rw ldp-ext:egress-explicit-null 371 | | | | | +--rw ldp-ext:enable? boolean 372 | | | | +--rw ldp-ext:prefix-list? 373 | | | | prefix-list-ref 374 | | | +--rw ldp-ext:accept 375 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 376 | | | +--rw ldp-ext:assign 377 | | | {policy-label-assignment-config}? 378 | | | +--rw ldp-ext:independent-mode 379 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 380 | | | +--rw ldp-ext:ordered-mode 381 | | | {policy-ordered-label-config}? 382 | | | +--rw ldp-ext:egress-prefix-list? 383 | | | prefix-list-ref 384 | | +--rw ldp-ext:transport-address 385 | | | inet:ipv6-address 386 | | +--ro ldp-ext:label-distribution-controlmode? 387 | | | enumeration 388 | | +--ro ldp-ext:bindings 389 | | +--ro ldp-ext:address* [address] 390 | | | +--ro ldp-ext:address 391 | | | | inet:ipv6-address 392 | | | +--ro ldp-ext:advertisement-type? 393 | | | | advertised-received 394 | | | +--ro ldp-ext:peer 395 | | | +--ro ldp-ext:lsr-id? leafref 396 | | | +--ro ldp-ext:label-space-id? leafref 397 | | +--ro ldp-ext:fec-label* [fec] 398 | | +--ro ldp-ext:fec inet:ipv6-prefix 399 | | +--ro ldp-ext:peer* 400 | | [lsr-id label-space-id advertisement-type] 401 | | +--ro ldp-ext:lsr-id leafref 402 | | +--ro ldp-ext:label-space-id leafref 403 | | +--ro ldp-ext:advertisement-type 404 | | | advertised-received 405 | | +--ro ldp-ext:label? 406 | | | rt-types:mpls-label 407 | | +--ro ldp-ext:used-in-forwarding? boolean 408 | +--rw ldp-ext:forwarding-nexthop 409 | | {forwarding-nexthop-config}? 410 | | +--rw ldp-ext:interfaces 411 | | +--rw ldp-ext:interface* [name] 412 | | +--rw ldp-ext:name if:interface-ref 413 | | +--rw ldp-ext:address-family* [afi] 414 | | +--rw ldp-ext:afi ldp:ldp-address-family 415 | | +--rw ldp-ext:ldp-disable? boolean 416 | +--rw ldp-ext:igp-synchronization-delay? uint16 417 +--rw discovery 418 | +--rw interfaces 419 | | +--rw hello-holdtime? uint16 420 | | +--rw hello-interval? uint16 421 | | +--rw interface* [name] 422 | | +--rw name 423 | | | if:interface-ref 424 | | +--ro next-hello? uint16 425 | | +--rw address-families 426 | | | +--rw ipv4! 427 | | | | +--rw enable? boolean 428 | | | | +--ro hello-adjacencies 429 | | | | | +--ro hello-adjacency* [adjacent-address] 430 | | | | | +--ro adjacent-address inet:ipv4-address 431 | | | | | +--ro flag* identityref 432 | | | | | +--ro hello-holdtime 433 | | | | | | +--ro adjacent? uint16 434 | | | | | | +--ro negotiated? uint16 435 | | | | | | +--ro remaining? uint16 436 | | | | | +--ro next-hello? uint16 437 | | | | | +--ro statistics 438 | | | | | | +--ro discontinuity-time 439 | | | | | | | yang:date-and-time 440 | | | | | | +--ro hello-received? yang:counter64 441 | | | | | | +--ro hello-dropped? yang:counter64 442 | | | | | +--ro peer 443 | | | | | +--ro lsr-id? leafref 444 | | | | | +--ro label-space-id? leafref 445 | | | | +--rw ldp-ext:transport-address? union 446 | | | +--rw ldp-ext:ipv6! 447 | | | +--rw ldp-ext:enable? boolean 448 | | | +--ro ldp-ext:hello-adjacencies 449 | | | | +--ro ldp-ext:hello-adjacency* 450 | | | | [adjacent-address] 451 | | | | +--ro ldp-ext:adjacent-address 452 | | | | | inet:ipv6-address 453 | | | | +--ro ldp-ext:flag* identityref 454 | | | | +--ro ldp-ext:hello-holdtime 455 | | | | | +--ro ldp-ext:adjacent? uint16 456 | | | | | +--ro ldp-ext:negotiated? uint16 457 | | | | | +--ro ldp-ext:remaining? uint16 458 | | | | +--ro ldp-ext:next-hello? uint16 459 | | | | +--ro ldp-ext:statistics 460 | | | | | +--ro ldp-ext:discontinuity-time 461 | | | | | | yang:date-and-time 462 | | | | | +--ro ldp-ext:hello-received? 463 | | | | | | yang:counter64 464 | | | | | +--ro ldp-ext:hello-dropped? 465 | | | | | yang:counter64 466 | | | | +--ro ldp-ext:peer 467 | | | | +--ro ldp-ext:lsr-id? leafref 468 | | | | +--ro ldp-ext:label-space-id? leafref 469 | | | +--rw ldp-ext:transport-address? union 470 | | +--rw ldp-ext:hello-holdtime? uint16 471 | | +--rw ldp-ext:hello-interval? uint16 472 | | +--rw ldp-ext:igp-synchronization-delay? uint16 473 | | {per-interface-timer-config}? 474 | +--rw targeted 475 | +--rw hello-holdtime? uint16 476 | +--rw hello-interval? uint16 477 | +--rw hello-accept 478 | | +--rw enable? boolean 479 | | +--rw ldp-ext:neighbor-list? neighbor-list-ref 480 | | {policy-targeted-discovery-config}? 481 | +--rw address-families 482 | +--rw ipv4! 483 | | +--ro hello-adjacencies 484 | | | +--ro hello-adjacency* 485 | | | [local-address adjacent-address] 486 | | | +--ro local-address inet:ipv4-address 487 | | | +--ro adjacent-address inet:ipv4-address 488 | | | +--ro flag* identityref 489 | | | +--ro hello-holdtime 490 | | | | +--ro adjacent? uint16 491 | | | | +--ro negotiated? uint16 492 | | | | +--ro remaining? uint16 493 | | | +--ro next-hello? uint16 494 | | | +--ro statistics 495 | | | | +--ro discontinuity-time 496 | | | | | yang:date-and-time 497 | | | | +--ro hello-received? yang:counter64 498 | | | | +--ro hello-dropped? yang:counter64 499 | | | +--ro peer 500 | | | +--ro lsr-id? leafref 501 | | | +--ro label-space-id? leafref 502 | | +--rw target* [adjacent-address] 503 | | +--rw adjacent-address inet:ipv4-address 504 | | +--rw enable? boolean 505 | | +--rw local-address? inet:ipv4-address 506 | +--rw ldp-ext:ipv6! 507 | +--ro ldp-ext:hello-adjacencies 508 | | +--ro ldp-ext:hello-adjacency* 509 | | [local-address adjacent-address] 510 | | +--ro ldp-ext:local-address 511 | | | inet:ipv6-address 512 | | +--ro ldp-ext:adjacent-address 513 | | | inet:ipv6-address 514 | | +--ro ldp-ext:flag* identityref 515 | | +--ro ldp-ext:hello-holdtime 516 | | | +--ro ldp-ext:adjacent? uint16 517 | | | +--ro ldp-ext:negotiated? uint16 518 | | | +--ro ldp-ext:remaining? uint16 519 | | +--ro ldp-ext:next-hello? uint16 520 | | +--ro ldp-ext:statistics 521 | | | +--ro ldp-ext:discontinuity-time 522 | | | | yang:date-and-time 523 | | | +--ro ldp-ext:hello-received? 524 | | | | yang:counter64 525 | | | +--ro ldp-ext:hello-dropped? 526 | | | yang:counter64 527 | | +--ro ldp-ext:peer 528 | | +--ro ldp-ext:lsr-id? leafref 529 | | +--ro ldp-ext:label-space-id? leafref 530 | +--rw ldp-ext:target* [adjacent-address] 531 | +--rw ldp-ext:adjacent-address inet:ipv6-address 532 | +--rw ldp-ext:enable? boolean 533 | +--rw ldp-ext:local-address? inet:ipv6-address 534 +--rw peers 535 +--rw authentication 536 | +--rw (auth-type-selection)? 537 | +--:(auth-key) 538 | | +--rw md5-key? string 539 | +--:(ldp-ext:auth-key-chain) {key-chain}? 540 | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 541 +--rw session-ka-holdtime? uint16 542 +--rw session-ka-interval? uint16 543 +--rw peer* [lsr-id label-space-id] 544 | +--rw lsr-id rt-types:router-id 545 | +--rw label-space-id uint16 546 | +--rw authentication 547 | | +--rw (auth-type-selection)? 548 | | +--:(auth-key) 549 | | | +--rw md5-key? string 550 | | +--:(ldp-ext:auth-key-chain) {key-chain}? 551 | | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 552 | +--rw capability 553 | +--rw address-families 554 | | +--rw ipv4! 555 | | | +--ro hello-adjacencies 556 | | | | +--ro hello-adjacency* 557 | | | | [local-address adjacent-address] 558 | | | | +--ro local-address inet:ipv4-address 559 | | | | +--ro adjacent-address inet:ipv4-address 560 | | | | +--ro flag* identityref 561 | | | | +--ro hello-holdtime 562 | | | | | +--ro adjacent? uint16 563 | | | | | +--ro negotiated? uint16 564 | | | | | +--ro remaining? uint16 565 | | | | +--ro next-hello? uint16 566 | | | | +--ro statistics 567 | | | | | +--ro discontinuity-time 568 | | | | | | yang:date-and-time 569 | | | | | +--ro hello-received? yang:counter64 570 | | | | | +--ro hello-dropped? yang:counter64 571 | | | | +--ro interface? if:interface-ref 572 | | | +--rw ldp-ext:label-policy 573 | | | +--rw ldp-ext:advertise 574 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 575 | | | +--rw ldp-ext:accept 576 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 577 | | +--rw ldp-ext:ipv6! 578 | | +--ro ldp-ext:hello-adjacencies 579 | | | +--ro ldp-ext:hello-adjacency* 580 | | | [local-address adjacent-address] 581 | | | +--ro ldp-ext:local-address 582 | | | | inet:ipv6-address 583 | | | +--ro ldp-ext:adjacent-address 584 | | | | inet:ipv6-address 585 | | | +--ro ldp-ext:flag* identityref 586 | | | +--ro ldp-ext:hello-holdtime 587 | | | | +--ro ldp-ext:adjacent? uint16 588 | | | | +--ro ldp-ext:negotiated? uint16 589 | | | | +--ro ldp-ext:remaining? uint16 590 | | | +--ro ldp-ext:next-hello? uint16 591 | | | +--ro ldp-ext:statistics 592 | | | | +--ro ldp-ext:discontinuity-time 593 | | | | | yang:date-and-time 594 | | | | +--ro ldp-ext:hello-received? 595 | | | | | yang:counter64 596 | | | | +--ro ldp-ext:hello-dropped? 597 | | | | yang:counter64 598 | | | +--ro ldp-ext:interface? 599 | | | if:interface-ref 600 | | +--rw ldp-ext:label-policy 601 | | +--rw ldp-ext:advertise 602 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 603 | | +--rw ldp-ext:accept 604 | | +--rw ldp-ext:prefix-list? prefix-list-ref 605 | +--ro label-advertisement-mode 606 | | +--ro local? label-adv-mode 607 | | +--ro peer? label-adv-mode 608 | | +--ro negotiated? label-adv-mode 609 | +--ro next-keep-alive? uint16 610 | +--ro received-peer-state 611 | | +--ro graceful-restart 612 | | | +--ro enable? boolean 613 | | | +--ro reconnect-time? uint16 614 | | | +--ro recovery-time? uint16 615 | | +--ro capability 616 | | +--ro end-of-lib 617 | | | +--ro enable? boolean 618 | | +--ro typed-wildcard-fec 619 | | | +--ro enable? boolean 620 | | +--ro upstream-label-assignment 621 | | +--ro enable? boolean 622 | +--ro session-holdtime 623 | | +--ro peer? uint16 624 | | +--ro negotiated? uint16 625 | | +--ro remaining? uint16 626 | +--ro session-state? enumeration 627 | +--ro tcp-connection 628 | | +--ro local-address? inet:ip-address 629 | | +--ro local-port? inet:port-number 630 | | +--ro remote-address? inet:ip-address 631 | | +--ro remote-port? inet:port-number 632 | +--ro up-time? string 633 | +--ro statistics 634 | | +--ro discontinuity-time yang:date-and-time 635 | | +--ro received 636 | | | +--ro total-octets? yang:counter64 637 | | | +--ro total-messages? yang:counter64 638 | | | +--ro address? yang:counter64 639 | | | +--ro address-withdraw? yang:counter64 640 | | | +--ro initialization? yang:counter64 641 | | | +--ro keepalive? yang:counter64 642 | | | +--ro label-abort-request? yang:counter64 643 | | | +--ro label-mapping? yang:counter64 644 | | | +--ro label-release? yang:counter64 645 | | | +--ro label-request? yang:counter64 646 | | | +--ro label-withdraw? yang:counter64 647 | | | +--ro notification? yang:counter64 648 | | +--ro sent 649 | | | +--ro total-octets? yang:counter64 650 | | | +--ro total-messages? yang:counter64 651 | | | +--ro address? yang:counter64 652 | | | +--ro address-withdraw? yang:counter64 653 | | | +--ro initialization? yang:counter64 654 | | | +--ro keepalive? yang:counter64 655 | | | +--ro label-abort-request? yang:counter64 656 | | | +--ro label-mapping? yang:counter64 657 | | | +--ro label-release? yang:counter64 658 | | | +--ro label-request? yang:counter64 659 | | | +--ro label-withdraw? yang:counter64 660 | | | +--ro notification? yang:counter64 661 | | +--ro total-addresses? uint32 662 | | +--ro total-labels? uint32 663 | | +--ro total-fec-label-bindings? uint32 664 | +--rw ldp-ext:admin-down? boolean 665 | | {per-peer-admin-down}? 666 | +--rw ldp-ext:graceful-restart 667 | | +--rw ldp-ext:enable? boolean 668 | | +--rw ldp-ext:reconnect-time? uint16 669 | | +--rw ldp-ext:recovery-time? uint16 670 | +--rw ldp-ext:session-ka-holdtime? uint16 671 | +--rw ldp-ext:session-ka-interval? uint16 672 +--rw ldp-ext:session-downstream-on-demand 673 | {session-downstream-on-demand-config}? 674 | +--rw ldp-ext:enable? boolean 675 | +--rw ldp-ext:peer-list? peer-list-ref 676 +--rw ldp-ext:dual-stack-transport-pereference {dual-stack-transport-pereference}? 677 +--rw ldp-ext:max-wait? uint16 678 +--rw ldp-ext:prefer-ipv4! 679 +--rw ldp-ext:peer-list? peer-list-ref 681 rpcs: 682 +---x mpls-ldp-clear-peer 683 | +---w input 684 | +---w lsr-id? leafref 685 | +---w label-space-id? leafref 686 +---x mpls-ldp-clear-hello-adjacency 687 | +---w input 688 | +---w hello-adjacency 689 | +---w (hello-adjacency-type)? 690 | +--:(targeted) 691 | | +---w targeted! 692 | | +---w target-address? inet:ip-address 693 | +--:(link) 694 | +---w link! 695 | +---w next-hop-interface? leafref 696 | +---w next-hop-address? inet:ip-address 697 +---x mpls-ldp-clear-peer-statistics 698 +---w input 699 +---w lsr-id? leafref 700 +---w label-space-id? leafref 702 notifications: 703 +---n mpls-ldp-peer-event 704 | +--ro event-type? oper-status-event-type 705 | +--ro peer 706 | +--ro lsr-id? leafref 707 | +--ro label-space-id? leafref 708 +---n mpls-ldp-hello-adjacency-event 709 | +--ro event-type? oper-status-event-type 710 | +--ro (hello-adjacency-type)? 711 | +--:(targeted) 712 | | +--ro targeted 713 | | +--ro target-address? inet:ip-address 714 | +--:(link) 715 | +--ro link 716 | +--ro next-hop-interface? if:interface-ref 717 | +--ro next-hop-address? inet:ip-address 718 +---n mpls-ldp-fec-event 719 +--ro event-type? oper-status-event-type 720 +--ro prefix? inet:ip-prefix 722 Figure 2 724 5. Configuration 726 This specification defines the configuration parameters for base LDP 727 as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it 728 incorporates provisions to enable LDP Capabilities [RFC5561], and 729 defines some of the most significant and commonly used capabilities 730 such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP 731 Upstream Label Assignment [RFC6389]. 733 This model augments /rt:routing/rt:control-plane-protocols that is 734 defined in [RFC8022] and follows NMDA as mentioned earlier. 736 Following is the high-level configuration organization for base LDP: 738 augment /rt:routing/rt:control-plane-protocols: 739 +-- mpls-ldp 740 +-- global 741 | +-- ... 742 | +-- ... 743 | +-- address-families 744 | | +-- ipv4 745 | | +-- . . . 746 | | +-- . . . 747 | +-- capability 748 | +-- ... 749 | +-- ... 750 +-- discovery 751 | +-- interfaces 752 | | +-- ... 753 | | +-- ... 754 | | +-- interface* [interface] 755 | | +-- ... 756 | | +-- address-families 757 | | +-- ipv4 758 | | +-- ... 759 | | +-- ... 760 | +-- targeteted 761 | +-- ... 762 | +-- address-families 763 | +-- ipv4 764 | +- target* [adjacent-address] 765 | +- ... 766 | +- ... 767 +-- peers 768 +-- ... 769 +-- ... 770 +-- peer* [lsr-id label-space-id] 771 +-- ... 772 +-- ... 774 Figure 3 776 Following is the high-level configuration organization for extended 777 LDP: 779 augment /rt:routing/rt:control-plane-protocols: 780 +-- mpls-ldp 781 +-- global 782 | +-- ... 783 | +-- ... 785 | +-- address-families 786 | | +-- ipv4 787 | | | +-- . . . 788 | | | +-- . . . 789 | | | +-- label-policy 790 | | | +-- ... 791 | | | +-- ... 792 | | +-- ipv6 793 | | +-- . . . 794 | | +-- . . . 795 | | +-- label-policy 796 | | +-- ... 797 | | +-- ... 798 | +-- capability 799 | | +-- ... 800 | | +-- ... 801 | +-- discovery 802 | +-- interfaces 803 | | +-- ... 804 | | +-- ... 805 | | +-- interface* [interface] 806 | | +-- ... 807 | | +-- address-families 808 | | +-- ipv4 809 | | | +-- ... 810 | | | +-- ... 811 | | +-- ipv6 812 | | +-- ... 813 | | +-- ... 814 | +-- targeteted 815 | +-- ... 816 | +-- address-families 817 | +-- ipv6 818 | +- target* [adjacent-address] 819 | +- ... 820 | +- ... 821 +-- forwarding-nexthop 822 | +-- ... 823 | +-- ... 824 +-- peers 825 +-- ... 826 +-- ... 827 +-- peer* 828 +-- ... 829 +-- ... 830 +-- label-policy 831 | +-- .. 832 +-- address-families 833 +-- ipv4 834 | +-- ... 835 +-- ipv6 836 +-- ... 838 Figure 4 840 Given the configuration hierarchy, the model allows inheritance such 841 that an item in a child tree is able to derive value from a similar 842 or related item in one of the parent. For instance, hello holdtime 843 can be configured per-VRF or per-VRF-interface, thus allowing 844 inheritance as well flexibility to override with a different value at 845 any child level. 847 5.1. Configuration Tree 849 5.1.1. Base 851 Following is a simplified graphical representation of the data model 852 for LDP base configuration 854 module: ietf-mpls-ldp 855 augment /rt:routing/rt:control-plane-protocols: 856 +--rw mpls-ldp! 857 +--rw global 858 | +--rw graceful-restart 859 | | +--rw enable? boolean 860 | | +--rw reconnect-time? uint16 861 | | +--rw recovery-time? uint16 862 | | +--rw forwarding-holdtime? uint16 863 | +--rw lsr-id? rt-types:router-id 864 | +--rw address-families 865 | +--rw ipv4! 866 | +--rw enable? boolean 867 +--rw discovery 868 | +--rw interfaces 869 | | +--rw hello-holdtime? uint16 870 | | +--rw hello-interval? uint16 871 | | +--rw interface* [name] 872 | | +--rw name if:interface-ref 873 | | +--rw address-families 874 | | +--rw ipv4! 875 | | +--rw enable? boolean 876 | +--rw targeted 877 | +--rw hello-holdtime? uint16 878 | +--rw hello-interval? uint16 879 | +--rw hello-accept 880 | | +--rw enable? boolean 881 | +--rw address-families 882 | +--rw ipv4! 883 | +--rw target* [adjacent-address] 884 | +--rw adjacent-address inet:ipv4-address 885 | +--rw enable? boolean 886 | +--rw local-address? inet:ipv4-address 887 +--rw peers 888 +--rw authentication 889 | +--rw (auth-type-selection)? 890 | +--:(auth-key) 891 | +--rw md5-key? string 892 +--rw session-ka-holdtime? uint16 893 +--rw session-ka-interval? uint16 894 +--rw peer* [lsr-id label-space-id] 895 +--rw lsr-id rt-types:router-id 896 +--rw label-space-id uint16 897 +--rw authentication 898 +--rw (auth-type-selection)? 899 +--:(auth-key) 900 +--rw md5-key? string 902 Figure 5 904 5.1.2. Extended 906 Following is a simplified graphical representation of the data model 907 for LDP extended configuration 909 module: ietf-mpls-ldp 910 augment /rt:routing/rt:control-plane-protocols: 911 +--rw mpls-ldp! 912 +--rw global 913 | +--rw capability 914 | | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? 915 | | | +--rw ldp-ext:enable? boolean 916 | | +--rw ldp-ext:typed-wildcard-fec {capability-typed-wildcard-fec}? 917 | | | +--rw ldp-ext:enable? boolean 918 | | +--rw ldp-ext:upstream-label-assignment {capability-upstream-label-assignment}? 919 | | +--rw ldp-ext:enable? boolean 920 | +--rw graceful-restart 921 | | +--rw ldp-ext:helper-enable? boolean {graceful-restart-helper-mode}? 922 | +--rw address-families 923 | | +--rw ipv4! 924 | | | +--rw ldp-ext:label-policy 925 | | | | +--rw ldp-ext:advertise 926 | | | | | +--rw ldp-ext:egress-explicit-null 927 | | | | | | +--rw ldp-ext:enable? boolean 928 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 929 | | | | +--rw ldp-ext:accept 930 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 931 | | | | +--rw ldp-ext:assign {policy-label-assignment-config}? 932 | | | | +--rw ldp-ext:independent-mode 933 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 934 | | | | +--rw ldp-ext:ordered-mode {policy-ordered-label-config}? 935 | | | | +--rw ldp-ext:egress-prefix-list? prefix-list-ref 936 | | | +--rw ldp-ext:transport-address? inet:ipv4-address 937 | | +--rw ldp-ext:ipv6! 938 | | +--rw ldp-ext:enable? boolean 939 | | +--rw ldp-ext:label-policy 940 | | | +--rw ldp-ext:advertise 941 | | | | +--rw ldp-ext:egress-explicit-null 942 | | | | | +--rw ldp-ext:enable? boolean 943 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 944 | | | +--rw ldp-ext:accept 945 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 946 | | | +--rw ldp-ext:assign {policy-label-assignment-config}? 947 | | | +--rw ldp-ext:independent-mode 948 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 949 | | | +--rw ldp-ext:ordered-mode {policy-ordered-label-config}? 950 | | | +--rw ldp-ext:egress-prefix-list? prefix-list-ref 951 | | +--rw ldp-ext:transport-address inet:ipv6-address 952 | +--rw ldp-ext:forwarding-nexthop {forwarding-nexthop-config}? 953 | | +--rw ldp-ext:interfaces 954 | | +--rw ldp-ext:interface* [name] 955 | | +--rw ldp-ext:name if:interface-ref 956 | | +--rw ldp-ext:address-family* [afi] 957 | | +--rw ldp-ext:afi ldp:ldp-address-family 958 | | +--rw ldp-ext:ldp-disable? boolean 959 | +--rw ldp-ext:igp-synchronization-delay? uint16 960 +--rw discovery 961 | +--rw interfaces 962 | | +--rw interface* [name] 963 | | +--rw name if:interface-ref 964 | | +--rw address-families 965 | | | +--rw ipv4! 966 | | | | +--rw ldp-ext:transport-address? union 967 | | | +--rw ldp-ext:ipv6! 968 | | | +--rw ldp-ext:enable? boolean 969 | | | +--rw ldp-ext:transport-address? union 970 | | +--rw ldp-ext:hello-holdtime? uint16 971 | | +--rw ldp-ext:hello-interval? uint16 972 | | +--rw ldp-ext:igp-synchronization-delay? uint16 {per-interface-timer-config}? 973 | +--rw targeted 974 | +--rw hello-accept 975 | | +--rw ldp-ext:neighbor-list? neighbor-list-ref {policy-targeted-discovery-config}? 976 | +--rw address-families 977 | +--rw ldp-ext:ipv6! 978 | +--rw ldp-ext:target* [adjacent-address] 979 | +--rw ldp-ext:adjacent-address inet:ipv6-address 980 | +--rw ldp-ext:enable? boolean 981 | +--rw ldp-ext:local-address? inet:ipv6-address 982 +--rw peers 983 +--rw authentication 984 | +--rw (auth-type-selection)? 985 | +--:(ldp-ext:auth-key-chain) {key-chain}? 986 | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 987 +--rw peer* [lsr-id label-space-id] 988 | +--rw lsr-id rt-types:router-id 989 | +--rw label-space-id uint16 990 | +--rw authentication 991 | | +--rw (auth-type-selection)? 992 | | +--:(ldp-ext:auth-key-chain) {key-chain}? 993 | | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 994 | +--rw address-families 995 | | +--rw ipv4! 996 | | | +--rw ldp-ext:label-policy 997 | | | +--rw ldp-ext:advertise 998 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 999 | | | +--rw ldp-ext:accept 1000 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 1001 | | +--rw ldp-ext:ipv6! 1002 | | +--rw ldp-ext:label-policy 1003 | | +--rw ldp-ext:advertise 1004 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 1005 | | +--rw ldp-ext:accept 1006 | | +--rw ldp-ext:prefix-list? prefix-list-ref 1007 | +--rw ldp-ext:admin-down? boolean {per-peer-admin-down}? 1008 | +--rw ldp-ext:graceful-restart 1009 | | +--rw ldp-ext:enable? boolean 1010 | | +--rw ldp-ext:reconnect-time? uint16 1011 | | +--rw ldp-ext:recovery-time? uint16 1012 | +--rw ldp-ext:session-ka-holdtime? uint16 1013 | +--rw ldp-ext:session-ka-interval? uint16 1014 +--rw ldp-ext:session-downstream-on-demand {session-downstream-on-demand-config}? 1015 | +--rw ldp-ext:enable? boolean 1016 | +--rw ldp-ext:peer-list? peer-list-ref 1017 +--rw ldp-ext:dual-stack-transport-pereference {dual-stack-transport-pereference}? 1018 +--rw ldp-ext:max-wait? uint16 1019 +--rw ldp-ext:prefer-ipv4! 1020 +--rw ldp-ext:peer-list? peer-list-ref 1022 Figure 6 1024 5.2. Configuration Hierarchy 1026 The LDP configuration container is logically divided into following 1027 high-level config areas: 1029 Per-VRF parameters 1030 o Global parameters 1031 o Per-address-family parameters 1032 o LDP Capabilities parameters 1033 o Hello Discovery parameters 1034 - interfaces 1035 - Per-interface: 1036 Global 1037 Per-address-family 1038 - targeted 1039 - Per-target 1040 o Peer parameters 1041 - Global 1042 - Per-peer 1043 Per-address-family 1045 o Forwarding parameters 1047 Figure 7 1049 Following subsections briefly explain these configuration areas. 1051 5.2.1. Per-VRF parameters 1053 LDP module resides under an network-instance and the scope of any LDP 1054 configuration defined under this tree is per network-instance (per- 1055 VRF). This configuration is further divided into sub categories as 1056 follows. 1058 5.2.1.1. Per-VRF global parameters 1060 There are configuration items that are available directly under a VRF 1061 instance and do not fall under any other sub tree. Example of such a 1062 parameter is LDP LSR id that is typically configured per VRF. To 1063 keep legacy LDP features and applications working in an LDP IPv4 1064 networks with this model, this document recommends an operator to 1065 pick a routable IPv4 unicast address as an LSR Id. 1067 5.2.1.2. Per-VRF Capabilities parameters 1069 This container falls under global tree and holds the LDP capabilities 1070 that are to be enabled for certain features. By default, an LDP 1071 capability is disabled unless explicitly enabled. These capabilities 1072 are typically used to negotiate with LDP peer(s) the support/non- 1073 support related to a feature and its parameters. The scope of a 1074 capability enabled under this container applies to all LDP peers in 1075 the given VRF instance. There is also a peer level capability 1076 container that is provided to override a capability that is enabled/ 1077 specified at VRF level. 1079 5.2.1.3. Per-VRF Per-Address-Family parameters 1081 Any LDP configuration parameter related to IP address family (AF) 1082 whose scope is VRF wide is configured under this tree. The examples 1083 of per-AF parameters include enabling LDP for an address family, 1084 prefix-list based label policies, and LDP transport address. 1086 5.2.1.4. Per-VRF Hello Discovery parameters 1088 This container is used to hold LDP configuration related to Hello and 1089 discovery process for both basic (link) and extended (targeted) 1090 discovery. 1092 The "interfaces" is a container to configure parameters related to 1093 VRF interfaces. There are parameters that apply to all interfaces 1094 (such as hello timers), as well as parameters that can be configured 1095 per-interface. Hence, an interface list is defined under 1096 "interfaces" container. The model defines parameters to configure 1097 per-interface non AF related items, as well as per-interface per-AF 1098 items. The example of former is interface hello timers, and example 1099 of latter is enabling hellos for a given AF under an interface. 1101 The "targeted" container under a VRF instance allows to configure LDP 1102 targeted discovery related parameters. Within this container, the 1103 "target" list provides a mean to configure multiple target addresses 1104 to perform extended discovery to a specific destination target, as 1105 well as to fine-tune the per-target parameters. 1107 5.2.1.5. Per-VRF Peer parameters 1109 This container is used to hold LDP configuration related to LDP 1110 sessions and peers under a VRF instance. This container allows to 1111 configure parameters that either apply on VRF's all peers or a subset 1112 (peer-list) of VRF peers. The example of such parameters include 1113 authentication password, session KA timers etc. Moreover, the model 1114 also allows per-peer parameter tuning by specifying a "peer" list 1115 under the "peers" container. A peer is uniquely identified using its 1116 LSR Id and hence LSR Id is the key for peer list 1118 Like per-interface parameters, some per-peer parameters are AF- 1119 agnostic (i.e. either non AF related or apply to both IP address 1120 families), and some that belong to an AF. The example of former is 1121 per-peer session password configuration, whereas the example of 1122 latter is prefix-list based label policies (inbound and outbound) 1123 that apply to a given peer. 1125 5.2.1.6. Per-VRF Forwarding parameters 1127 This container is used to hold configuration used to control LDP 1128 forwarding behavior under a VRF instance. One example of a 1129 configuration under this container is when a user wishes to enable 1130 neighbor discovery on an interface but wishes to disable use of the 1131 same interface as forwarding nexthop. This example configuration 1132 makes sense only when there are more than one LDP enabled interfaces 1133 towards the neighbor. 1135 6. Operational State 1137 Operational state of LDP can be queried and obtained from read-only 1138 state containers that fall under the same tree (/rt:routing/ 1139 rt:control-plane-protocols/) as the configuration. 1141 6.1. Operational Tree 1143 6.1.1. Base 1145 Following is a simplified graphical representation of the base data 1146 model for LDP operational state. 1148 module: ietf-mpls-ldp 1149 augment /rt:routing/rt:control-plane-protocols: 1150 +--rw mpls-ldp! 1151 +--rw global 1152 | +--rw address-families 1153 | +--rw ipv4! 1154 | +--ro label-distribution-controlmode? enumeration 1155 | +--ro bindings 1156 | +--ro address* [address] 1157 | | +--ro address inet:ipv4-address 1158 | | +--ro advertisement-type? advertised-received 1159 | | +--ro peer 1160 | | +--ro lsr-id? leafref 1161 | | +--ro label-space-id? leafref 1162 | +--ro fec-label* [fec] 1163 | +--ro fec inet:ipv4-prefix 1164 | +--ro peer* 1165 | [lsr-id label-space-id advertisement-type] 1166 | +--ro lsr-id leafref 1167 | +--ro label-space-id leafref 1168 | +--ro advertisement-type advertised-received 1169 | +--ro label? rt-types:mpls-label 1170 | +--ro used-in-forwarding? boolean 1171 +--rw discovery 1172 | +--rw interfaces 1173 | | +--rw interface* [name] 1174 | | +--rw name if:interface-ref 1175 | | +--ro next-hello? uint16 1176 | | +--rw address-families 1177 | | +--rw ipv4! 1178 | | +--ro hello-adjacencies 1179 | | +--ro hello-adjacency* [adjacent-address] 1180 | | +--ro adjacent-address inet:ipv4-address 1181 | | +--ro flag* identityref 1182 | | +--ro hello-holdtime 1183 | | | +--ro adjacent? uint16 1184 | | | +--ro negotiated? uint16 1185 | | | +--ro remaining? uint16 1186 | | +--ro next-hello? uint16 1187 | | +--ro statistics 1188 | | | +--ro discontinuity-time 1189 | | | | yang:date-and-time 1190 | | | +--ro hello-received? yang:counter64 1191 | | | +--ro hello-dropped? yang:counter64 1192 | | +--ro peer 1193 | | +--ro lsr-id? leafref 1194 | | +--ro label-space-id? leafref 1195 | +--rw targeted 1196 | +--rw address-families 1197 | +--rw ipv4! 1198 | +--ro hello-adjacencies 1199 | +--ro hello-adjacency* 1200 | [local-address adjacent-address] 1201 | +--ro local-address inet:ipv4-address 1202 | +--ro adjacent-address inet:ipv4-address 1203 | +--ro flag* identityref 1204 | +--ro hello-holdtime 1205 | | +--ro adjacent? uint16 1206 | | +--ro negotiated? uint16 1207 | | +--ro remaining? uint16 1208 | +--ro next-hello? uint16 1209 | +--ro statistics 1210 | | +--ro discontinuity-time 1211 | | | yang:date-and-time 1212 | | +--ro hello-received? yang:counter64 1213 | | +--ro hello-dropped? yang:counter64 1214 | +--ro peer 1215 | +--ro lsr-id? leafref 1216 | +--ro label-space-id? leafref 1217 +--rw peers 1218 +--rw peer* [lsr-id label-space-id] 1219 +--rw lsr-id rt-types:router-id 1220 +--rw label-space-id uint16 1221 +--rw address-families 1222 | +--rw ipv4! 1223 | +--ro hello-adjacencies 1224 | +--ro hello-adjacency* 1225 | [local-address adjacent-address] 1226 | +--ro local-address inet:ipv4-address 1227 | +--ro adjacent-address inet:ipv4-address 1228 | +--ro flag* identityref 1229 | +--ro hello-holdtime 1230 | | +--ro adjacent? uint16 1231 | | +--ro negotiated? uint16 1232 | | +--ro remaining? uint16 1233 | +--ro next-hello? uint16 1234 | +--ro statistics 1235 | | +--ro discontinuity-time 1236 | | | yang:date-and-time 1237 | | +--ro hello-received? yang:counter64 1238 | | +--ro hello-dropped? yang:counter64 1239 | +--ro interface? if:interface-ref 1240 +--ro label-advertisement-mode 1241 | +--ro local? label-adv-mode 1242 | +--ro peer? label-adv-mode 1243 | +--ro negotiated? label-adv-mode 1244 +--ro next-keep-alive? uint16 1245 +--ro received-peer-state 1246 | +--ro graceful-restart 1247 | | +--ro enable? boolean 1248 | | +--ro reconnect-time? uint16 1249 | | +--ro recovery-time? uint16 1250 | +--ro capability 1251 | +--ro end-of-lib 1252 | | +--ro enable? boolean 1253 | +--ro typed-wildcard-fec 1254 | | +--ro enable? boolean 1255 | +--ro upstream-label-assignment 1256 | +--ro enable? boolean 1257 +--ro session-holdtime 1258 | +--ro peer? uint16 1259 | +--ro negotiated? uint16 1260 | +--ro remaining? uint16 1261 +--ro session-state? enumeration 1262 +--ro tcp-connection 1263 | +--ro local-address? inet:ip-address 1264 | +--ro local-port? inet:port-number 1265 | +--ro remote-address? inet:ip-address 1266 | +--ro remote-port? inet:port-number 1267 +--ro up-time? string 1268 +--ro statistics 1269 +--ro discontinuity-time yang:date-and-time 1270 +--ro received 1271 | +--ro total-octets? yang:counter64 1272 | +--ro total-messages? yang:counter64 1273 | +--ro address? yang:counter64 1274 | +--ro address-withdraw? yang:counter64 1275 | +--ro initialization? yang:counter64 1276 | +--ro keepalive? yang:counter64 1277 | +--ro label-abort-request? yang:counter64 1278 | +--ro label-mapping? yang:counter64 1279 | +--ro label-release? yang:counter64 1280 | +--ro label-request? yang:counter64 1281 | +--ro label-withdraw? yang:counter64 1282 | +--ro notification? yang:counter64 1283 +--ro sent 1284 | +--ro total-octets? yang:counter64 1285 | +--ro total-messages? yang:counter64 1286 | +--ro address? yang:counter64 1287 | +--ro address-withdraw? yang:counter64 1288 | +--ro initialization? yang:counter64 1289 | +--ro keepalive? yang:counter64 1290 | +--ro label-abort-request? yang:counter64 1291 | +--ro label-mapping? yang:counter64 1292 | +--ro label-release? yang:counter64 1293 | +--ro label-request? yang:counter64 1294 | +--ro label-withdraw? yang:counter64 1295 | +--ro notification? yang:counter64 1296 +--ro total-addresses? uint32 1297 +--ro total-labels? uint32 1298 +--ro total-fec-label-bindings? uint32 1300 Figure 8 1302 6.1.2. Extended 1304 Following is a simplified graphical representation of the extended 1305 data model for LDP operational state. 1307 module: ietf-mpls-ldp 1308 augment /rt:routing/rt:control-plane-protocols: 1309 +--rw mpls-ldp! 1310 +--rw global 1311 | +--rw address-families 1312 | +--rw ldp-ext:ipv6! 1313 | +--ro ldp-ext:label-distribution-controlmode? 1314 | | enumeration 1315 | +--ro ldp-ext:bindings 1316 | +--ro ldp-ext:address* [address] 1317 | | +--ro ldp-ext:address 1318 | | | inet:ipv6-address 1319 | | +--ro ldp-ext:advertisement-type? 1320 | | | advertised-received 1321 | | +--ro ldp-ext:peer 1322 | | +--ro ldp-ext:lsr-id? leafref 1323 | | +--ro ldp-ext:label-space-id? leafref 1324 | +--ro ldp-ext:fec-label* [fec] 1325 | +--ro ldp-ext:fec inet:ipv6-prefix 1326 | +--ro ldp-ext:peer* [lsr-id label-space-id advertisement-type] 1327 | +--ro ldp-ext:lsr-id leafref 1328 | +--ro ldp-ext:label-space-id leafref 1329 | +--ro ldp-ext:advertisement-type 1330 | | advertised-received 1331 | +--ro ldp-ext:label? 1332 | | rt-types:mpls-label 1333 | +--ro ldp-ext:used-in-forwarding? boolean 1334 +--rw discovery 1335 | +--rw interfaces 1336 | | +--rw interface* [name] 1337 | | +--rw name if:interface-ref 1338 | | +--rw address-families 1339 | | +--rw ldp-ext:ipv6! 1340 | | +--ro ldp-ext:hello-adjacencies 1341 | | +--ro ldp-ext:hello-adjacency* [adjacent-address] 1342 | | +--ro ldp-ext:adjacent-address inet:ipv6-address 1343 | | +--ro ldp-ext:flag* identityref 1344 | | +--ro ldp-ext:hello-holdtime 1345 | | | +--ro ldp-ext:adjacent? uint16 1346 | | | +--ro ldp-ext:negotiated? uint16 1347 | | | +--ro ldp-ext:remaining? uint16 1348 | | +--ro ldp-ext:next-hello? uint16 1349 | | +--ro ldp-ext:statistics 1350 | | | +--ro ldp-ext:discontinuity-time yang:date-and-time 1351 | | | +--ro ldp-ext:hello-received? yang:counter64 1352 | | | +--ro ldp-ext:hello-dropped? yang:counter64 1353 | | +--ro ldp-ext:peer 1354 | | +--ro ldp-ext:lsr-id? leafref 1355 | | +--ro ldp-ext:label-space-id? leafref 1356 | +--rw targeted 1357 | +--rw address-families 1358 | +--rw ldp-ext:ipv6! 1359 | +--ro ldp-ext:hello-adjacencies 1360 | +--ro ldp-ext:hello-adjacency* [local-address adjacent-address] 1361 | +--ro ldp-ext:local-address inet:ipv6-address 1362 | +--ro ldp-ext:adjacent-address inet:ipv6-address 1363 | +--ro ldp-ext:flag* identityref 1364 | +--ro ldp-ext:hello-holdtime 1365 | | +--ro ldp-ext:adjacent? uint16 1366 | | +--ro ldp-ext:negotiated? uint16 1367 | | +--ro ldp-ext:remaining? uint16 1368 | +--ro ldp-ext:next-hello? uint16 1369 | +--ro ldp-ext:statistics 1370 | | +--ro ldp-ext:discontinuity-time yang:date-and-time 1371 | | +--ro ldp-ext:hello-received? yang:counter64 1372 | | +--ro ldp-ext:hello-dropped? yang:counter64 1373 | +--ro ldp-ext:peer 1374 | +--ro ldp-ext:lsr-id? leafref 1375 | +--ro ldp-ext:label-space-id? leafref 1376 +--rw peers 1377 +--rw address-families 1378 +--rw ldp-ext:ipv6! 1379 +--ro ldp-ext:hello-adjacencies 1380 +--ro ldp-ext:hello-adjacency* [local-address adjacent-address] 1381 +--ro ldp-ext:local-address inet:ipv6-address 1382 +--ro ldp-ext:adjacent-address inet:ipv6-address 1383 +--ro ldp-ext:flag* identityref 1384 +--ro ldp-ext:hello-holdtime 1385 | +--ro ldp-ext:adjacent? uint16 1386 | +--ro ldp-ext:negotiated? uint16 1387 | +--ro ldp-ext:remaining? uint16 1388 +--ro ldp-ext:next-hello? uint16 1389 +--ro ldp-ext:statistics 1390 | +--ro ldp-ext:discontinuity-time yang:date-and-time 1391 | +--ro ldp-ext:hello-received? yang:counter64 1392 | +--ro ldp-ext:hello-dropped? yang:counter64 1393 +--ro ldp-ext:interface? if:interface-ref 1395 Figure 9 1397 6.2. States 1399 Following are main areas for which LDP operational state is defined: 1401 Neighbor Adjacencies 1403 Peer 1405 Bindings (FEC-label and address) 1407 Capabilities 1409 6.2.1. Adjacency state 1411 Neighbor adjacencies are per address-family hello adjacencies that 1412 are formed with neighbors as result of LDP basic or extended 1413 discovery. In terms of organization, there is a source of discovery 1414 (e.g. interface or target address) along with its associated 1415 parameters and one or more discovered neighbors along with neighbor 1416 discovery related parameters. For the basic discovery, there could 1417 be more than one discovered neighbor for a given source (interface), 1418 whereas there is at most one discovered neighbor for an extended 1419 discovery source (local-address and target-address). This is also to 1420 be noted that the reason for a targeted neighbor adjacency could be 1421 either an active source (locally configured targeted) or passive 1422 source (to allow any incoming extended/targeted hellos). A neighbor/ 1423 adjacency record also contains session-state that helps highlight 1424 whether a given adjacency has progressed to subsequent session level 1425 or to eventual peer level. 1427 Following captures high level tree hierarchy for neighbor adjacency 1428 state. 1430 +--rw mpls-ldp! 1431 +--rw discovery 1432 +--rw interfaces 1433 | +--rw interface* [interface] 1434 | +--rw address-families 1435 | +--rw ipv4 (or ipv6) 1436 | +--ro hello-adjacencies 1437 | +--ro hello-adjacencies* [adjacent-address] 1438 | +--ro adjacent-address 1439 | . . . . 1440 | . . . . 1441 +--rw targeted 1442 +--rw address-families 1443 +--rw ipv4 (or ipv6) 1444 +--ro hello-adjacencies 1445 +--ro hello-adjacencies* [local-address adjacent-address] 1446 +--ro local-address 1447 +--ro adjacent-address 1448 . . . . 1449 . . . . 1451 Figure 10 1453 6.2.2. Peer state 1455 Peer related state is presented under peers tree. This is one of the 1456 core state that provides info on the session related parameters 1457 (mode, authentication, KA timeout etc.), TCP connection info, hello 1458 adjacencies for the peer, statistics related to messages and 1459 bindings, and capabilities exchange info. 1461 Following captures high level tree hierarchy for peer state. 1463 +--rw mpls-ldp! 1464 +--rw peers 1465 +--rw peer* [lsr-id label-space-id] 1466 +--rw lsr-id 1467 +--rw label-space-id 1468 +--ro label-advertisement-mode 1469 +--ro session-state 1470 +--ro tcp-connection 1471 +--ro session-holdtime? 1472 +--ro up-time 1473 +-- . . . . 1474 +--ro address-families 1475 | +--ro ipv4 (or ipv6) 1476 | +--ro hello-adjacencies 1477 | +--ro hello-adjacencies* [local-address adjacent-address] 1478 | . . . . 1479 | . . . . 1480 +--ro received-peer-state 1481 | +--ro . . . . 1482 | +--ro capability 1483 | +--ro . . . . 1484 +--ro statistics 1485 +-- . . . . 1486 +-- received 1487 | +-- ... 1488 +-- sent 1489 +-- ... 1491 Figure 11 1493 6.2.3. Bindings state 1495 Binding state provides information on LDP FEC-label bindings as well 1496 as address binding for both inbound (received) as well as outbound 1497 (advertised) direction. FEC-label bindings are presented as a FEC- 1498 centric view, and address bindings are presented as an address- 1499 centric view: 1501 FEC-Label bindings: 1502 FEC 203.0.113.1/32: 1503 advertised: local-label 16000 1504 peer 192.0.2.1:0 1505 peer 192.0.2.2:0 1506 peer 192.0.2.3:0 1507 received: 1508 peer 192.0.2.1:0, label 16002, used-in-forwarding=Yes 1509 peer 192.0.2.2:0, label 17002, used-in-forwarding=No 1510 FEC 203.0.113.2/32: 1511 . . . . 1512 FEC 198.51.100.0/24: 1513 . . . . 1515 Address bindings: 1516 Addr 192.0.2.10: 1517 advertised 1518 Addr 192.0.2.1: 1519 received, peer 192.0.2.1:0 1520 Addr 192.0.2.2: 1521 received, peer 192.0.2.2:0 1522 Addr 192.0.2.3: 1523 received, peer 192.0.2.3:0 1525 Figure 12 1527 Note that all local addresses are advertised to all peers and hence 1528 no need to provide per-peer information for local address 1529 advertisement. Furthermore, note that it is easy to derive a peer- 1530 centric view for the bindings from the information already provided 1531 in this model. 1533 Following captures high level tree hierarchy for bindings state. 1535 +--rw mpls-ldp! 1536 +--rw global 1537 +--rw address-families 1538 +--rw ipv4 (or ipv6) 1539 +--ro bindings 1540 +--ro address* [address] 1541 | +--ro address (ipv4-address or ipv6-address) 1542 | +--ro advertisement-type? advertised-received 1543 | +--ro peer? leafref 1544 +--ro fec-label* [fec] 1545 +--ro fec (ipv4-prefix or ipv6-prefix) 1546 +--ro peer* [peer advertisement-type] 1547 +--ro peer leafref 1548 +--ro advertisement-type? advertised-received 1549 +--ro label? mpls:mpls-label 1550 +--ro used-in-forwarding? boolean 1552 Figure 13 1554 6.2.4. Capabilities state 1556 LDP capabilities state comprise two types of information - global 1557 information (such as timer etc.), and per-peer information. 1559 Following captures high level tree hierarchy for LDP capabilities 1560 state. 1562 +--rw mpls-ldp! 1563 +--rw peers 1564 +--rw peer* [lsr-id label-space-id] 1565 +--rw lsr-id yang:dotted-quad 1566 +--rw label-space-id 1567 +--ro received-peer-state 1568 +--ro capability 1569 +--ro . . . . 1570 +--ro . . . . 1572 Figure 14 1574 7. Notifications 1576 This model defines a list of notifications to inform client of 1577 important events detected during the protocol operation. These 1578 events include events related to changes in the operational state of 1579 an LDP peer, hello adjacency, and FEC etc. It is to be noted that an 1580 LDP FEC is treated as operational (up) as long as it has at least 1 1581 NHLFE with outgoing label. 1583 Following is a simplified graphical representation of the data model 1584 for LDP notifications. 1586 module: ietf-mpls-ldp 1587 notifications: 1588 +---n mpls-ldp-peer-event 1589 | +--ro event-type? oper-status-event-type 1590 | +--ro peer 1591 | +--ro lsr-id? leafref 1592 | +--ro label-space-id? leafref 1593 +---n mpls-ldp-hello-adjacency-event 1594 | +--ro event-type? oper-status-event-type 1595 | +--ro (hello-adjacency-type)? 1596 | +--:(targeted) 1597 | | +--ro targeted 1598 | | +--ro target-address? inet:ip-address 1599 | +--:(link) 1600 | +--ro link 1601 | +--ro next-hop-interface? if:interface-ref 1602 | +--ro next-hop-address? inet:ip-address 1603 +---n mpls-ldp-fec-event 1604 +--ro event-type? oper-status-event-type 1605 +--ro prefix? inet:ip-prefix 1607 Figure 15 1609 8. Actions 1611 This model defines a list of rpcs that allow performing an action or 1612 executing a command on the protocol. For example, it allows to clear 1613 (reset) LDP peers, hello-adjacencies, and statistics. The model 1614 makes an effort to provide different level of control so that a user 1615 is able to either clear all, or clear all for a given type, or clear 1616 a specific entity. 1618 Following is a simplified graphical representation of the data model 1619 for LDP actions. 1621 module: ietf-mpls-ldp 1622 rpcs: 1623 +---x mpls-ldp-clear-peer 1624 | +---w input 1625 | +---w lsr-id? leafref 1626 | +---w label-space-id? leafref 1627 +---x mpls-ldp-clear-hello-adjacency 1628 | +---w input 1629 | +---w hello-adjacency 1630 | +---w (hello-adjacency-type)? 1631 | +--:(targeted) 1632 | | +---w targeted! 1633 | | +---w target-address? inet:ip-address 1634 | +--:(link) 1635 | +---w link! 1636 | +---w next-hop-interface? leafref 1637 | +---w next-hop-address? inet:ip-address 1638 +---x mpls-ldp-clear-peer-statistics 1639 +---w input 1640 +---w lsr-id? leafref 1641 +---w label-space-id? leafref 1643 Figure 16 1645 9. YANG Specification 1647 Following are the actual YANG definition (module) for LDP constructs 1648 defined earlier in the document. 1650 9.1. Base 1652 file "ietf-mpls-ldp@2018-02-28.yang" 1654 module ietf-mpls-ldp { 1655 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; 1656 prefix "ldp"; 1658 import ietf-inet-types { 1659 prefix "inet"; 1660 } 1662 import ietf-yang-types { 1663 prefix "yang"; 1664 } 1665 import ietf-routing { 1666 prefix "rt"; 1667 } 1669 import ietf-routing-types { 1670 prefix "rt-types"; 1671 } 1673 import ietf-interfaces { 1674 prefix "if"; 1675 } 1677 import ietf-ip { 1678 prefix "ip"; 1679 } 1681 organization 1682 "IETF MPLS Working Group"; 1683 contact 1684 "WG Web: 1685 WG List: 1687 Editor: Kamran Raza 1688 1690 Editor: Rajiv Asati 1691 1693 Editor: Xufeng Liu 1694 1696 Editor: Santosh Esale 1697 1699 Editor: Xia Chen 1700 1702 Editor: Himanshu Shah 1703 "; 1705 description 1706 "This YANG module defines the essential components for the 1707 management of Multi-Protocol Label Switching (MPLS) Label 1708 Distribution Protocol (LDP). It is also the base model to 1709 be augmented for Multipoint LDP (mLDP). 1711 Copyright (c) 2018 IETF Trust and the persons identified as 1712 authors of the code. All rights reserved. 1714 Redistribution and use in source and binary forms, with or 1715 without modification, is permitted pursuant to, and subject to 1716 the license terms contained in, the Simplified BSD License set 1717 forth in Section 4.c of the IETF Trust's Legal Provisions 1718 Relating to IETF Documents 1719 (http://trustee.ietf.org/license-info). 1721 This version of this YANG module is part of RFC XXXX; see the 1722 RFC itself for full legal notices."; 1724 revision 2018-02-28 { 1725 description 1726 "Initial revision."; 1727 reference 1728 "RFC XXXX: YANG Data Model for MPLS LDP."; 1729 } 1731 /* 1732 * Typedefs 1733 */ 1734 typedef ldp-address-family { 1735 type identityref { 1736 base rt:address-family; 1737 } 1738 description 1739 "LDP address family type."; 1740 } 1742 typedef duration32-inf { 1743 type union { 1744 type uint32; 1745 type enumeration { 1746 enum "infinite" { 1747 description "The duration is infinite."; 1748 } 1749 } 1750 } 1751 units seconds; 1752 description 1753 "Duration represented as 32 bit seconds with infinite."; 1754 } 1756 typedef advertised-received { 1757 type enumeration { 1758 enum advertised { 1759 description "Advertised information."; 1760 } 1761 enum received { 1762 description "Received information."; 1763 } 1764 } 1765 description 1766 "Received or advertised."; 1767 } 1769 typedef downstream-upstream { 1770 type enumeration { 1771 enum downstream { 1772 description "Downstream information."; 1773 } 1774 enum upstream { 1775 description "Upstream information."; 1776 } 1777 } 1778 description 1779 "Received or advertised."; 1780 } 1782 typedef label-adv-mode { 1783 type enumeration { 1784 enum downstream-unsolicited { 1785 description "Downstream Unsolicited."; 1786 } 1787 enum downstream-on-demand { 1788 description "Downstream on Demand."; 1789 } 1790 } 1791 description 1792 "Label Advertisement Mode."; 1793 } 1795 typedef oper-status-event-type { 1796 type enumeration { 1797 enum up { 1798 value 1; 1799 description 1800 "Operational status changed to up."; 1801 } 1802 enum down { 1803 value 2; 1804 description 1805 "Operational status changed to down."; 1806 } 1807 } 1808 description "Operational status event type for notifications."; 1809 } 1810 /* 1811 * Identities 1812 */ 1813 identity adjacency-flag-base { 1814 description "Base type for adjacency flags."; 1815 } 1817 identity adjacency-flag-active { 1818 base adjacency-flag-base; 1819 description 1820 "This adjacency is configured and actively created."; 1821 } 1823 identity adjacency-flag-passive { 1824 base adjacency-flag-base; 1825 description 1826 "This adjacency is not configured and passively accepted."; 1827 } 1829 /* 1830 * Groupings 1831 */ 1833 grouping adjacency-state-attributes { 1834 description 1835 "The operational state attributes of an LDP hello adjacency, 1836 which can used for basic and extended discoveris, in IPv4 and 1837 IPv6 address families."; 1839 leaf-list flag { 1840 type identityref { 1841 base adjacency-flag-base; 1842 } 1843 description 1844 "On or more flags to indicate whether the adjacency is 1845 actively created, passively accepted, or both."; 1846 } 1847 container hello-holdtime { 1848 description 1849 "Containing hello holdtime state information."; 1850 leaf adjacent { 1851 type uint16; 1852 units seconds; 1853 description 1854 "The holdtime value learned from the adjacent LSR."; 1855 } 1856 leaf negotiated { 1857 type uint16; 1858 units seconds; 1859 description 1860 "The holdtime negotiated between this LSR and the adjacent 1861 LSR."; 1862 } 1863 leaf remaining { 1864 type uint16; 1865 units seconds; 1866 description 1867 "The time remaining until the holdtime timer expires."; 1868 } 1869 } 1871 leaf next-hello { 1872 type uint16; 1873 units seconds; 1874 description 1875 "The time when the next Hello message will be sent."; 1876 } 1878 container statistics { 1879 description 1880 "Statistics objects."; 1882 leaf discontinuity-time { 1883 type yang:date-and-time; 1884 mandatory true; 1885 description 1886 "The time on the most recent occasion at which any one or 1887 more of this interface's counters suffered a 1888 discontinuity. If no such discontinuities have occurred 1889 since the last re-initialization of the local management 1890 subsystem, then this node contains the time the local 1891 management subsystem re-initialized itself."; 1892 } 1894 leaf hello-received { 1895 type yang:counter64; 1896 description 1897 "The number of Hello messages received."; 1898 } 1899 leaf hello-dropped { 1900 type yang:counter64; 1901 description 1902 "The number of Hello messages dropped."; 1903 } 1904 } // statistics 1905 } // adjacency-state-attributes 1906 grouping basic-discovery-timers { 1907 description 1908 "The timer attributes for basic discovery, used in the 1909 per-interface setting and in the all-interface setting."; 1911 leaf hello-holdtime { 1912 type uint16 { 1913 range 15..3600; 1914 } 1915 units seconds; 1916 default 15; 1917 description 1918 "The time interval for which a LDP link Hello adjacency 1919 is maintained in the absence of link Hello messages from 1920 the LDP neighbor"; 1921 } 1922 leaf hello-interval { 1923 type uint16 { 1924 range 5..1200; 1925 } 1926 units seconds; 1927 default 5; 1928 description 1929 "The interval between consecutive LDP link Hello messages 1930 used in basic LDP discovery"; 1931 } 1932 } // basic-discovery-timers 1934 grouping binding-address-state-attributes { 1935 description 1936 "Operational state attributes of an address binding, used in 1937 IPv4 and IPv6 address families."; 1939 leaf advertisement-type { 1940 type advertised-received; 1941 description 1942 "Received or advertised."; 1943 } 1944 container peer { 1945 when "../advertisement-type = 'received'" { 1946 description 1947 "Applicable for received address."; 1948 } 1949 description 1950 "LDP peer from which this address is received."; 1951 uses ldp-peer-ref; 1952 } 1953 } // binding-address-state-attributes 1954 grouping binding-label-state-attributes { 1955 description 1956 "Operational state attributes for a FEC-label binding, used in 1957 IPv4 and IPv6 address families."; 1959 list peer { 1960 key "lsr-id label-space-id advertisement-type"; 1961 description 1962 "List of advertised and received peers."; 1963 uses ldp-peer-ref { 1964 description 1965 "The LDP peer from which this binding is received, or to 1966 which this binding is advertised. 1967 The peer is identified by its LDP ID, which consists of 1968 the LSR ID and the Label Space ID."; 1969 } 1970 leaf advertisement-type { 1971 type advertised-received; 1972 description 1973 "Received or advertised."; 1974 } 1975 leaf label { 1976 type rt-types:mpls-label; 1977 description 1978 "Advertised (outbound) or received (inbound) 1979 label."; 1980 } 1981 leaf used-in-forwarding { 1982 type boolean; 1983 description 1984 "'true' if the lable is used in forwarding."; 1985 } 1986 } // peer 1987 } // binding-label-state-attributes 1989 grouping graceful-restart-attributes-per-peer { 1990 description 1991 "Per peer graceful restart attributes. 1992 On the local side, these attributes are configuration and 1993 operational state data. One the peer side, these attributes 1994 are operational state data reveiced from the peer."; 1996 container graceful-restart { 1997 description 1998 "Attributes for graceful restart."; 1999 leaf enable { 2000 type boolean; 2001 default false; 2002 description 2003 "Enable or disable graceful restart."; 2004 } 2005 leaf reconnect-time { 2006 type uint16 { 2007 range 10..1800; 2008 } 2009 units seconds; 2010 default 120; 2011 description 2012 "Specifies the time interval that the remote LDP peer 2013 must wait for the local LDP peer to reconnect after the 2014 remote peer detects the LDP communication failure."; 2015 } 2016 leaf recovery-time { 2017 type uint16 { 2018 range 30..3600; 2019 } 2020 units seconds; 2021 default 120; 2022 description 2023 "Specifies the time interval, in seconds, that the remote 2024 LDP peer preserves its MPLS forwarding state after 2025 receiving the Initialization message from the restarted 2026 local LDP peer."; 2027 } 2028 } // graceful-restart 2029 } // graceful-restart-attributes-per-peer 2031 grouping ldp-interface-ref { 2032 description 2033 "Defining a reference to LDP interface."; 2035 leaf name { 2036 type if:interface-ref; 2037 must "(/if:interfaces/if:interface[if:name=current()]/ip:ipv4)" 2038 + " or " 2039 + "(/if:interfaces/if:interface[if:name=current()]/ip:ipv6)" 2040 { 2041 description "Interface is IPv4 or IPv6."; 2042 } 2043 description 2044 "The name of an LDP interface."; 2045 } 2046 } 2048 grouping ldp-peer-ref { 2049 description 2050 "An absolute reference to an LDP peer, by the LDP ID, which 2051 consists of the LSR ID and the Label Space ID."; 2053 leaf lsr-id { 2054 type leafref { 2055 path "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 2056 + "ldp:peers/ldp:peer/ldp:lsr-id"; 2057 } 2058 description 2059 "The LSR ID of the peer, as a portion of the peer LDP ID."; 2060 } 2061 leaf label-space-id { 2062 type leafref { 2063 path "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 2064 + "ldp:peers/ldp:peer/ldp:label-space-id"; 2065 } 2066 description 2067 "The Label Space ID of the peer, as a portion of the peer 2068 LDP ID."; 2069 } 2070 } // ldp-peer-ref 2072 grouping ldp-peer-ref-container { 2073 description 2074 "A container containing an absolute reference to an LDP peer."; 2076 container peer { 2077 description 2078 "Reference to an LDP peer, by the LDP ID, which consists of 2079 the LSR ID and the Label Space ID."; 2080 uses ldp-peer-ref; 2081 } // peer 2082 } // ldp-peer-ref 2084 grouping peer-attributes { 2085 description 2086 "Peer configuration attributes, used in the per-peer setting 2087 can in the all-peer setting."; 2089 leaf session-ka-holdtime { 2090 type uint16 { 2091 range 45..3600; 2092 } 2093 units seconds; 2094 default 180; 2095 description 2096 "The time interval after which an inactive LDP session 2097 terminates and the corresponding TCP session closes. 2099 Inactivity is defined as not receiving LDP packets from the 2100 peer."; 2101 } 2102 leaf session-ka-interval { 2103 type uint16 { 2104 range 15..1200; 2105 } 2106 units seconds; 2107 default 60; 2108 description 2109 "The interval between successive transmissions of keepalive 2110 packets. Keepalive packets are only sent in the absence of 2111 other LDP packets transmitted over the LDP session."; 2112 } 2113 } // peer-attributes 2115 grouping peer-authentication { 2116 description 2117 "Peer authentication container, used in the per-peer setting 2118 can in the all-peer setting."; 2120 container authentication { 2121 description 2122 "Containing authentication information."; 2123 choice auth-type-selection { 2124 description 2125 "Options for expressing authentication setting."; 2126 case auth-key { 2127 leaf md5-key { 2128 type string; 2129 description 2130 "MD5 Key string."; 2131 } 2132 } 2133 } 2134 } // authentication 2135 } // peer-authentication 2137 grouping peer-state-derived { 2138 description 2139 "The peer state information derived from the LDP protocol 2140 operatoins."; 2142 container label-advertisement-mode { 2143 config false; 2144 description "Label advertisement mode state."; 2145 leaf local { 2146 type label-adv-mode; 2147 description 2148 "Local Label Advertisement Mode."; 2149 } 2150 leaf peer { 2151 type label-adv-mode; 2152 description 2153 "Peer Label Advertisement Mode."; 2154 } 2155 leaf negotiated { 2156 type label-adv-mode; 2157 description 2158 "Negotiated Label Advertisement Mode."; 2159 } 2160 } 2161 leaf next-keep-alive { 2162 type uint16; 2163 units seconds; 2164 config false; 2165 description "Time to send the next KeepAlive message."; 2166 } 2168 container received-peer-state { 2169 config false; 2170 description 2171 "Operational state information learned from the peer."; 2173 uses graceful-restart-attributes-per-peer; 2175 container capability { 2176 description "Configure capability."; 2177 container end-of-lib { 2178 description 2179 "Configure end-of-lib capability."; 2180 leaf enable { 2181 type boolean; 2182 description 2183 "Enable end-of-lib capability."; 2184 } 2185 } 2186 container typed-wildcard-fec { 2187 description 2188 "Configure typed-wildcard-fec capability."; 2189 leaf enable { 2190 type boolean; 2191 description 2192 "Enable typed-wildcard-fec capability."; 2193 } 2194 } 2195 container upstream-label-assignment { 2196 description 2197 "Configure upstream label assignment capability."; 2198 leaf enable { 2199 type boolean; 2200 description 2201 "Enable upstream label assignment."; 2202 } 2203 } 2204 } // capability 2205 } // received-peer-state 2207 container session-holdtime { 2208 config false; 2209 description "Session holdtime state."; 2210 leaf peer { 2211 type uint16; 2212 units seconds; 2213 description "Peer holdtime."; 2214 } 2215 leaf negotiated { 2216 type uint16; 2217 units seconds; 2218 description "Negotiated holdtime."; 2219 } 2220 leaf remaining { 2221 type uint16; 2222 units seconds; 2223 description "Remaining holdtime."; 2224 } 2225 } // session-holdtime 2227 leaf session-state { 2228 type enumeration { 2229 enum non-existent { 2230 description "NON EXISTENT state. Transport disconnected."; 2231 } 2232 enum initialized { 2233 description "INITIALIZED state."; 2234 } 2235 enum openrec { 2236 description "OPENREC state."; 2237 } 2238 enum opensent { 2239 description "OPENSENT state."; 2240 } 2241 enum operational { 2242 description "OPERATIONAL state."; 2244 } 2245 } 2246 config false; 2247 description 2248 "Representing the operational status of the LDP session."; 2249 reference 2250 "RFC5036, Sec. 2.5.4."; 2251 } 2253 container tcp-connection { 2254 config false; 2255 description "TCP connection state."; 2256 leaf local-address { 2257 type inet:ip-address; 2258 description "Local address."; 2259 } 2260 leaf local-port { 2261 type inet:port-number; 2262 description "Local port number."; 2263 } 2264 leaf remote-address { 2265 type inet:ip-address; 2266 description "Remote address."; 2267 } 2268 leaf remote-port { 2269 type inet:port-number; 2270 description "Remote port number."; 2271 } 2272 } // tcp-connection 2274 leaf up-time { 2275 type string; 2276 config false; 2277 description "Up time. The interval format in ISO 8601."; 2278 } 2280 container statistics { 2281 config false; 2282 description 2283 "Statistics objects."; 2285 leaf discontinuity-time { 2286 type yang:date-and-time; 2287 mandatory true; 2288 description 2289 "The time on the most recent occasion at which any one or 2290 more of this interface's counters suffered a 2291 discontinuity. If no such discontinuities have occurred 2292 since the last re-initialization of the local management 2293 subsystem, then this node contains the time the local 2294 management subsystem re-initialized itself."; 2295 } 2297 container received { 2298 description "Inbound statistics."; 2299 uses statistics-peer-received-sent; 2300 } 2301 container sent { 2302 description "Outbound statistics."; 2303 uses statistics-peer-received-sent; 2304 } 2306 leaf total-addresses { 2307 type uint32; 2308 description 2309 "The number of learned addresses."; 2310 } 2311 leaf total-labels { 2312 type uint32; 2313 description 2314 "The number of learned labels."; 2315 } 2316 leaf total-fec-label-bindings { 2317 type uint32; 2318 description 2319 "The number of learned label-address bindings."; 2320 } 2321 } // statistics 2322 } // peer-state-derived 2324 grouping statistics-peer-received-sent { 2325 description 2326 "Inbound and outbound statistic counters."; 2327 leaf total-octets { 2328 type yang:counter64; 2329 description 2330 "The total number of octets sent or received."; 2331 } 2332 leaf total-messages { 2333 type yang:counter64; 2334 description 2335 "The number of messages sent or received."; 2336 } 2337 leaf address { 2338 type yang:counter64; 2339 description 2340 "The number of address messages sent or received."; 2341 } 2342 leaf address-withdraw { 2343 type yang:counter64; 2344 description 2345 "The number of address-withdraw messages sent or received."; 2346 } 2347 leaf initialization { 2348 type yang:counter64; 2349 description 2350 "The number of initialization messages sent or received."; 2351 } 2352 leaf keepalive { 2353 type yang:counter64; 2354 description 2355 "The number of keepalive messages sent or received."; 2356 } 2357 leaf label-abort-request { 2358 type yang:counter64; 2359 description 2360 "The number of label-abort-request messages sent or 2361 received."; 2362 } 2363 leaf label-mapping { 2364 type yang:counter64; 2365 description 2366 "The number of label-mapping messages sent or received."; 2367 } 2368 leaf label-release { 2369 type yang:counter64; 2370 description 2371 "The number of label-release messages sent or received."; 2372 } 2373 leaf label-request { 2374 type yang:counter64; 2375 description 2376 "The number of label-request messages sent or received."; 2377 } 2378 leaf label-withdraw { 2379 type yang:counter64; 2380 description 2381 "The number of label-withdraw messages sent or received."; 2382 } 2383 leaf notification { 2384 type yang:counter64; 2385 description 2386 "The number of messages sent or received."; 2387 } 2389 } // statistics-peer-received-sent 2391 /* 2392 * Configuration data and operational state data nodes 2393 */ 2395 augment "/rt:routing/rt:control-plane-protocols" { 2396 description "LDP augmentation."; 2398 container mpls-ldp { 2399 presence 2400 "Enables the LDP protocol."; 2401 description 2402 "Containing configuration and operational data for the LDP 2403 protocol."; 2405 container global { 2406 description 2407 "Global attributes for LDP."; 2409 container capability { 2410 description 2411 "Containing the LDP capability data. The container is 2412 used for augmentations."; 2413 reference 2414 "RFC5036: Sec. 1.5."; 2415 } // capability 2417 container graceful-restart { 2418 description 2419 "Attributes for graceful restart."; 2420 leaf enable { 2421 type boolean; 2422 default false; 2423 description 2424 "Enable or disable graceful restart."; 2425 } 2426 leaf reconnect-time { 2427 type uint16 { 2428 range 10..1800; 2429 } 2430 units seconds; 2431 default 120; 2432 description 2433 "Specifies the time interval that the remote LDP peer 2434 must wait for the local LDP peer to reconnect after 2435 the remote peer detects the LDP communication 2436 failure."; 2438 } 2439 leaf recovery-time { 2440 type uint16 { 2441 range 30..3600; 2442 } 2443 units seconds; 2444 default 120; 2445 description 2446 "Specifies the time interval, in seconds, that the 2447 remote LDP peer preserves its MPLS forwarding state 2448 after receiving the Initialization message from the 2449 restarted local LDP peer."; 2450 } 2451 leaf forwarding-holdtime { 2452 type uint16 { 2453 range 30..3600; 2454 } 2455 units seconds; 2456 default 180; 2457 description 2458 "Specifies the time interval, in seconds, before the 2459 termination of the recovery phase."; 2460 } 2461 } // graceful-restart 2463 leaf lsr-id { 2464 type rt-types:router-id; 2465 description 2466 "Specify the value to act as the LDP LSR ID. 2467 If this attribute is not specified, LDP uses the router 2468 ID as determined by the system."; 2469 } 2471 container address-families { 2472 description 2473 "Per address family confgiration and operational state. 2474 The address family can be either IPv4 or IPv6."; 2475 container ipv4 { 2476 presence 2477 "Present if IPv4 is enabled, unless the 'enable' 2478 leaf is set to 'false'"; 2479 description 2480 "Containing data related to the IPv4 address family."; 2482 leaf enable { 2483 type boolean; 2484 default true; 2485 description 2486 "'true' to enable the address family."; 2487 } 2489 leaf label-distribution-controlmode { 2490 type enumeration { 2491 enum independent { 2492 description 2493 "Independent label distribution control."; 2494 } 2495 enum ordered { 2496 description 2497 "Ordered label distribution control."; 2498 } 2499 } 2500 config false; 2501 description 2502 "Label distribution control mode."; 2503 reference 2504 "RFC5036: LDP Specification. Sec 2.6."; 2505 } 2507 // ipv4 bindings 2508 container bindings { 2509 config false; 2510 description 2511 "LDP address and label binding information."; 2512 list address { 2513 key "address"; 2514 description 2515 "List of address bindings learned by LDP."; 2516 leaf address { 2517 type inet:ipv4-address; 2518 description 2519 "The IPv4 address learned from an Address 2520 message received from or advertised to a peer."; 2521 } 2522 uses binding-address-state-attributes; 2523 } // binding-address 2525 list fec-label { 2526 key "fec"; 2527 description 2528 "List of FEC-label bindings learned by LDP."; 2529 leaf fec { 2530 type inet:ipv4-prefix; 2531 description 2532 "The prefix FEC value in the FEC-label binding, 2533 learned in a Label Mapping message received from 2534 or advertised to a peer."; 2535 } 2536 uses binding-label-state-attributes; 2537 } // fec-label 2538 } // bindings 2539 } // ipv4 2540 } // address-families 2541 } // global 2543 container discovery { 2544 description 2545 "Neibgbor discovery configuration and operational state."; 2547 container interfaces { 2548 description 2549 "A list of interfaces for LDP Basic Descovery."; 2550 reference 2551 "RFC5036: LDP Specification. Sec 2.4.1."; 2553 uses basic-discovery-timers; 2555 list interface { 2556 key "name"; 2557 description 2558 "List of LDP interfaces used for LDP Basic Discovery."; 2559 uses ldp-interface-ref; 2560 leaf next-hello { 2561 type uint16; 2562 units seconds; 2563 config false; 2564 description "Time to send the next hello message."; 2565 } 2567 container address-families { 2568 description 2569 "Container for address families."; 2570 container ipv4 { 2571 presence 2572 "Present if IPv4 is enabled, unless the 'enable' 2573 leaf is set to 'false'"; 2574 description 2575 "IPv4 address family."; 2577 leaf enable { 2578 type boolean; 2579 default true; 2580 description 2581 "Enable the address family on the interface."; 2583 } 2585 // ipv4 2586 container hello-adjacencies { 2587 config false; 2588 description 2589 "Containing a list of hello adjacencies."; 2591 list hello-adjacency { 2592 key "adjacent-address"; 2593 config false; 2594 description "List of hello adjacencies."; 2596 leaf adjacent-address { 2597 type inet:ipv4-address; 2598 description 2599 "Neighbor address of the hello adjacency."; 2600 } 2602 uses adjacency-state-attributes; 2603 uses ldp-peer-ref-container; 2604 } // hello-adjacency 2605 } // hello-adjacencies 2606 } // ipv4 2607 } // address-families 2608 } // list interface 2609 } // interfaces 2611 container targeted 2612 { 2613 description 2614 "A list of targeted neighbors for extended discovery."; 2616 leaf hello-holdtime { 2617 type uint16 { 2618 range 15..3600; 2619 } 2620 units seconds; 2621 default 45; 2622 description 2623 "The time interval for which LDP targeted Hello 2624 adjacency is maintained in the absence of targeted 2625 Hello messages from an LDP neighbor."; 2626 } 2627 leaf hello-interval { 2628 type uint16 { 2629 range 5..3600; 2630 } 2631 units seconds; 2632 default 15; 2633 description 2634 "The interval between consecutive LDP targeted Hello 2635 messages used in extended LDP discovery."; 2636 } 2638 container hello-accept { 2639 description 2640 "LDP policy to control the acceptance of extended 2641 neighbor discovery Hello messages."; 2643 leaf enable { 2644 type boolean; 2645 default false; 2646 description 2647 "'true' to accept; 'false' to deny."; 2648 } 2649 } // hello-accept 2651 container address-families { 2652 description 2653 "Container for address families."; 2654 container ipv4 { 2655 presence 2656 "Present if IPv4 is enabled."; 2657 description 2658 "IPv4 address family."; 2660 container hello-adjacencies { 2661 config false; 2662 description 2663 "Containing a list of hello adjacencies."; 2665 list hello-adjacency { 2666 key "local-address adjacent-address"; 2667 description "List of hello adjacencies."; 2669 leaf local-address { 2670 type inet:ipv4-address; 2671 description 2672 "Local address of the hello adjacency."; 2673 } 2674 leaf adjacent-address { 2675 type inet:ipv4-address; 2676 description 2677 "Neighbor address of the hello adjacency."; 2678 } 2679 uses adjacency-state-attributes; 2680 uses ldp-peer-ref-container; 2681 } // hello-adjacency 2682 } // hello-adjacencies 2684 list target { 2685 key "adjacent-address"; 2686 description 2687 "Targeted discovery params."; 2689 leaf adjacent-address { 2690 type inet:ipv4-address; 2691 description 2692 "Configures a remote LDP neighbor and enables 2693 extended LDP discovery of the specified 2694 neighbor."; 2695 } 2697 leaf enable { 2698 type boolean; 2699 default true; 2700 description 2701 "Enable the target."; 2702 } 2703 leaf local-address { 2704 type inet:ipv4-address; 2705 description 2706 "The local address used as the source address to 2707 send targeted Hello messages. 2708 If the value is not specified, the 2709 transport-address is used as the source 2710 address."; 2711 } 2712 } // target 2713 } // ipv4 2714 } // address-families 2715 } // targeted 2716 } // discovery 2718 container peers { 2719 description 2720 "Peers configuration attributes."; 2722 uses peer-authentication; 2723 uses peer-attributes; 2725 list peer { 2726 key "lsr-id label-space-id"; 2727 description 2728 "List of peers."; 2730 leaf lsr-id { 2731 type rt-types:router-id; 2732 description 2733 "The LSR ID of the peer, to identify the globally 2734 unique LSR. This is the first four octets of the LDP 2735 ID. This leaf is used together with the leaf 2736 'label-space-id' to form the LDP ID."; 2737 reference 2738 "RFC5036. Sec 2.2.2."; 2739 } 2740 leaf label-space-id { 2741 type uint16; 2742 description 2743 "The Label Space ID of the peer, to identify a specific 2744 label space within the LSR. This is the last two 2745 octets of the LDP ID. This leaf is used together with 2746 the leaf 'lsr-id' to form the LDP ID."; 2747 reference 2748 "RFC5036. Sec 2.2.2."; 2749 } 2751 uses peer-authentication; 2752 container capability { 2753 description 2754 "Per peer capability"; 2755 } 2757 container address-families { 2758 description 2759 "Per-vrf per-af params."; 2760 container ipv4 { 2761 presence 2762 "Present if IPv4 is enabled."; 2763 description 2764 "IPv4 address family."; 2766 container hello-adjacencies { 2767 config false; 2768 description 2769 "Containing a list of hello adjacencies."; 2771 list hello-adjacency { 2772 key "local-address adjacent-address"; 2773 description "List of hello adjacencies."; 2774 leaf local-address { 2775 type inet:ipv4-address; 2776 description 2777 "Local address of the hello adjacency."; 2778 } 2779 leaf adjacent-address { 2780 type inet:ipv4-address; 2781 description 2782 "Neighbor address of the hello adjacency."; 2783 } 2785 uses adjacency-state-attributes; 2787 leaf interface { 2788 type if:interface-ref; 2789 description "Interface for this adjacency."; 2790 } 2791 } // hello-adjacency 2792 } // hello-adjacencies 2793 } // ipv4 2794 } // address-families 2796 uses peer-state-derived; 2797 } // list peer 2798 } // peers 2799 } // container mpls-ldp 2800 } 2802 /* 2803 * RPCs 2804 */ 2805 rpc mpls-ldp-clear-peer { 2806 description 2807 "Clears the session to the peer."; 2808 input { 2809 uses ldp-peer-ref { 2810 description 2811 "The LDP peer to be cleared. If this is not provided 2812 then all peers are cleared. 2813 The peer is identified by its LDP ID, which consists of 2814 the LSR ID and the Label Space ID."; 2815 } 2816 } 2817 } 2819 rpc mpls-ldp-clear-hello-adjacency { 2820 description 2821 "Clears the hello adjacency"; 2823 input { 2824 container hello-adjacency { 2825 description 2826 "Link adjacency or targettted adjacency. If this is not 2827 provided then all hello adjacencies are cleared"; 2828 choice hello-adjacency-type { 2829 description "Adjacency type."; 2830 case targeted { 2831 container targeted { 2832 presence "Present to clear targeted adjacencies."; 2833 description 2834 "Clear targeted adjacencies."; 2835 leaf target-address { 2836 type inet:ip-address; 2837 description 2838 "The target address. If this is not provided then 2839 all targeted adjacencies are cleared"; 2840 } 2841 } // targeted 2842 } 2843 case link { 2844 container link { 2845 presence "Present to clear link adjacencies."; 2846 description 2847 "Clear link adjacencies."; 2848 leaf next-hop-interface { 2849 type leafref { 2850 path "/rt:routing/rt:control-plane-protocols/" 2851 + "mpls-ldp/discovery/interfaces/interface/name"; 2852 } 2853 description 2854 "Interface connecting to next-hop. If this is not 2855 provided then all link adjacencies are cleared."; 2856 } 2857 leaf next-hop-address { 2858 type inet:ip-address; 2859 must "../next-hop-interface" { 2860 description 2861 "Applicable when interface is specified."; 2862 } 2863 description 2864 "IP address of next-hop. If this is not provided 2865 then adjacencies to all next-hops on the given 2866 interface are cleared."; 2867 } // next-hop-address 2868 } // link 2869 } 2870 } 2872 } 2873 } 2874 } 2876 rpc mpls-ldp-clear-peer-statistics { 2877 description 2878 "Clears protocol statistics (e.g. sent and received 2879 counters)."; 2880 input { 2881 uses ldp-peer-ref { 2882 description 2883 "The LDP peer whose statistics are to be cleared. 2884 If this is not provided then all peers' statistics are 2885 cleared. 2886 The peer is identified by its LDP ID, which consists of 2887 the LSR ID and the Label Space ID."; 2888 } 2889 } 2890 } 2892 /* 2893 * Notifications 2894 */ 2895 notification mpls-ldp-peer-event { 2897 description 2898 "Notification event for a change of LDP peer operational 2899 status."; 2900 leaf event-type { 2901 type oper-status-event-type; 2902 description "Event type."; 2903 } 2904 uses ldp-peer-ref-container; 2905 } 2907 notification mpls-ldp-hello-adjacency-event { 2908 description 2909 "Notification event for a change of LDP adjacency operational 2910 status."; 2911 leaf event-type { 2912 type oper-status-event-type; 2913 description "Event type."; 2914 } 2915 choice hello-adjacency-type { 2916 description 2917 "Interface or targeted adjacency."; 2918 case targeted { 2919 container targeted { 2920 description 2921 "Targeted adjacency through LDP extended discovery."; 2922 leaf target-address { 2923 type inet:ip-address; 2924 description 2925 "The target adjacent address learned."; 2926 } 2927 } // targeted 2928 } 2929 case link { 2930 container link { 2931 description 2932 "Link adjacency through LDP basic discovery."; 2933 leaf next-hop-interface { 2934 type if:interface-ref; 2935 description 2936 "The interface connecting to the adjacent next hop."; 2937 } 2938 leaf next-hop-address { 2939 type inet:ip-address; 2940 must "../next-hop-interface" { 2941 description 2942 "Applicable when interface is specified."; 2944 } 2945 description 2946 "IP address of the next hop. This can be IPv4 or IPv6 2947 address."; 2948 } 2949 } // link 2950 } 2951 } 2952 } 2954 notification mpls-ldp-fec-event { 2955 description 2956 "Notification event for a change of FEC status."; 2957 leaf event-type { 2958 type oper-status-event-type; 2959 description "Event type."; 2960 } 2961 leaf prefix { 2962 type inet:ip-prefix; 2963 description 2964 "The address prefix element of the FEC whose status 2965 has changed."; 2966 } 2967 } 2969 } 2971 2973 Figure 17 2975 9.2. Extended 2977 file "ietf-mpls-ldp-extended@2018-02-28.yang" 2979 module ietf-mpls-ldp-extended { 2980 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended"; 2981 prefix "ldp-ext"; 2983 import ietf-inet-types { 2984 prefix "inet"; 2985 } 2987 import ietf-routing { 2988 prefix "rt"; 2989 } 2991 import ietf-key-chain { 2992 prefix "key-chain"; 2993 } 2995 import ietf-mpls-ldp { 2996 prefix "ldp"; 2997 } 2999 import ietf-interfaces { 3000 prefix "if"; 3001 } 3003 organization 3004 "IETF MPLS Working Group"; 3005 contact 3006 "WG Web: 3007 WG List: 3009 Editor: Kamran Raza 3010 3012 Editor: Rajiv Asati 3013 3015 Editor: Xufeng Liu 3016 3018 Editor: Santosh Esale 3019 3021 Editor: Xia Chen 3022 3024 Editor: Himanshu Shah 3025 "; 3027 description 3028 "This YANG module defines the extended components for the 3029 management of Multi-Protocol Label Switching (MPLS) Label 3030 Distribution Protocol (LDP). It is also the model to 3031 be augmented for extended Multipoint LDP (mLDP). 3033 Copyright (c) 2018 IETF Trust and the persons identified as 3034 authors of the code. All rights reserved. 3036 Redistribution and use in source and binary forms, with or 3037 without modification, is permitted pursuant to, and subject to 3038 the license terms contained in, the Simplified BSD License set 3039 forth in Section 4.c of the IETF Trust's Legal Provisions 3040 Relating to IETF Documents 3041 (http://trustee.ietf.org/license-info). 3043 This version of this YANG module is part of RFC XXXX; see the 3044 RFC itself for full legal notices."; 3046 revision 2018-02-28 { 3047 description 3048 "Initial revision."; 3049 reference 3050 "RFC XXXX: YANG Data Model for MPLS LDP."; 3051 } 3053 /* 3054 * Features 3055 */ 3056 feature dual-stack-transport-pereference { 3057 description 3058 "This feature indicates that the system allows to configure 3059 the transport connection pereference in a dual-stack setup."; 3060 } 3061 feature capability-end-of-lib { 3062 description 3063 "This feature indicates that the system allows to configure 3064 LDP end-of-lib capability."; 3065 } 3067 feature capability-typed-wildcard-fec { 3068 description 3069 "This feature indicates that the system allows to configure 3070 LDP typed-wildcard-fec capability."; 3071 } 3073 feature capability-upstream-label-assignment { 3074 description 3075 "This feature indicates that the system allows to configure 3076 LDP upstream label assignment capability."; 3077 } 3079 feature forwarding-nexthop-config { 3080 description 3081 "This feature indicates that the system allows to configure 3082 forwarding nexthop on interfaces."; 3083 } 3085 feature graceful-restart-helper-mode { 3086 description 3087 "This feature indicates that the system supports graceful 3088 restart helper mode."; 3089 } 3091 feature key-chain { 3092 description 3093 "This feature indicates that the system supports keychain for 3094 authentication."; 3095 } 3097 feature per-interface-timer-config { 3098 description 3099 "This feature indicates that the system allows to configure 3100 interface hello timers at the per-interface level."; 3101 } 3103 feature per-peer-admin-down { 3104 description 3105 "This feature indicates that the system allows to 3106 administratively disable a peer."; 3107 } 3108 feature per-peer-graceful-restart-config { 3109 description 3110 "This feature indicates that the system allows to configure 3111 graceful restart at the per-peer level."; 3112 } 3114 feature per-peer-session-attributes-config { 3115 description 3116 "This feature indicates that the system allows to configure 3117 session attributes at the per-peer level."; 3118 } 3120 feature policy-label-assignment-config { 3121 description 3122 "This feature indicates that the system allows to configure 3123 policies to assign labels according to certain prefixes."; 3124 } 3126 feature policy-ordered-label-config { 3127 description 3128 "This feature indicates that the system allows to configure 3129 ordered label policies."; 3130 } 3132 feature policy-targeted-discovery-config { 3133 description 3134 "This feature indicates that the system allows to configure 3135 policies to control the acceptance of targeted neighbor 3136 discovery hello messages."; 3137 } 3139 feature session-downstream-on-demand-config { 3140 description 3141 "This feature indicates that the system allows to configure 3142 session downstream-on-demand"; 3143 } 3145 /* 3146 * Typedefs 3147 */ 3148 typedef neighbor-list-ref { 3149 type string; 3150 description 3151 "A type for a reference to a neighbor address list. 3152 The string value is the name identifier for uniquely 3153 identifying the referenced address list, which contains a list 3154 of addresses that a routing policy can applied. The definition 3155 of such an address list is outside the scope of this document."; 3157 } 3159 typedef prefix-list-ref { 3160 type string; 3161 description 3162 "A type for a reference to a prefix list. 3163 The string value is the name identifier for uniquely 3164 identifying the referenced prefix set, which contains a list 3165 of prefixes that a routing policy can applied. The definition 3166 of such a prefix set is outside the scope of this document."; 3168 } 3170 typedef peer-list-ref { 3171 type string; 3172 description 3173 "A type for a reference to a peer address list. 3174 The string value is the name identifier for uniquely 3175 identifying the referenced address list, which contains a list 3176 of addresses that a routing policy can applied. The definition 3177 of such an address list is outside the scope of this document."; 3178 } 3180 /* 3181 * Identities 3182 */ 3184 /* 3185 * Groupings 3186 */ 3187 grouping address-family-ipv4-augment { 3188 description "Augmentation to address family IPv4."; 3190 uses policy-container; 3192 leaf transport-address { 3193 type inet:ipv4-address; 3194 description 3195 "The transport address advertised in LDP Hello messages. 3196 If this value is not specified, the LDP LSR ID is used as 3197 the transport address."; 3198 reference 3199 "RFC5036. Sec. 3.5.2."; 3200 } 3201 } // address-family-ipv4-augment 3203 grouping authentication-keychain-augment { 3204 description "Augmentation to authentication to add keychain."; 3205 leaf key-chain { 3206 type key-chain:key-chain-ref; 3207 description 3208 "key-chain name. 3209 If not specified, no key chain is used."; 3210 } 3211 } // authentication-keychain-augment 3213 grouping capability-augment { 3214 description "Augmentation to capability."; 3216 container end-of-lib { 3217 if-feature capability-end-of-lib; 3218 description 3219 "Configure end-of-lib capability."; 3220 leaf enable { 3221 type boolean; 3222 default false; 3223 description 3224 "Enable end-of-lib capability."; 3225 } 3226 } 3227 container typed-wildcard-fec { 3228 if-feature capability-typed-wildcard-fec; 3229 description 3230 "Configure typed-wildcard-fec capability."; 3231 leaf enable { 3232 type boolean; 3233 default false; 3234 description 3235 "Enable typed-wildcard-fec capability."; 3236 } 3237 } 3238 container upstream-label-assignment { 3239 if-feature capability-upstream-label-assignment; 3240 description 3241 "Configure upstream label assignment capability."; 3242 leaf enable { 3243 type boolean; 3244 default false; 3245 description 3246 "Enable upstream label assignment."; 3247 } 3248 } 3249 } // capability-augment 3251 grouping global-augment { 3252 description "Augmentation to global attributes."; 3253 leaf igp-synchronization-delay { 3254 type uint16 { 3255 range "0 | 3..300"; 3256 } 3257 units seconds; 3258 default 0; 3259 description 3260 "Sets the interval that the LDP waits before notifying the 3261 Interior Gateway Protocol (IGP) that label exchange is 3262 completed so that IGP can start advertising the normal 3263 metric for the link. 3264 If the value is not specified, there is no delay."; 3265 } 3266 } // global-augment 3268 grouping global-forwarding-nexthop-augment { 3269 description 3270 "Augmentation to global forwarding nexthop interfaces."; 3272 container forwarding-nexthop { 3273 if-feature forwarding-nexthop-config; 3274 description 3275 "Configuration for forwarding nexthop."; 3277 container interfaces { 3278 description 3279 "A list of interfaces on which forwarding is disabled."; 3281 list interface { 3282 key "name"; 3283 description 3284 "List of LDP interfaces used for LDP Basic Discovery."; 3285 uses ldp:ldp-interface-ref; 3286 list address-family { 3287 key "afi"; 3288 description 3289 "Per-vrf per-af params."; 3290 leaf afi { 3291 type ldp:ldp-address-family; 3292 description 3293 "Address family type value."; 3294 } 3295 leaf ldp-disable { 3296 type boolean; 3297 default false; 3298 description 3299 "'true' to disable LDP forwarding on the interface."; 3300 } 3302 } // address-family 3303 } // list interface 3304 } // interfaces 3305 } // forwarding-nexthop 3306 } // global-forwarding-nexthop-augment 3308 grouping graceful-restart-augment { 3309 description "Augmentation to graceful restart."; 3311 leaf helper-enable { 3312 if-feature graceful-restart-helper-mode; 3313 type boolean; 3314 default false; 3315 description 3316 "Enable or disable graceful restart helper mode."; 3317 } 3318 } // graceful-restart-augment 3320 grouping interface-address-family-ipv4-augment { 3321 description "Augmentation to interface address family IPv4."; 3323 leaf transport-address { 3324 type union { 3325 type enumeration { 3326 enum "use-global-transport-address" { 3327 description 3328 "Use the transport address set at the global level 3329 common for all interfaces for this address family."; 3330 } 3331 enum "use-interface-address" { 3332 description 3333 "Use interface address as the transport address."; 3334 } 3335 } 3336 type inet:ipv4-address; 3337 } 3338 default "use-global-transport-address"; 3339 description 3340 "IP address to be advertised as the LDP transport address."; 3341 } 3342 } // interface-address-family-ipv4-augment 3344 grouping interface-address-family-ipv6-augment { 3345 description "Augmentation to interface address family IPv6."; 3347 leaf transport-address { 3348 type union { 3349 type enumeration { 3350 enum "use-global-transport-address" { 3351 description 3352 "Use the transport address set at the global level 3353 common for all interfaces for this address family."; 3354 } 3355 enum "use-interface-address" { 3356 description 3357 "Use interface address as the transport address."; 3358 } 3359 } 3360 type inet:ipv6-address; 3361 } 3362 default "use-global-transport-address"; 3363 description 3364 "IP address to be advertised as the LDP transport address."; 3365 } 3366 } // interface-address-family-ipv6-augment 3368 grouping interface-augment { 3369 description "Augmentation to interface."; 3371 uses ldp:basic-discovery-timers { 3372 if-feature per-interface-timer-config; 3373 } 3374 leaf igp-synchronization-delay { 3375 if-feature per-interface-timer-config; 3376 type uint16 { 3377 range "0 | 3..300"; 3378 } 3379 units seconds; 3380 default 0; 3381 description 3382 "Sets the interval that the LDP waits before notifying the 3383 Interior Gateway Protocol (IGP) that label exchange is 3384 completed so that IGP can start advertising the normal 3385 metric for the link. 3386 If the value is not specified, there is no delay."; 3387 } 3388 } // interface-augment 3390 grouping peer-af-policy-container { 3391 description 3392 "LDP policy attribute container under peer address-family."; 3393 container label-policy { 3394 description 3395 "Label policy attributes."; 3396 container advertise { 3397 description 3398 "Label advertising policies."; 3399 leaf prefix-list { 3400 type prefix-list-ref; 3401 description 3402 "Applies the prefix list to filter outgoing label 3403 advertisements. 3404 If the value is not specified, no prefix filter 3405 is applied."; 3406 } 3407 } 3408 container accept { 3409 description 3410 "Label advertisement acceptance policies."; 3411 leaf prefix-list { 3412 type prefix-list-ref; 3413 description 3414 "Applies the prefix list to filer incoming label 3415 advertisements. 3416 If the value is not specified, no prefix filter 3417 is applied."; 3418 } 3419 } // accept 3420 } // label-policy 3421 } // peer-af-policy-container 3423 grouping peer-augment { 3424 description "Augmentation to each peer list entry."; 3426 leaf admin-down { 3427 if-feature per-peer-admin-down; 3428 type boolean; 3429 default false; 3430 description 3431 "'true' to disable the peer."; 3432 } 3434 uses ldp:graceful-restart-attributes-per-peer { 3435 if-feature per-peer-graceful-restart-config; 3436 } 3438 uses ldp:peer-attributes { 3439 if-feature per-peer-session-attributes-config; 3440 } 3441 } // peer-augment 3443 grouping peers-augment { 3444 description "Augmentation to peers container."; 3445 container session-downstream-on-demand { 3446 if-feature session-downstream-on-demand-config; 3447 description 3448 "Session downstream-on-demand attributes."; 3449 leaf enable { 3450 type boolean; 3451 default false; 3452 description 3453 "'true' if session downstream-on-demand is enabled."; 3454 } 3455 leaf peer-list { 3456 type peer-list-ref; 3457 description 3458 "The name of a peer ACL, to be applied to the 3459 downstream-on-demand sessions. 3460 If this value is not specified, no filter is applied to 3461 any downstream-on-demand sessions."; 3462 } 3463 } 3464 container dual-stack-transport-pereference { 3465 if-feature dual-stack-transport-pereference; 3466 description 3467 "The settings of peers to establish TCP connection in a 3468 dual-stack setup."; 3469 leaf max-wait { 3470 type uint16 { 3471 range "0..60"; 3472 } 3473 default 30; 3474 description 3475 "The maximum wait time in seconds for preferred transport 3476 connection establishment. 0 indicates no preference."; 3477 } 3478 container prefer-ipv4 { 3479 presence 3480 "Present if IPv4 is prefered for transport connection 3481 establishment, subject to the 'peer-list' in this 3482 container."; 3483 description 3484 "Uses IPv4 as the prefered address family for transport 3485 connection establishment, subject to the 'peer-list' in 3486 this container. 3487 If this container is not present, as a default, IPv6 is 3488 the prefered address family for transport connection 3489 establishment."; 3490 leaf peer-list { 3491 type peer-list-ref; 3492 description 3493 "The name of a peer ACL, to be applied to the IPv4 3494 transport connections. 3495 If this value is not specified, no filter is applied, 3496 and the IPv4 is prefered for all peers."; 3497 } 3498 } 3499 } 3500 } // peers-augment 3502 grouping policy-container { 3503 description 3504 "LDP policy attributes."; 3505 container label-policy { 3506 description 3507 "Label policy attributes."; 3508 container advertise { 3509 description 3510 "Label advertising policies."; 3511 container egress-explicit-null { 3512 description 3513 "Enables an egress router to advertise an 3514 explicit null label (value 0) in place of an 3515 implicit null label (value 3) to the 3516 penultimate hop router."; 3517 leaf enable { 3518 type boolean; 3519 default false; 3520 description 3521 "'true' to enable explicit null."; 3522 } 3523 } 3524 leaf prefix-list { 3525 type prefix-list-ref; 3526 description 3527 "Applies the prefix list to filter outgoing label 3528 advertisements. 3529 If the value is not specified, no prefix filter 3530 is applied."; 3531 } 3532 } // advertise 3533 container accept { 3534 description 3535 "Label advertisement acceptance policies."; 3536 leaf prefix-list { 3537 type prefix-list-ref; 3538 description 3539 "Applies the prefix list to filter incoming label 3540 advertisements. 3542 If the value is not specified, no prefix filter 3543 is applied."; 3544 } 3545 } // accept 3546 container assign { 3547 if-feature policy-label-assignment-config; 3548 description 3549 "Label assignment policies"; 3550 container independent-mode { 3551 description 3552 "Independent label policy attributes."; 3553 leaf prefix-list { 3554 type prefix-list-ref; 3555 description 3556 "Assign labels according to certain prefixes. 3557 If the value is not specified, no prefix filter 3558 is applied (labels are assigned to all learned 3559 routes)."; 3561 } 3562 } // independent-mode 3563 container ordered-mode { 3564 if-feature policy-ordered-label-config; 3565 description 3566 "Ordered label policy attributes."; 3567 leaf egress-prefix-list { 3568 type prefix-list-ref; 3569 description 3570 "Assign labels according to certain prefixes for 3571 egress LSR."; 3572 } 3573 } // ordered-mode 3574 } // assign 3575 } // label-policy 3576 } // policy-container 3578 /* 3579 * Configuration and state data nodes 3580 */ 3581 // Forwarding nexthop augmentation to the global tree 3582 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3583 + "ldp:global" { 3584 description "Graceful forwarding nexthop augmentation."; 3585 uses global-forwarding-nexthop-augment; 3586 } 3588 // global/address-families/ipv6 3589 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3590 + "ldp:global/ldp:address-families" { 3591 description "Global IPv6 augmentation."; 3593 container ipv6 { 3594 presence 3595 "Present if IPv6 is enabled, unless the 'enable' 3596 leaf is set to 'false'"; 3597 description 3598 "Containing data related to the IPv6 address family."; 3600 leaf enable { 3601 type boolean; 3602 default true; 3603 description 3604 "'true' to enable the address family."; 3605 } 3607 uses policy-container; 3609 leaf transport-address { 3610 type inet:ipv6-address; 3611 mandatory true; 3612 description 3613 "The transport address advertised in LDP Hello messages."; 3614 } 3616 leaf label-distribution-controlmode { 3617 type enumeration { 3618 enum independent { 3619 description 3620 "Independent label distribution control."; 3621 } 3622 enum ordered { 3623 description 3624 "Ordered label distribution control."; 3625 } 3626 } 3627 config false; 3628 description 3629 "Label distribution control mode."; 3630 reference 3631 "RFC5036: LDP Specification. Sec 2.6."; 3632 } 3634 // ipv6 bindings 3635 container bindings { 3636 config false; 3637 description 3638 "LDP address and label binding information."; 3639 list address { 3640 key "address"; 3641 description 3642 "List of address bindings learned by LDP."; 3643 leaf address { 3644 type inet:ipv6-address; 3645 description 3646 "The IPv6 address learned from an Address 3647 message received from or advertised to a peer."; 3648 } 3649 uses ldp:binding-address-state-attributes; 3650 } // binding-address 3652 list fec-label { 3653 key "fec"; 3654 description 3655 "List of FEC-label bindings learned by LDP."; 3656 leaf fec { 3657 type inet:ipv6-prefix; 3658 description 3659 "The prefix FEC value in the FEC-label binding, 3660 learned in a Label Mapping message received from 3661 or advertised to a peer."; 3662 } 3663 uses ldp:binding-label-state-attributes; 3664 } // fec-label 3665 } // bindings 3666 } // ipv6 3667 } 3669 // discovery/interfaces/interface/address-families/ipv6 3670 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3671 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3672 + "ldp:address-families" { 3673 description "Interface IPv6 augmentation."; 3675 container ipv6 { 3676 presence 3677 "Present if IPv6 is enabled, unless the 'enable' 3678 leaf is set to 'false'"; 3679 description 3680 "IPv6 address family."; 3682 leaf enable { 3683 type boolean; 3684 default true; 3685 description 3686 "Enable the address family on the interface."; 3687 } 3689 // ipv6 3690 container hello-adjacencies { 3691 config false; 3692 description 3693 "Containing a list of hello adjacencies."; 3695 list hello-adjacency { 3696 key "adjacent-address"; 3697 config false; 3698 description "List of hello adjacencies."; 3700 leaf adjacent-address { 3701 type inet:ipv6-address; 3702 description 3703 "Neighbor address of the hello adjacency."; 3704 } 3706 uses ldp:adjacency-state-attributes; 3707 uses ldp:ldp-peer-ref-container; 3708 } // hello-adjacency 3709 } // hello-adjacencies 3710 } // ipv6 3711 } 3713 // discovery/targeted/address-families/ipv6 3714 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3715 + "ldp:discovery/ldp:targeted/ldp:address-families" { 3716 description "Targeted discovery IPv6 augmentation."; 3718 container ipv6 { 3719 presence 3720 "Present if IPv6 is enabled."; 3721 description 3722 "IPv6 address family."; 3724 container hello-adjacencies { 3725 config false; 3726 description 3727 "Containing a list of hello adjacencies."; 3729 list hello-adjacency { 3730 key "local-address adjacent-address"; 3731 config false; 3732 description "List of hello adjacencies."; 3733 leaf local-address { 3734 type inet:ipv6-address; 3735 description 3736 "Local address of the hello adjacency."; 3737 } 3738 leaf adjacent-address { 3739 type inet:ipv6-address; 3740 description 3741 "Neighbor address of the hello adjacency."; 3742 } 3744 uses ldp:adjacency-state-attributes; 3745 uses ldp:ldp-peer-ref-container; 3746 } // hello-adjacency 3747 } // hello-adjacencies 3749 list target { 3750 key "adjacent-address"; 3751 description 3752 "Targeted discovery params."; 3754 leaf adjacent-address { 3755 type inet:ipv6-address; 3756 description 3757 "Configures a remote LDP neighbor and enables 3758 extended LDP discovery of the specified 3759 neighbor."; 3760 } 3761 leaf enable { 3762 type boolean; 3763 default true; 3764 description 3765 "Enable the target."; 3766 } 3767 leaf local-address { 3768 type inet:ipv6-address; 3769 description 3770 "The local address used as the source address to send 3771 targeted Hello messages. 3772 If the value is not specified, the transport-address 3773 is used as the source address."; 3774 } 3775 } // target 3776 } // ipv6 3777 } 3779 // /peers/peer/state/address-families/ipv6 3780 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3781 + "ldp:peers/ldp:peer/ldp:address-families" { 3782 description "Peer state IPv6 augmentation."; 3784 container ipv6 { 3785 presence 3786 "Present if IPv6 is enabled."; 3787 description 3788 "IPv6 address family."; 3790 container hello-adjacencies { 3791 config false; 3792 description 3793 "Containing a list of hello adjacencies."; 3795 list hello-adjacency { 3796 key "local-address adjacent-address"; 3797 description "List of hello adjacencies."; 3799 leaf local-address { 3800 type inet:ipv6-address; 3801 description 3802 "Local address of the hello adjacency."; 3803 } 3804 leaf adjacent-address { 3805 type inet:ipv6-address; 3806 description 3807 "Neighbor address of the hello adjacency."; 3808 } 3810 uses ldp:adjacency-state-attributes; 3812 leaf interface { 3813 type if:interface-ref; 3814 description "Interface for this adjacency."; 3815 } 3816 } // hello-adjacency 3817 } // hello-adjacencies 3818 } // ipv6 3819 } 3821 /* 3822 * Configuration data and operational state data nodes 3823 */ 3824 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3825 + "ldp:global" { 3826 description "Graceful restart augmentation."; 3827 uses global-augment; 3828 } 3829 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3830 + "ldp:global/ldp:capability" { 3831 description "Capability augmentation."; 3832 uses capability-augment; 3833 } 3835 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3836 + "ldp:global/ldp:graceful-restart" { 3837 description "Graceful restart augmentation."; 3838 uses graceful-restart-augment; 3839 } 3841 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3842 + "ldp:global/ldp:address-families/ldp:ipv4" { 3843 description "Address family IPv4 augmentation."; 3844 uses address-family-ipv4-augment; 3845 } 3847 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3848 + "ldp:discovery/ldp:interfaces/ldp:interface" { 3849 description "Interface augmentation."; 3850 uses interface-augment; 3851 } 3853 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3854 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3855 + "ldp:address-families/ldp:ipv4" { 3856 description "Interface address family IPv4 augmentation."; 3857 uses interface-address-family-ipv4-augment; 3858 } 3860 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3861 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3862 + "ldp:address-families/ldp-ext:ipv6" { 3863 description "Interface address family IPv6 augmentation."; 3864 uses interface-address-family-ipv6-augment; 3865 } 3867 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3868 + "ldp:discovery/ldp:targeted/ldp:hello-accept" { 3869 description "Targeted discovery augmentation."; 3870 leaf neighbor-list { 3871 if-feature policy-targeted-discovery-config; 3872 type neighbor-list-ref; 3873 description 3874 "The name of a neighbor ACL, to accept Hello messages from 3875 LDP peers as permitted by the neighbor-list policy. 3876 If this value is not specified, targeted Hello messages from 3877 any source are accepted."; 3878 } 3879 } 3881 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3882 + "ldp:peers" { 3883 description "Peers augmentation."; 3884 uses peers-augment; 3885 } 3887 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3888 + "ldp:peers/ldp:authentication/ldp:auth-type-selection" { 3889 if-feature key-chain; 3890 description "Peers authentication augmentation."; 3891 case auth-key-chain { 3892 uses authentication-keychain-augment; 3893 } 3894 } 3896 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3897 + "ldp:peers/ldp:peer" { 3898 description "Peer list entry augmentation."; 3899 uses peer-augment; 3900 } 3902 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3903 + "ldp:peers/ldp:peer/ldp:authentication/" 3904 + "ldp:auth-type-selection" { 3905 if-feature key-chain; 3906 description "Peer list entry authentication augmentation."; 3907 case auth-key-chain { 3908 uses authentication-keychain-augment; 3909 } 3910 } 3912 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3913 + "ldp:peers/ldp:peer/ldp:address-families/ldp:ipv4" { 3914 description 3915 "Peer list entry IPv4 augmentation."; 3916 uses peer-af-policy-container; 3917 } 3919 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3920 + "ldp:peers/ldp:peer/ldp:address-families/ldp-ext:ipv6" { 3921 description 3922 "Peer list entry IPv6 augmentation."; 3923 uses peer-af-policy-container; 3924 } 3926 } 3928 3930 Figure 18 3932 10. Security Considerations 3934 The configuration, state, action and notification data defined using 3935 YANG data models in this document are likely to be accessed via the 3936 protocols such as NETCONF [RFC6241] etc. 3938 Hence, YANG implementations MUST comply with the security 3939 requirements specified in section 15 of [RFC6020]. Additionally, 3940 NETCONF implementations MUST comply with the security requirements 3941 specified in sections 2.2, 2.3 and 9 of [RFC6241] as well as section 3942 3.7 of [RFC6536]. 3944 11. IANA Considerations 3946 This document does not extend LDP base protocol specifiction and 3947 hence there are no IANA considerations. 3949 Note to the RFC Editor: Please remove IANA section before the 3950 publication. 3952 12. Acknowledgments 3954 The authors would like to acknowledge Eddie Chami, Nagendra Kumar, 3955 Mannan Venkatesan, Pavan Beeram for their contribution to this 3956 document. We also acknowledge Ladislav Lhotka for his useful 3957 comments as the YANG Doctor. 3959 13. References 3961 13.1. Normative References 3963 [I-D.ietf-netmod-revised-datastores] 3964 Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 3965 and R. Wilton, "Network Management Datastore 3966 Architecture", draft-ietf-netmod-revised-datastores-10 3967 (work in progress), January 2018. 3969 [I-D.ietf-netmod-rfc6087bis] 3970 Bierman, A., "Guidelines for Authors and Reviewers of YANG 3971 Data Model Documents", draft-ietf-netmod-rfc6087bis-18 3972 (work in progress), February 2018. 3974 [I-D.ietf-rtgwg-ni-model] 3975 Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. 3976 Liu, "YANG Model for Network Instances", draft-ietf-rtgwg- 3977 ni-model-11 (work in progress), March 2018. 3979 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3980 Requirement Levels", BCP 14, RFC 2119, 3981 DOI 10.17487/RFC2119, March 1997, 3982 . 3984 [RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful 3985 Restart Mechanism for Label Distribution Protocol", 3986 RFC 3478, DOI 10.17487/RFC3478, February 2003, 3987 . 3989 [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., 3990 "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, 3991 October 2007, . 3993 [RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream 3994 Label Assignment and Context-Specific Label Space", 3995 RFC 5331, DOI 10.17487/RFC5331, August 2008, 3996 . 3998 [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. 3999 Le Roux, "LDP Capabilities", RFC 5561, 4000 DOI 10.17487/RFC5561, July 2009, 4001 . 4003 [RFC5918] Asati, R., Minei, I., and B. Thomas, "Label Distribution 4004 Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class 4005 (FEC)", RFC 5918, DOI 10.17487/RFC5918, August 2010, 4006 . 4008 [RFC5919] Asati, R., Mohapatra, P., Chen, E., and B. Thomas, 4009 "Signaling LDP Label Advertisement Completion", RFC 5919, 4010 DOI 10.17487/RFC5919, August 2010, 4011 . 4013 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 4014 the Network Configuration Protocol (NETCONF)", RFC 6020, 4015 DOI 10.17487/RFC6020, October 2010, 4016 . 4018 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 4019 and A. Bierman, Ed., "Network Configuration Protocol 4020 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 4021 . 4023 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 4024 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 4025 November 2011, . 4027 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 4028 Protocol (NETCONF) Access Control Model", RFC 6536, 4029 DOI 10.17487/RFC6536, March 2012, 4030 . 4032 [RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. 4033 Papneja, "Updates to LDP for IPv6", RFC 7552, 4034 DOI 10.17487/RFC7552, June 2015, 4035 . 4037 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 4038 Management", RFC 8022, DOI 10.17487/RFC8022, November 4039 2016, . 4041 13.2. Informative References 4043 [I-D.ietf-mpls-mldp-yang] 4044 Raza, K., Krishnaswamy, S., Liu, X., Esale, S., Andersson, 4045 L., and J. Tantsura, "YANG Data Model for MPLS mLDP", 4046 draft-ietf-mpls-mldp-yang-03 (work in progress), November 4047 2017. 4049 [I-D.ietf-rtgwg-policy-model] 4050 Qu, Y., Tantsura, J., Lindem, A., Liu, X., and A. Shaikh, 4051 "A YANG Data Model for Routing Policy Management", draft- 4052 ietf-rtgwg-policy-model-02 (work in progress), March 2018. 4054 [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private 4055 Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February 4056 2006, . 4058 [RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. 4059 King, "LDP Extensions for Multi-Topology", RFC 7307, 4060 DOI 10.17487/RFC7307, July 2014, 4061 . 4063 Appendix A. Additional Contributors 4065 Reshad Rahman 4066 Cisco Systems Inc. 4067 Email: rrahman@cisco.com 4069 Stephane Litkowski 4070 Orange. 4071 Email: stephane.litkowski@orange.com 4073 Authors' Addresses 4075 Kamran Raza 4076 Cisco Systems, Inc. 4077 2000 Innovation Drive 4078 Kanata, ON K2K-3E8 4079 CA 4080 Email: skraza@cisco.com 4082 Rajiv Asati 4083 Cisco Systems, Inc. 4084 USA 4085 Email: rajiva@cisco.com 4087 Danial Johari 4088 Cisco Systems, Inc. 4089 CA 4090 Email: dajohari@cisco.com 4092 Xufeng Liu 4093 Jabil 4094 USA 4095 Email: xufeng_liu@jabil.com 4097 Jeff Tantsura 4098 Email: jefftant.ietf@gmail.com 4100 Santosh Esale 4101 Juniper Networks 4102 USA 4103 Email: sesale@juniper.net 4104 Xia Chen 4105 Huawei Technologies 4106 CN 4107 Email: jescia.chenxia@huawei.com 4109 Loa Andersson 4110 Huawei Technologies 4111 Email: loa@pi.nu 4113 Himanshu Shah 4114 Ciena Corporation 4115 USA 4116 Email: hshah@ciena.com 4118 Matthew Bocci 4119 Nokia 4120 Email: matthew.bocci@nokia.com