idnits 2.17.1 draft-ietf-mpls-ldp-yang-06.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == The page length should not exceed 58 lines per page, but there was 2 longer pages, the longest (page 30) being 67 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 501 has weird spacing: '...address ine...' == Line 519 has weird spacing: '...address ine...' == Line 579 has weird spacing: '...address ine...' == Line 907 has weird spacing: '...address ine...' == Line 1015 has weird spacing: '...address inet:...' == (5 more instances...) == The document doesn't use any RFC 2119 keywords, yet has text resembling RFC 2119 boilerplate text. -- The document date (May 31, 2019) is 1785 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 (-11) exists of draft-ietf-mpls-mldp-yang-05 == Outdated reference: A later version (-31) exists of draft-ietf-rtgwg-policy-model-06 Summary: 0 errors (**), 0 flaws (~~), 11 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 MPLS Working Group K. Raza 2 Internet-Draft R. Asati 3 Intended status: Standards Track Cisco Systems 4 Expires: December 2, 2019 5 X. Liu 6 Volta Networks 8 S. Esale 9 Juniper Networks 11 X. Chen 12 Huawei Technologies 14 H. Shah 15 Ciena Corporation 17 May 31, 2019 19 YANG Data Model for MPLS LDP 20 draft-ietf-mpls-ldp-yang-06 22 Abstract 24 This document describes a YANG data model for Multi-Protocol Label 25 Switching (MPLS) Label Distribution Protocol (LDP). The model also 26 serves as the base model to define Multipoint LDP (mLDP) model. 28 The YANG modules in this document conform to the Network Management 29 Datastore Architecture (NMDA). 31 Status of This Memo 33 This Internet-Draft is submitted in full conformance with the 34 provisions of BCP 78 and BCP 79. 36 Internet-Drafts are working documents of the Internet Engineering 37 Task Force (IETF). Note that other groups may also distribute 38 working documents as Internet-Drafts. The list of current Internet- 39 Drafts is at https://datatracker.ietf.org/drafts/current/. 41 Internet-Drafts are draft documents valid for a maximum of six months 42 and may be updated, replaced, or obsoleted by other documents at any 43 time. It is inappropriate to use Internet-Drafts as reference 44 material or to cite them other than as "work in progress." 45 This Internet-Draft will expire on December 2, 2019. 47 Copyright Notice 49 Copyright (c) 2019 IETF Trust and the persons identified as the 50 document authors. All rights reserved. 52 This document is subject to BCP 78 and the IETF Trust's Legal 53 Provisions Relating to IETF Documents 54 (https://trustee.ietf.org/license-info) in effect on the date of 55 publication of this document. Please review these documents 56 carefully, as they describe your rights and restrictions with respect 57 to this document. Code Components extracted from this document must 58 include Simplified BSD License text as described in Section 4.e of 59 the Trust Legal Provisions and are provided without warranty as 60 described in the Simplified BSD License. 62 Table of Contents 64 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 65 1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 3 66 2. Specification of Requirements . . . . . . . . . . . . . . . . 4 67 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 68 4. Consolidated Tree . . . . . . . . . . . . . . . . . . . . . . 7 69 5. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 16 70 5.1. Configuration Tree . . . . . . . . . . . . . . . . . . . 19 71 5.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 19 72 5.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 20 73 5.2. Configuration Hierarchy . . . . . . . . . . . . . . . . . 23 74 5.2.1. Per-VRF parameters . . . . . . . . . . . . . . . . . 23 75 6. Operational State . . . . . . . . . . . . . . . . . . . . . . 25 76 6.1. Operational Tree . . . . . . . . . . . . . . . . . . . . 25 77 6.1.1. Base . . . . . . . . . . . . . . . . . . . . . . . . 25 78 6.1.2. Extended . . . . . . . . . . . . . . . . . . . . . . 29 79 6.2. States . . . . . . . . . . . . . . . . . . . . . . . . . 31 80 6.2.1. Adjacency state . . . . . . . . . . . . . . . . . . . 31 81 6.2.2. Peer state . . . . . . . . . . . . . . . . . . . . . 32 82 6.2.3. Bindings state . . . . . . . . . . . . . . . . . . . 33 83 6.2.4. Capabilities state . . . . . . . . . . . . . . . . . 35 84 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 35 85 8. Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 86 9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 37 87 9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 37 88 9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 65 89 10. Security Considerations . . . . . . . . . . . . . . . . . . . 86 90 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 87 91 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 87 92 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 88 93 13.1. Normative References . . . . . . . . . . . . . . . . . . 88 94 13.2. Informative References . . . . . . . . . . . . . . . . . 90 95 Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 91 96 Appendix B. Additional Contributors . . . . . . . . . . . . . . 96 97 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 96 99 1. Introduction 101 The Network Configuration Protocol (NETCONF) [RFC6241] is one of the 102 network management protocols that defines mechanisms to manage 103 network devices. YANG [RFC6020] [RFC7950] is a modular language that 104 represents data structures in an XML tree format, and is used as a 105 data modelling language for the NETCONF. 107 This document introduces a YANG data model for MPLS Label 108 Distribution Protocol (LDP) [RFC5036]. This model also covers LDP 109 IPv6 [RFC7552] and LDP capabilities [RFC5561] specifications. 111 The data model is defined for following constructs that are used for 112 managing the protocol: 114 o Configuration 116 o Operational State 118 o Executables (Actions) 120 o Notifications 122 This document is organized to define the data model for each of the 123 above constructs in the sequence as listed above. 125 1.1. Base and Extended 127 The configuration and state items are divided into following two 128 broad categories: 130 o Base 132 o Extended 134 The "base" category contains the basic and fundamental features that 135 are covered in LDP base specification [RFC5036] and constitute the 136 minumum requirements for a typical base LDP deployment. Whereas, the 137 "extended" category contains all other non-base features. All the 138 items in a base category are mandatory and hence no "if-feature" is 139 allowed under the "base" category model. The base and extended 140 catogories are defined in their own modules as described later. 142 The example of base feature includes the configuration of LDP lsr-id, 143 enabling LDP interfaces, setting password for LDP session etc., 144 whereas the examples of extended feature include inbound/outbound 145 label policies, igp sync, downstream-on-demand etc. This is worth 146 higlighting that LDP IPv6 [RFC7552] is also categorized as an 147 extended feature. 149 While "base" model support will suffice for small deployments, it is 150 expected that large deployments will require not only the "base" 151 module support from the vendors but also the support for "extended" 152 model for some extended feature(s) of interest. 154 2. Specification of Requirements 156 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 157 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 158 document are to be interpreted as described in BCP 14 [RFC2119] 159 [RFC8174] when, and only when, they appear in all capitals, as shown 160 here. 162 In this document, the word "IP" is used to refer to both IPv4 and 163 IPv6, unless otherwise explicitly stated. For example, "IP address 164 family" means and be read as "IPv4 and/or IPv6 address family" 166 3. Overview 168 This document defines two new modules for LDP YANG support: 170 o "ietf-mpls-ldp" module that models the base LDP features and 171 augments /rt:routing/rt:control-plane-protocols defined in 172 [RFC8349] 174 o extended "ietf-mpls-ldp-extended" module that models the extended 175 LDP features and augments the base LDP 177 It is to be noted that mLDP data model [I-D.ietf-mpls-mldp-yang] 178 augments LDP base and extended models to model the base and extended 179 mLDP features respectively. 181 There are four main containers in our module(s): 183 o Read-Write parameters for configuration (Discussed in Section 5) 185 o Read-only parameters for operational state (Discussed in 186 Section 6) 188 o Notifications for events (Discussed in Section 7) 189 o RPCs for executing commands to perform some action (Discussed in 190 Section 8) 192 The modeling in this document conforms to the Network Management 193 Datastore Architecture (NMDA) defined in [RFC8342]. The operational 194 state data is combined with the associated configuration data in the 195 same hierarchy [RFC8407]. When protocol states are retrieved from 196 the NMDA operational state datastore, the returned states cover all 197 "config true" (rw) and "config false" (ro) nodes defined in the 198 schema. 200 Following diagram depicts high level LDP yang tree organization and 201 hierarchy: 203 +-- rw routing 204 +-- rw control-plane-protocols 205 +-- rw mpls-ldp 206 +-- rw ... 207 +-- rw ... // base 208 | +-- rw ... 209 | +-- ro ... 210 | +-- 211 +-- ro ... 212 | +-- ro ... 213 | +-- ro ... 214 | +-- 215 +-- rw ldp-ext: .... // extended 216 | +-- rw ... 217 | +-- ro ... 218 | +-- 219 +-- ro ... 220 +-- ro ... 221 +-- ro ... 223 rpcs: 224 +-- x mpls-ldp-some_action 225 +-- x . . . . . 227 notifications: 228 +--- n mpls-ldp-some_event 229 +--- n ... 231 Figure 1 233 Before going into data model details, it is important to take note of 234 the following points: 236 o This module aims to address only the core LDP parameters as per 237 RFC specification, as well as some widely deployed non-RFC 238 features (such as label policies, session authentication etc). 239 Any vendor specific feature should be defined in a vendor-specific 240 augmentation of this model. 242 o Multi-topology LDP [RFC7307] is beyond the scope of this document. 244 o This module does not cover any applications running on top of LDP, 245 nor does it cover any OAM procedures for LDP. 247 o This model is a VPN Forwarding and Routing (VRF)-centric model. 248 It is important to note that [RFC4364] defines VRF tables and 249 default forwarding tables as different, however from a yang 250 modelling perspective this introduces unnecessary complications, 251 hence we are treating the default forwarding table as just another 252 VRF. 254 o A "network-instance", as defined in [RFC8529], refers to a VRF 255 instance (both default and non-default) within the scope of this 256 model. 258 o This model supports two address-families, namely "ipv4" and 259 "ipv6". 261 o This model assumes platform-wide label space (i.e. label space Id 262 of zero). However, when Upstream Label assignment [RFC6389] is in 263 use, an upstream assigned label is looked up in a Context-Specific 264 label space as defined in [RFC5331]. 266 o The label and peer policies (including filters) are defined using 267 a prefix-list. When used for a peer policy, the prefix refers to 268 the LSR Id of the peer. The prefix-list is referenced from 269 routing-policy model as defined in [I-D.ietf-rtgwg-policy-model]. 271 o This model uses the terms LDP "neighbor"/"adjacency", "session", 272 and "peer" with the following semantics: 274 * Neighbor/Adjacency: An LDP enabled LSR that is discovered 275 through LDP discovery mechanisms. 277 * Session: An LDP neighbor with whom a TCP connection has been 278 established. 280 * Peer: An LDP session which has successfully progressed beyond 281 its initialization phase and is either already exchanging the 282 bindings or is ready to do so. 284 It is to be noted that LDP Graceful Restart mechanisms defined in 285 [RFC3478] allow keeping the exchanged bindings for some time after 286 a session goes down with a peer. We call such a state belonging 287 to a "stale" peer -- i.e. keeping peer bindings from a peer with 288 whom currently there is either no connection established or 289 connection is established but GR session is in recovery state. 290 When used in this document, the above terms will refer strictly to 291 the semantics and definitions defined for them. 293 A simplified graphical tree representation of full LDP YANG data 294 model is presented in Figure 2, whereas LDP configuration (base and 295 extended), state (base and extended), notification, and rpc are 296 grapically represented in Figure 5, Figure 6, Figure 8, Figure 9, 297 Figure 15, and Figure 16 respectively. The meaning of the symbols in 298 these tree diagrams is defined in [RFC8340]. 300 The actual base and extended model definition in YANG is captured in 301 Section 9. 303 While presenting the YANG tree view and actual .yang specification, 304 this document assumes readers' familiarity with the concepts of YANG 305 modeling, its presentation and its compilation. 307 4. Consolidated Tree 309 Following is a consolidated tree representation of configuration, 310 state, notification, and rpc items under LDP base and extended. 312 module: ietf-mpls-ldp 313 augment /rt:routing/rt:control-plane-protocols: 314 +--rw mpls-ldp! 315 +--rw global 316 | +--rw capability 317 | | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? 318 | | | +--rw ldp-ext:enable? boolean 319 | | +--rw ldp-ext:typed-wildcard-fec 320 | | | {capability-typed-wildcard-fec}? 321 | | | +--rw ldp-ext:enable? boolean 322 | | +--rw ldp-ext:upstream-label-assignment 323 | | {capability-upstream-label-assignment}? 324 | | +--rw ldp-ext:enable? boolean 325 | +--rw graceful-restart 326 | | +--rw enable? boolean 327 | | +--rw reconnect-time? uint16 328 | | +--rw recovery-time? uint16 329 | | +--rw forwarding-holdtime? uint16 330 | | +--rw ldp-ext:helper-enable? boolean 331 | | {graceful-restart-helper-mode}? 332 | +--rw lsr-id? 333 | | rt-types:router-id 334 | +--rw address-families 335 | | +--rw ipv4! 336 | | | +--rw enable? boolean 337 | | | +--ro label-distribution-controlmode? enumeration 338 | | | +--ro bindings 339 | | | | +--ro address* [address] 340 | | | | | +--ro address inet:ipv4-address 341 | | | | | +--ro advertisement-type? advertised-received 342 | | | | | +--ro peer 343 | | | | | +--ro lsr-id? leafref 344 | | | | | +--ro label-space-id? leafref 345 | | | | +--ro fec-label* [fec] 346 | | | | +--ro fec inet:ipv4-prefix 347 | | | | +--ro peer* 348 | | | | [lsr-id label-space-id advertisement-type] 349 | | | | +--ro lsr-id leafref 350 | | | | +--ro label-space-id leafref 351 | | | | +--ro advertisement-type 352 | | | | | advertised-received 353 | | | | +--ro label? 354 | | | | | rt-types:mpls-label 355 | | | | +--ro used-in-forwarding? boolean 356 | | | +--rw ldp-ext:label-policy 357 | | | | +--rw ldp-ext:advertise 358 | | | | | +--rw ldp-ext:egress-explicit-null 359 | | | | | | +--rw ldp-ext:enable? boolean 360 | | | | | +--rw ldp-ext:prefix-list? 361 | | | | | prefix-list-ref 362 | | | | +--rw ldp-ext:accept 363 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 364 | | | | +--rw ldp-ext:assign 365 | | | | {policy-label-assignment-config}? 366 | | | | +--rw ldp-ext:independent-mode 367 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 368 | | | | +--rw ldp-ext:ordered-mode 369 | | | | {policy-ordered-label-config}? 370 | | | | +--rw ldp-ext:egress-prefix-list? 371 | | | | prefix-list-ref 372 | | | +--rw ldp-ext:transport-address? 373 | | | inet:ipv4-address 374 | | +--rw ldp-ext:ipv6! 375 | | +--rw ldp-ext:enable? 376 | | | boolean 377 | | +--rw ldp-ext:label-policy 378 | | | +--rw ldp-ext:advertise 379 | | | | +--rw ldp-ext:egress-explicit-null 380 | | | | | +--rw ldp-ext:enable? boolean 381 | | | | +--rw ldp-ext:prefix-list? 382 | | | | prefix-list-ref 383 | | | +--rw ldp-ext:accept 384 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 385 | | | +--rw ldp-ext:assign 386 | | | {policy-label-assignment-config}? 387 | | | +--rw ldp-ext:independent-mode 388 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 389 | | | +--rw ldp-ext:ordered-mode 390 | | | {policy-ordered-label-config}? 391 | | | +--rw ldp-ext:egress-prefix-list? 392 | | | prefix-list-ref 393 | | +--rw ldp-ext:transport-address 394 | | | inet:ipv6-address 395 | | +--ro ldp-ext:label-distribution-controlmode? 396 | | | enumeration 397 | | +--ro ldp-ext:bindings 398 | | +--ro ldp-ext:address* [address] 399 | | | +--ro ldp-ext:address 400 | | | | inet:ipv6-address 401 | | | +--ro ldp-ext:advertisement-type? 402 | | | | advertised-received 403 | | | +--ro ldp-ext:peer 404 | | | +--ro ldp-ext:lsr-id? leafref 405 | | | +--ro ldp-ext:label-space-id? leafref 406 | | +--ro ldp-ext:fec-label* [fec] 407 | | +--ro ldp-ext:fec inet:ipv6-prefix 408 | | +--ro ldp-ext:peer* 409 | | [lsr-id label-space-id advertisement-type] 410 | | +--ro ldp-ext:lsr-id leafref 411 | | +--ro ldp-ext:label-space-id leafref 412 | | +--ro ldp-ext:advertisement-type 413 | | | advertised-received 414 | | +--ro ldp-ext:label? 415 | | | rt-types:mpls-label 416 | | +--ro ldp-ext:used-in-forwarding? boolean 417 | +--rw ldp-ext:forwarding-nexthop 418 | | {forwarding-nexthop-config}? 419 | | +--rw ldp-ext:interfaces 420 | | +--rw ldp-ext:interface* [name] 421 | | +--rw ldp-ext:name if:interface-ref 422 | | +--rw ldp-ext:address-family* [afi] 423 | | +--rw ldp-ext:afi 424 | | | ldp:ldp-address-family 425 | | +--rw ldp-ext:ldp-disable? boolean 426 | +--rw ldp-ext:igp-synchronization-delay? uint16 427 +--rw discovery 428 | +--rw interfaces 429 | | +--rw hello-holdtime? uint16 430 | | +--rw hello-interval? uint16 431 | | +--rw interface* [name] 432 | | +--rw name 433 | | | if:interface-ref 434 | | +--ro next-hello? uint16 435 | | +--rw address-families 436 | | | +--rw ipv4! 437 | | | | +--rw enable? boolean 438 | | | | +--ro hello-adjacencies 439 | | | | | +--ro hello-adjacency* [adjacent-address] 440 | | | | | +--ro adjacent-address 441 | | | | | | inet:ipv4-address 442 | | | | | +--ro flag* identityref 443 | | | | | +--ro hello-holdtime 444 | | | | | | +--ro adjacent? uint16 445 | | | | | | +--ro negotiated? uint16 446 | | | | | | +--ro remaining? uint16 447 | | | | | +--ro next-hello? uint16 448 | | | | | +--ro statistics 449 | | | | | | +--ro discontinuity-time 450 | | | | | | | yang:date-and-time 451 | | | | | | +--ro hello-received? 452 | | | | | | | yang:counter64 453 | | | | | | +--ro hello-dropped? 454 | | | | | | yang:counter64 455 | | | | | +--ro peer 456 | | | | | +--ro lsr-id? leafref 457 | | | | | +--ro label-space-id? leafref 458 | | | | +--rw ldp-ext:transport-address? union 459 | | | +--rw ldp-ext:ipv6! 460 | | | +--rw ldp-ext:enable? boolean 461 | | | +--ro ldp-ext:hello-adjacencies 462 | | | | +--ro ldp-ext:hello-adjacency* 463 | | | | [adjacent-address] 464 | | | | +--ro ldp-ext:adjacent-address 465 | | | | | inet:ipv6-address 466 | | | | +--ro ldp-ext:flag* 467 | | | | | identityref 468 | | | | +--ro ldp-ext:hello-holdtime 469 | | | | | +--ro ldp-ext:adjacent? uint16 470 | | | | | +--ro ldp-ext:negotiated? uint16 471 | | | | | +--ro ldp-ext:remaining? uint16 472 | | | | +--ro ldp-ext:next-hello? uint16 473 | | | | +--ro ldp-ext:statistics 474 | | | | | +--ro ldp-ext:discontinuity-time 475 | | | | | | yang:date-and-time 476 | | | | | +--ro ldp-ext:hello-received? 477 | | | | | | yang:counter64 478 | | | | | +--ro ldp-ext:hello-dropped? 479 | | | | | yang:counter64 480 | | | | +--ro ldp-ext:peer 481 | | | | +--ro ldp-ext:lsr-id? leafref 482 | | | | +--ro ldp-ext:label-space-id? leafref 483 | | | +--rw ldp-ext:transport-address? union 484 | | +--rw ldp-ext:hello-holdtime? uint16 485 | | +--rw ldp-ext:hello-interval? uint16 486 | | +--rw ldp-ext:igp-synchronization-delay? uint16 487 | | {per-interface-timer-config}? 488 | +--rw targeted 489 | +--rw hello-holdtime? uint16 490 | +--rw hello-interval? uint16 491 | +--rw hello-accept 492 | | +--rw enable? boolean 493 | | +--rw ldp-ext:neighbor-list? neighbor-list-ref 494 | | {policy-targeted-discovery-config}? 495 | +--rw address-families 496 | +--rw ipv4! 497 | | +--ro hello-adjacencies 498 | | | +--ro hello-adjacency* 499 | | | [local-address adjacent-address] 500 | | | +--ro local-address inet:ipv4-address 501 | | | +--ro adjacent-address inet:ipv4-address 502 | | | +--ro flag* identityref 503 | | | +--ro hello-holdtime 504 | | | | +--ro adjacent? uint16 505 | | | | +--ro negotiated? uint16 506 | | | | +--ro remaining? uint16 507 | | | +--ro next-hello? uint16 508 | | | +--ro statistics 509 | | | | +--ro discontinuity-time 510 | | | | | yang:date-and-time 511 | | | | +--ro hello-received? 512 | | | | | yang:counter64 513 | | | | +--ro hello-dropped? 514 | | | | yang:counter64 515 | | | +--ro peer 516 | | | +--ro lsr-id? leafref 517 | | | +--ro label-space-id? leafref 518 | | +--rw target* [adjacent-address] 519 | | +--rw adjacent-address inet:ipv4-address 520 | | +--rw enable? boolean 521 | | +--rw local-address? inet:ipv4-address 522 | +--rw ldp-ext:ipv6! 523 | +--ro ldp-ext:hello-adjacencies 524 | | +--ro ldp-ext:hello-adjacency* 525 | | [local-address adjacent-address] 526 | | +--ro ldp-ext:local-address 527 | | | inet:ipv6-address 528 | | +--ro ldp-ext:adjacent-address 529 | | | inet:ipv6-address 530 | | +--ro ldp-ext:flag* 531 | | | identityref 532 | | +--ro ldp-ext:hello-holdtime 533 | | | +--ro ldp-ext:adjacent? uint16 534 | | | +--ro ldp-ext:negotiated? uint16 535 | | | +--ro ldp-ext:remaining? uint16 536 | | +--ro ldp-ext:next-hello? uint16 537 | | +--ro ldp-ext:statistics 538 | | | +--ro ldp-ext:discontinuity-time 539 | | | | yang:date-and-time 540 | | | +--ro ldp-ext:hello-received? 541 | | | | yang:counter64 542 | | | +--ro ldp-ext:hello-dropped? 543 | | | yang:counter64 544 | | +--ro ldp-ext:peer 545 | | +--ro ldp-ext:lsr-id? leafref 546 | | +--ro ldp-ext:label-space-id? leafref 547 | +--rw ldp-ext:target* [adjacent-address] 548 | +--rw ldp-ext:adjacent-address 549 | | inet:ipv6-address 550 | +--rw ldp-ext:enable? boolean 551 | +--rw ldp-ext:local-address? 552 | inet:ipv6-address 553 +--rw peers 554 +--rw authentication 555 | +--rw (auth-type-selection)? 556 | +--:(auth-key) 557 | | +--rw md5-key? string 558 | +--:(ldp-ext:auth-key-chain) {key-chain}? 559 | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 560 +--rw session-ka-holdtime? uint16 561 +--rw session-ka-interval? uint16 562 +--rw peer* [lsr-id label-space-id] 563 | +--rw lsr-id rt-types:router-id 564 | +--rw label-space-id uint16 565 | +--rw authentication 566 | | +--rw (auth-type-selection)? 567 | | +--:(auth-key) 568 | | | +--rw md5-key? string 569 | | +--:(ldp-ext:auth-key-chain) {key-chain}? 570 | | +--rw ldp-ext:key-chain? 571 | | key-chain:key-chain-ref 572 | +--rw capability 573 | +--rw address-families 574 | | +--rw ipv4! 575 | | | +--ro hello-adjacencies 576 | | | | +--ro hello-adjacency* 577 | | | | [local-address adjacent-address] 578 | | | | +--ro local-address inet:ipv4-address 579 | | | | +--ro adjacent-address inet:ipv4-address 580 | | | | +--ro flag* identityref 581 | | | | +--ro hello-holdtime 582 | | | | | +--ro adjacent? uint16 583 | | | | | +--ro negotiated? uint16 584 | | | | | +--ro remaining? uint16 585 | | | | +--ro next-hello? uint16 586 | | | | +--ro statistics 587 | | | | | +--ro discontinuity-time 588 | | | | | | yang:date-and-time 589 | | | | | +--ro hello-received? 590 | | | | | | yang:counter64 591 | | | | | +--ro hello-dropped? 592 | | | | | yang:counter64 593 | | | | +--ro interface? if:interface-ref 594 | | | +--rw ldp-ext:label-policy 595 | | | +--rw ldp-ext:advertise 596 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 597 | | | +--rw ldp-ext:accept 598 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 599 | | +--rw ldp-ext:ipv6! 600 | | +--ro ldp-ext:hello-adjacencies 601 | | | +--ro ldp-ext:hello-adjacency* 602 | | | [local-address adjacent-address] 603 | | | +--ro ldp-ext:local-address 604 | | | | inet:ipv6-address 605 | | | +--ro ldp-ext:adjacent-address 606 | | | | inet:ipv6-address 607 | | | +--ro ldp-ext:flag* 608 | | | | identityref 609 | | | +--ro ldp-ext:hello-holdtime 610 | | | | +--ro ldp-ext:adjacent? uint16 611 | | | | +--ro ldp-ext:negotiated? uint16 612 | | | | +--ro ldp-ext:remaining? uint16 613 | | | +--ro ldp-ext:next-hello? uint16 614 | | | +--ro ldp-ext:statistics 615 | | | | +--ro ldp-ext:discontinuity-time 616 | | | | | yang:date-and-time 617 | | | | +--ro ldp-ext:hello-received? 618 | | | | | yang:counter64 619 | | | | +--ro ldp-ext:hello-dropped? 620 | | | | yang:counter64 621 | | | +--ro ldp-ext:interface? 622 | | | if:interface-ref 623 | | +--rw ldp-ext:label-policy 624 | | +--rw ldp-ext:advertise 625 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 626 | | +--rw ldp-ext:accept 627 | | +--rw ldp-ext:prefix-list? prefix-list-ref 628 | +--ro label-advertisement-mode 629 | | +--ro local? label-adv-mode 630 | | +--ro peer? label-adv-mode 631 | | +--ro negotiated? label-adv-mode 632 | +--ro next-keep-alive? uint16 633 | +--ro received-peer-state 634 | | +--ro graceful-restart 635 | | | +--ro enable? boolean 636 | | | +--ro reconnect-time? uint16 637 | | | +--ro recovery-time? uint16 638 | | +--ro capability 639 | | +--ro end-of-lib 640 | | | +--ro enable? boolean 641 | | +--ro typed-wildcard-fec 642 | | | +--ro enable? boolean 643 | | +--ro upstream-label-assignment 644 | | +--ro enable? boolean 645 | +--ro session-holdtime 646 | | +--ro peer? uint16 647 | | +--ro negotiated? uint16 648 | | +--ro remaining? uint16 649 | +--ro session-state? enumeration 650 | +--ro tcp-connection 651 | | +--ro local-address? inet:ip-address 652 | | +--ro local-port? inet:port-number 653 | | +--ro remote-address? inet:ip-address 654 | | +--ro remote-port? inet:port-number 655 | +--ro up-time? string 656 | +--ro statistics 657 | | +--ro discontinuity-time yang:date-and-time 658 | | +--ro received 659 | | | +--ro total-octets? yang:counter64 660 | | | +--ro total-messages? yang:counter64 661 | | | +--ro address? yang:counter64 662 | | | +--ro address-withdraw? yang:counter64 663 | | | +--ro initialization? yang:counter64 664 | | | +--ro keepalive? yang:counter64 665 | | | +--ro label-abort-request? yang:counter64 666 | | | +--ro label-mapping? yang:counter64 667 | | | +--ro label-release? yang:counter64 668 | | | +--ro label-request? yang:counter64 669 | | | +--ro label-withdraw? yang:counter64 670 | | | +--ro notification? yang:counter64 671 | | +--ro sent 672 | | | +--ro total-octets? yang:counter64 673 | | | +--ro total-messages? yang:counter64 674 | | | +--ro address? yang:counter64 675 | | | +--ro address-withdraw? yang:counter64 676 | | | +--ro initialization? yang:counter64 677 | | | +--ro keepalive? yang:counter64 678 | | | +--ro label-abort-request? yang:counter64 679 | | | +--ro label-mapping? yang:counter64 680 | | | +--ro label-release? yang:counter64 681 | | | +--ro label-request? yang:counter64 682 | | | +--ro label-withdraw? yang:counter64 683 | | | +--ro notification? yang:counter64 684 | | +--ro total-addresses? uint32 685 | | +--ro total-labels? uint32 686 | | +--ro total-fec-label-bindings? uint32 687 | +--rw ldp-ext:admin-down? boolean 688 | | {per-peer-admin-down}? 689 | +--rw ldp-ext:graceful-restart 690 | | +--rw ldp-ext:enable? boolean 691 | | +--rw ldp-ext:reconnect-time? uint16 692 | | +--rw ldp-ext:recovery-time? uint16 693 | +--rw ldp-ext:session-ka-holdtime? uint16 694 | +--rw ldp-ext:session-ka-interval? uint16 695 +--rw ldp-ext:session-downstream-on-demand 696 | {session-downstream-on-demand-config}? 697 | +--rw ldp-ext:enable? boolean 698 | +--rw ldp-ext:peer-list? peer-list-ref 699 +--rw ldp-ext:dual-stack-transport-pereference 700 {dual-stack-transport-pereference}? 701 +--rw ldp-ext:max-wait? uint16 702 +--rw ldp-ext:prefer-ipv4! 703 +--rw ldp-ext:peer-list? peer-list-ref 705 rpcs: 706 +---x mpls-ldp-clear-peer 707 | +---w input 708 | +---w lsr-id? leafref 709 | +---w label-space-id? leafref 710 +---x mpls-ldp-clear-hello-adjacency 711 | +---w input 712 | +---w hello-adjacency 713 | +---w (hello-adjacency-type)? 714 | +--:(targeted) 715 | | +---w targeted! 716 | | +---w target-address? inet:ip-address 717 | +--:(link) 718 | +---w link! 719 | +---w next-hop-interface? leafref 720 | +---w next-hop-address? inet:ip-address 721 +---x mpls-ldp-clear-peer-statistics 722 +---w input 723 +---w lsr-id? leafref 724 +---w label-space-id? leafref 726 notifications: 727 +---n mpls-ldp-peer-event 728 | +--ro event-type? oper-status-event-type 729 | +--ro peer 730 | +--ro lsr-id? leafref 731 | +--ro label-space-id? leafref 732 +---n mpls-ldp-hello-adjacency-event 733 | +--ro event-type? oper-status-event-type 734 | +--ro (hello-adjacency-type)? 735 | +--:(targeted) 736 | | +--ro targeted 737 | | +--ro target-address? inet:ip-address 738 | +--:(link) 739 | +--ro link 740 | +--ro next-hop-interface? if:interface-ref 741 | +--ro next-hop-address? inet:ip-address 742 +---n mpls-ldp-fec-event 743 +--ro event-type? oper-status-event-type 744 +--ro prefix? inet:ip-prefix 746 Figure 2 748 5. Configuration 750 This specification defines the configuration parameters for base LDP 751 as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it 752 incorporates provisions to enable LDP Capabilities [RFC5561], and 753 defines some of the most significant and commonly used capabilities 754 such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP 755 Upstream Label Assignment [RFC6389]. 757 This model augments /rt:routing/rt:control-plane-protocols that is 758 defined in [RFC8349] and follows NMDA as mentioned earlier. 760 Following is the high-level configuration organization for base LDP: 762 augment /rt:routing/rt:control-plane-protocols: 763 +-- mpls-ldp 764 +-- global 765 | +-- ... 766 | +-- ... 767 | +-- address-families 768 | | +-- ipv4 769 | | +-- . . . 770 | | +-- . . . 771 | +-- capability 772 | +-- ... 773 | +-- ... 774 +-- discovery 775 | +-- interfaces 776 | | +-- ... 777 | | +-- ... 778 | | +-- interface* [interface] 779 | | +-- ... 780 | | +-- address-families 781 | | +-- ipv4 782 | | +-- ... 783 | | +-- ... 784 | +-- targeteted 785 | +-- ... 786 | +-- address-families 787 | +-- ipv4 788 | +- target* [adjacent-address] 789 | +- ... 790 | +- ... 791 +-- peers 792 +-- ... 793 +-- ... 794 +-- peer* [lsr-id label-space-id] 795 +-- ... 796 +-- ... 798 Figure 3 800 Following is the high-level configuration organization for extended 801 LDP: 803 augment /rt:routing/rt:control-plane-protocols: 804 +-- mpls-ldp 805 +-- global 806 | +-- ... 807 | +-- ... 808 | +-- address-families 809 | | +-- ipv4 810 | | | +-- . . . 811 | | | +-- . . . 812 | | | +-- label-policy 813 | | | +-- ... 814 | | | +-- ... 815 | | +-- ipv6 816 | | +-- . . . 817 | | +-- . . . 818 | | +-- label-policy 819 | | +-- ... 820 | | +-- ... 821 | +-- capability 822 | | +-- ... 823 | | +-- ... 824 | +-- discovery 825 | +-- interfaces 826 | | +-- ... 827 | | +-- ... 828 | | +-- interface* [interface] 829 | | +-- ... 830 | | +-- address-families 831 | | +-- ipv4 832 | | | +-- ... 833 | | | +-- ... 834 | | +-- ipv6 835 | | +-- ... 836 | | +-- ... 837 | +-- targeteted 838 | +-- ... 839 | +-- address-families 840 | +-- ipv6 841 | +- target* [adjacent-address] 842 | +- ... 843 | +- ... 844 +-- forwarding-nexthop 845 | +-- ... 846 | +-- ... 847 +-- peers 848 +-- ... 849 +-- ... 850 +-- peer* 851 +-- ... 852 +-- ... 853 +-- label-policy 854 | +-- .. 855 +-- address-families 856 +-- ipv4 857 | +-- ... 858 +-- ipv6 859 +-- ... 861 Figure 4 863 Given the configuration hierarchy, the model allows inheritance such 864 that an item in a child tree is able to derive value from a similar 865 or related item in one of the parent. For instance, hello holdtime 866 can be configured per-VRF or per-VRF-interface, thus allowing 867 inheritance as well flexibility to override with a different value at 868 any child level. 870 5.1. Configuration Tree 872 5.1.1. Base 874 Following is a simplified graphical representation of the data model 875 for LDP base configuration 877 module: ietf-mpls-ldp 878 augment /rt:routing/rt:control-plane-protocols: 879 +--rw mpls-ldp! 880 +--rw global 881 | +--rw graceful-restart 882 | | +--rw enable? boolean 883 | | +--rw reconnect-time? uint16 884 | | +--rw recovery-time? uint16 885 | | +--rw forwarding-holdtime? uint16 886 | +--rw lsr-id? rt-types:router-id 887 | +--rw address-families 888 | +--rw ipv4! 889 | +--rw enable? boolean 890 +--rw discovery 891 | +--rw interfaces 892 | | +--rw hello-holdtime? uint16 893 | | +--rw hello-interval? uint16 894 | | +--rw interface* [name] 895 | | +--rw name if:interface-ref 896 | | +--rw address-families 897 | | +--rw ipv4! 898 | | +--rw enable? boolean 899 | +--rw targeted 900 | +--rw hello-holdtime? uint16 901 | +--rw hello-interval? uint16 902 | +--rw hello-accept 903 | | +--rw enable? boolean 904 | +--rw address-families 905 | +--rw ipv4! 906 | +--rw target* [adjacent-address] 907 | +--rw adjacent-address inet:ipv4-address 908 | +--rw enable? boolean 909 | +--rw local-address? inet:ipv4-address 910 +--rw peers 911 +--rw authentication 912 | +--rw (auth-type-selection)? 913 | +--:(auth-key) 914 | +--rw md5-key? string 915 +--rw session-ka-holdtime? uint16 916 +--rw session-ka-interval? uint16 917 +--rw peer* [lsr-id label-space-id] 918 +--rw lsr-id rt-types:router-id 919 +--rw label-space-id uint16 920 +--rw authentication 921 +--rw (auth-type-selection)? 922 +--:(auth-key) 923 +--rw md5-key? string 925 Figure 5 927 5.1.2. Extended 929 Following is a simplified graphical representation of the data model 930 for LDP extended configuration 932 module: ietf-mpls-ldp 933 augment /rt:routing/rt:control-plane-protocols: 934 +--rw mpls-ldp! 935 +--rw global 936 | +--rw capability 937 | | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? 938 | | | +--rw ldp-ext:enable? boolean 939 | | +--rw ldp-ext:typed-wildcard-fec 940 | | {capability-typed-wildcard-fec}? 941 | | | +--rw ldp-ext:enable? boolean 942 | | +--rw ldp-ext:upstream-label-assignment 943 | | {capability-upstream-label-assignment}? 944 | | +--rw ldp-ext:enable? boolean 945 | +--rw graceful-restart 946 | | +--rw ldp-ext:helper-enable? 947 | | boolean {graceful-restart-helper-mode}? 948 | +--rw address-families 949 | | +--rw ipv4! 950 | | | +--rw ldp-ext:label-policy 951 | | | | +--rw ldp-ext:advertise 952 | | | | | +--rw ldp-ext:egress-explicit-null 953 | | | | | | +--rw ldp-ext:enable? boolean 954 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 955 | | | | +--rw ldp-ext:accept 956 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 957 | | | | +--rw ldp-ext:assign 958 | | | | {policy-label-assignment-config}? 959 | | | | +--rw ldp-ext:independent-mode 960 | | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 961 | | | | +--rw ldp-ext:ordered-mode 962 | | | | {policy-ordered-label-config}? 963 | | | | +--rw ldp-ext:egress-prefix-list? 964 | | | | prefix-list-ref 965 | | | +--rw ldp-ext:transport-address? 966 | | | inet:ipv4-address 967 | | +--rw ldp-ext:ipv6! 968 | | +--rw ldp-ext:enable? boolean 969 | | +--rw ldp-ext:label-policy 970 | | | +--rw ldp-ext:advertise 971 | | | | +--rw ldp-ext:egress-explicit-null 972 | | | | | +--rw ldp-ext:enable? boolean 973 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 974 | | | +--rw ldp-ext:accept 975 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 976 | | | +--rw ldp-ext:assign 977 | | | {policy-label-assignment-config}? 978 | | | +--rw ldp-ext:independent-mode 979 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 980 | | | +--rw ldp-ext:ordered-mode 981 | | | {policy-ordered-label-config}? 982 | | | +--rw ldp-ext:egress-prefix-list? 983 | | | prefix-list-ref 984 | | +--rw ldp-ext:transport-address inet:ipv6-address 985 | +--rw ldp-ext:forwarding-nexthop {forwarding-nexthop-config}? 986 | | +--rw ldp-ext:interfaces 987 | | +--rw ldp-ext:interface* [name] 988 | | +--rw ldp-ext:name if:interface-ref 989 | | +--rw ldp-ext:address-family* [afi] 990 | | +--rw ldp-ext:afi 991 | | ldp:ldp-address-family 992 | | +--rw ldp-ext:ldp-disable? boolean 993 | +--rw ldp-ext:igp-synchronization-delay? uint16 994 +--rw discovery 995 | +--rw interfaces 996 | | +--rw interface* [name] 997 | | +--rw name if:interface-ref 998 | | +--rw address-families 999 | | | +--rw ipv4! 1000 | | | | +--rw ldp-ext:transport-address? union 1001 | | | +--rw ldp-ext:ipv6! 1002 | | | +--rw ldp-ext:enable? boolean 1003 | | | +--rw ldp-ext:transport-address? union 1004 | | +--rw ldp-ext:hello-holdtime? uint16 1005 | | +--rw ldp-ext:hello-interval? uint16 1006 | | +--rw ldp-ext:igp-synchronization-delay? 1007 | | uint16 {per-interface-timer-config}? 1008 | +--rw targeted 1009 | +--rw hello-accept 1010 | | +--rw ldp-ext:neighbor-list? 1011 | | neighbor-list-ref {policy-targeted-discovery-config}? 1012 | +--rw address-families 1013 | +--rw ldp-ext:ipv6! 1014 | +--rw ldp-ext:target* [adjacent-address] 1015 | +--rw ldp-ext:adjacent-address inet:ipv6-address 1016 | +--rw ldp-ext:enable? boolean 1017 | +--rw ldp-ext:local-address? inet:ipv6-address 1018 +--rw peers 1019 +--rw authentication 1020 | +--rw (auth-type-selection)? 1021 | +--:(ldp-ext:auth-key-chain) {key-chain}? 1022 | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 1023 +--rw peer* [lsr-id label-space-id] 1024 | +--rw lsr-id rt-types:router-id 1025 | +--rw label-space-id uint16 1026 | +--rw authentication 1027 | | +--rw (auth-type-selection)? 1028 | | +--:(ldp-ext:auth-key-chain) {key-chain}? 1029 | | +--rw ldp-ext:key-chain? key-chain:key-chain-ref 1030 | +--rw address-families 1031 | | +--rw ipv4! 1032 | | | +--rw ldp-ext:label-policy 1033 | | | +--rw ldp-ext:advertise 1034 | | | | +--rw ldp-ext:prefix-list? prefix-list-ref 1035 | | | +--rw ldp-ext:accept 1036 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 1037 | | +--rw ldp-ext:ipv6! 1038 | | +--rw ldp-ext:label-policy 1039 | | +--rw ldp-ext:advertise 1040 | | | +--rw ldp-ext:prefix-list? prefix-list-ref 1041 | | +--rw ldp-ext:accept 1042 | | +--rw ldp-ext:prefix-list? prefix-list-ref 1043 | +--rw ldp-ext:admin-down? 1044 | boolean {per-peer-admin-down}? 1045 | +--rw ldp-ext:graceful-restart 1046 | | +--rw ldp-ext:enable? boolean 1047 | | +--rw ldp-ext:reconnect-time? uint16 1048 | | +--rw ldp-ext:recovery-time? uint16 1049 | +--rw ldp-ext:session-ka-holdtime? uint16 1050 | +--rw ldp-ext:session-ka-interval? uint16 1051 +--rw ldp-ext:session-downstream-on-demand 1052 | {session-downstream-on-demand-config}? 1053 | +--rw ldp-ext:enable? boolean 1054 | +--rw ldp-ext:peer-list? peer-list-ref 1055 +--rw ldp-ext:dual-stack-transport-pereference 1056 {dual-stack-transport-pereference}? 1057 +--rw ldp-ext:max-wait? uint16 1058 +--rw ldp-ext:prefer-ipv4! 1059 +--rw ldp-ext:peer-list? peer-list-ref 1061 Figure 6 1063 5.2. Configuration Hierarchy 1065 The LDP configuration container is logically divided into following 1066 high-level config areas: 1068 Per-VRF parameters 1069 o Global parameters 1070 o Per-address-family parameters 1071 o LDP Capabilities parameters 1072 o Hello Discovery parameters 1073 - interfaces 1074 - Per-interface: 1075 Global 1076 Per-address-family 1077 - targeted 1078 - Per-target 1079 o Peer parameters 1080 - Global 1081 - Per-peer 1082 Per-address-family 1084 o Forwarding parameters 1086 Figure 7 1088 Following subsections briefly explain these configuration areas. 1090 5.2.1. Per-VRF parameters 1092 LDP module resides under an network-instance and the scope of any LDP 1093 configuration defined under this tree is per network-instance (per- 1094 VRF). This configuration is further divided into sub categories as 1095 follows. 1097 5.2.1.1. Per-VRF global parameters 1099 There are configuration items that are available directly under a VRF 1100 instance and do not fall under any other sub tree. Example of such a 1101 parameter is LDP LSR id that is typically configured per VRF. To 1102 keep legacy LDP features and applications working in an LDP IPv4 1103 networks with this model, this document recommends an operator to 1104 pick a routable IPv4 unicast address as an LSR Id. 1106 5.2.1.2. Per-VRF Capabilities parameters 1108 This container falls under global tree and holds the LDP capabilities 1109 that are to be enabled for certain features. By default, an LDP 1110 capability is disabled unless explicitly enabled. These capabilities 1111 are typically used to negotiate with LDP peer(s) the support/non- 1112 support related to a feature and its parameters. The scope of a 1113 capability enabled under this container applies to all LDP peers in 1114 the given VRF instance. There is also a peer level capability 1115 container that is provided to override a capability that is enabled/ 1116 specified at VRF level. 1118 5.2.1.3. Per-VRF Per-Address-Family parameters 1120 Any LDP configuration parameter related to IP address family (AF) 1121 whose scope is VRF wide is configured under this tree. The examples 1122 of per-AF parameters include enabling LDP for an address family, 1123 prefix-list based label policies, and LDP transport address. 1125 5.2.1.4. Per-VRF Hello Discovery parameters 1127 This container is used to hold LDP configuration related to Hello and 1128 discovery process for both basic (link) and extended (targeted) 1129 discovery. 1131 The "interfaces" is a container to configure parameters related to 1132 VRF interfaces. There are parameters that apply to all interfaces 1133 (such as hello timers), as well as parameters that can be configured 1134 per-interface. Hence, an interface list is defined under 1135 "interfaces" container. The model defines parameters to configure 1136 per-interface non AF related items, as well as per-interface per-AF 1137 items. The example of former is interface hello timers, and example 1138 of latter is enabling hellos for a given AF under an interface. 1140 The "targeted" container under a VRF instance allows to configure LDP 1141 targeted discovery related parameters. Within this container, the 1142 "target" list provides a mean to configure multiple target addresses 1143 to perform extended discovery to a specific destination target, as 1144 well as to fine-tune the per-target parameters. 1146 5.2.1.5. Per-VRF Peer parameters 1148 This container is used to hold LDP configuration related to LDP 1149 sessions and peers under a VRF instance. This container allows to 1150 configure parameters that either apply on VRF's all peers or a subset 1151 (peer-list) of VRF peers. The example of such parameters include 1152 authentication password, session KA timers etc. Moreover, the model 1153 also allows per-peer parameter tuning by specifying a "peer" list 1154 under the "peers" container. A peer is uniquely identified using its 1155 LSR Id and hence LSR Id is the key for peer list 1157 Like per-interface parameters, some per-peer parameters are AF- 1158 agnostic (i.e. either non AF related or apply to both IP address 1159 families), and some that belong to an AF. The example of former is 1160 per-peer session password configuration, whereas the example of 1161 latter is prefix-list based label policies (inbound and outbound) 1162 that apply to a given peer. 1164 5.2.1.6. Per-VRF Forwarding parameters 1166 This container is used to hold configuration used to control LDP 1167 forwarding behavior under a VRF instance. One example of a 1168 configuration under this container is when a user wishes to enable 1169 neighbor discovery on an interface but wishes to disable use of the 1170 same interface as forwarding nexthop. This example configuration 1171 makes sense only when there are more than one LDP enabled interfaces 1172 towards the neighbor. 1174 6. Operational State 1176 Operational state of LDP can be queried and obtained from read-only 1177 state containers that fall under the same tree (/rt:routing/ 1178 rt:control-plane-protocols/) as the configuration. 1180 6.1. Operational Tree 1182 6.1.1. Base 1184 Following is a simplified graphical representation of the base data 1185 model for LDP operational state. 1187 module: ietf-mpls-ldp 1188 augment /rt:routing/rt:control-plane-protocols: 1189 +--rw mpls-ldp! 1190 +--rw global 1191 | +--rw address-families 1192 | +--rw ipv4! 1193 | +--ro label-distribution-controlmode? enumeration 1194 | +--ro bindings 1195 | +--ro address* [address] 1196 | | +--ro address inet:ipv4-address 1197 | | +--ro advertisement-type? advertised-received 1198 | | +--ro peer 1199 | | +--ro lsr-id? leafref 1200 | | +--ro label-space-id? leafref 1201 | +--ro fec-label* [fec] 1202 | +--ro fec inet:ipv4-prefix 1203 | +--ro peer* 1204 | [lsr-id label-space-id advertisement-type] 1205 | +--ro lsr-id leafref 1206 | +--ro label-space-id leafref 1207 | +--ro advertisement-type advertised-received 1208 | +--ro label? rt-types:mpls-label 1209 | +--ro used-in-forwarding? boolean 1210 +--rw discovery 1211 | +--rw interfaces 1212 | | +--rw interface* [name] 1213 | | +--rw name if:interface-ref 1214 | | +--ro next-hello? uint16 1215 | | +--rw address-families 1216 | | +--rw ipv4! 1217 | | +--ro hello-adjacencies 1218 | | +--ro hello-adjacency* [adjacent-address] 1219 | | +--ro adjacent-address inet:ipv4-address 1220 | | +--ro flag* identityref 1221 | | +--ro hello-holdtime 1222 | | | +--ro adjacent? uint16 1223 | | | +--ro negotiated? uint16 1224 | | | +--ro remaining? uint16 1225 | | +--ro next-hello? uint16 1226 | | +--ro statistics 1227 | | | +--ro discontinuity-time 1228 | | | | yang:date-and-time 1229 | | | +--ro hello-received? yang:counter64 1230 | | | +--ro hello-dropped? yang:counter64 1231 | | +--ro peer 1232 | | +--ro lsr-id? leafref 1233 | | +--ro label-space-id? leafref 1234 | +--rw targeted 1235 | +--rw address-families 1236 | +--rw ipv4! 1237 | +--ro hello-adjacencies 1238 | +--ro hello-adjacency* 1239 | [local-address adjacent-address] 1240 | +--ro local-address inet:ipv4-address 1241 | +--ro adjacent-address inet:ipv4-address 1242 | +--ro flag* identityref 1243 | +--ro hello-holdtime 1244 | | +--ro adjacent? uint16 1245 | | +--ro negotiated? uint16 1246 | | +--ro remaining? uint16 1247 | +--ro next-hello? uint16 1248 | +--ro statistics 1249 | | +--ro discontinuity-time 1250 | | | yang:date-and-time 1251 | | +--ro hello-received? yang:counter64 1252 | | +--ro hello-dropped? yang:counter64 1253 | +--ro peer 1254 | +--ro lsr-id? leafref 1255 | +--ro label-space-id? leafref 1256 +--rw peers 1257 +--rw peer* [lsr-id label-space-id] 1258 +--rw lsr-id rt-types:router-id 1259 +--rw label-space-id uint16 1260 +--rw address-families 1261 | +--rw ipv4! 1262 | +--ro hello-adjacencies 1263 | +--ro hello-adjacency* 1264 | [local-address adjacent-address] 1265 | +--ro local-address inet:ipv4-address 1266 | +--ro adjacent-address inet:ipv4-address 1267 | +--ro flag* identityref 1268 | +--ro hello-holdtime 1269 | | +--ro adjacent? uint16 1270 | | +--ro negotiated? uint16 1271 | | +--ro remaining? uint16 1272 | +--ro next-hello? uint16 1273 | +--ro statistics 1274 | | +--ro discontinuity-time 1275 | | | yang:date-and-time 1276 | | +--ro hello-received? yang:counter64 1277 | | +--ro hello-dropped? yang:counter64 1278 | +--ro interface? if:interface-ref 1279 +--ro label-advertisement-mode 1280 | +--ro local? label-adv-mode 1281 | +--ro peer? label-adv-mode 1282 | +--ro negotiated? label-adv-mode 1283 +--ro next-keep-alive? uint16 1284 +--ro received-peer-state 1285 | +--ro graceful-restart 1286 | | +--ro enable? boolean 1287 | | +--ro reconnect-time? uint16 1288 | | +--ro recovery-time? uint16 1289 | +--ro capability 1290 | +--ro end-of-lib 1291 | | +--ro enable? boolean 1292 | +--ro typed-wildcard-fec 1293 | | +--ro enable? boolean 1294 | +--ro upstream-label-assignment 1295 | +--ro enable? boolean 1296 +--ro session-holdtime 1297 | +--ro peer? uint16 1298 | +--ro negotiated? uint16 1299 | +--ro remaining? uint16 1300 +--ro session-state? enumeration 1301 +--ro tcp-connection 1302 | +--ro local-address? inet:ip-address 1303 | +--ro local-port? inet:port-number 1304 | +--ro remote-address? inet:ip-address 1305 | +--ro remote-port? inet:port-number 1306 +--ro up-time? string 1307 +--ro statistics 1308 +--ro discontinuity-time yang:date-and-time 1309 +--ro received 1310 | +--ro total-octets? yang:counter64 1311 | +--ro total-messages? yang:counter64 1312 | +--ro address? yang:counter64 1313 | +--ro address-withdraw? yang:counter64 1314 | +--ro initialization? yang:counter64 1315 | +--ro keepalive? yang:counter64 1316 | +--ro label-abort-request? yang:counter64 1317 | +--ro label-mapping? yang:counter64 1318 | +--ro label-release? yang:counter64 1319 | +--ro label-request? yang:counter64 1320 | +--ro label-withdraw? yang:counter64 1321 | +--ro notification? yang:counter64 1322 +--ro sent 1323 | +--ro total-octets? yang:counter64 1324 | +--ro total-messages? yang:counter64 1325 | +--ro address? yang:counter64 1326 | +--ro address-withdraw? yang:counter64 1327 | +--ro initialization? yang:counter64 1328 | +--ro keepalive? yang:counter64 1329 | +--ro label-abort-request? yang:counter64 1330 | +--ro label-mapping? yang:counter64 1331 | +--ro label-release? yang:counter64 1332 | +--ro label-request? yang:counter64 1333 | +--ro label-withdraw? yang:counter64 1334 | +--ro notification? yang:counter64 1335 +--ro total-addresses? uint32 1336 +--ro total-labels? uint32 1337 +--ro total-fec-label-bindings? uint32 1339 Figure 8 1341 6.1.2. Extended 1343 Following is a simplified graphical representation of the extended 1344 data model for LDP operational state. 1346 module: ietf-mpls-ldp 1347 augment /rt:routing/rt:control-plane-protocols: 1348 +--rw mpls-ldp! 1349 +--rw global 1350 | +--rw address-families 1351 | +--rw ldp-ext:ipv6! 1352 | +--ro ldp-ext:label-distribution-controlmode? 1353 | | enumeration 1354 | +--ro ldp-ext:bindings 1355 | +--ro ldp-ext:address* [address] 1356 | | +--ro ldp-ext:address 1357 | | | inet:ipv6-address 1358 | | +--ro ldp-ext:advertisement-type? 1359 | | | advertised-received 1360 | | +--ro ldp-ext:peer 1361 | | +--ro ldp-ext:lsr-id? leafref 1362 | | +--ro ldp-ext:label-space-id? leafref 1363 | +--ro ldp-ext:fec-label* [fec] 1364 | +--ro ldp-ext:fec inet:ipv6-prefix 1365 | +--ro ldp-ext:peer* 1366 | [lsr-id label-space-id advertisement-type] 1367 | +--ro ldp-ext:lsr-id leafref 1368 | +--ro ldp-ext:label-space-id leafref 1369 | +--ro ldp-ext:advertisement-type 1370 | | advertised-received 1371 | +--ro ldp-ext:label? 1372 | | rt-types:mpls-label 1373 | +--ro ldp-ext:used-in-forwarding? boolean 1374 +--rw discovery 1375 | +--rw interfaces 1376 | | +--rw interface* [name] 1377 | | +--rw name if:interface-ref 1378 | | +--rw address-families 1379 | | +--rw ldp-ext:ipv6! 1380 | | +--ro ldp-ext:hello-adjacencies 1381 | | +--ro ldp-ext:hello-adjacency* 1382 | | [adjacent-address] 1383 | | +--ro ldp-ext:adjacent-address inet: 1384 | | ipv6-address 1385 | | +--ro ldp-ext:flag* identityref 1386 | | +--ro ldp-ext:hello-holdtime 1387 | | | +--ro ldp-ext:adjacent? uint16 1388 | | | +--ro ldp-ext:negotiated? uint16 1389 | | | +--ro ldp-ext:remaining? uint16 1390 | | +--ro ldp-ext:next-hello? uint16 1391 | | +--ro ldp-ext:statistics 1392 | | | +--ro ldp-ext:discontinuity-time 1393 | | | yang:date-and-time 1394 | | | +--ro ldp-ext:hello-received? 1395 | | | yang:counter64 1396 | | | +--ro ldp-ext:hello-dropped? 1397 | | | yang:counter64 1398 | | +--ro ldp-ext:peer 1399 | | +--ro ldp-ext:lsr-id? leafref 1400 | | +--ro ldp-ext:label-space-id? leafref 1401 | +--rw targeted 1402 | +--rw address-families 1403 | +--rw ldp-ext:ipv6! 1404 | +--ro ldp-ext:hello-adjacencies 1405 | +--ro ldp-ext:hello-adjacency* 1406 | [local-address adjacent-address] 1407 | +--ro ldp-ext:local-address inet:ipv6-address 1408 | +--ro ldp-ext:adjacent-address 1409 | inet:ipv6-address 1410 | +--ro ldp-ext:flag* identityref 1411 | +--ro ldp-ext:hello-holdtime 1412 | | +--ro ldp-ext:adjacent? uint16 1413 | | +--ro ldp-ext:negotiated? uint16 1414 | | +--ro ldp-ext:remaining? uint16 1415 | +--ro ldp-ext:next-hello? uint16 1416 | +--ro ldp-ext:statistics 1417 | | +--ro ldp-ext:discontinuity-time 1418 | | yang:date-and-time 1419 | | +--ro ldp-ext:hello-received? 1420 | | yang:counter64 1421 | | +--ro ldp-ext:hello-dropped? 1422 | | yang:counter64 1423 | +--ro ldp-ext:peer 1424 | +--ro ldp-ext:lsr-id? leafref 1425 | +--ro ldp-ext:label-space-id? leafref 1426 +--rw peers 1427 +--rw address-families 1428 +--rw ldp-ext:ipv6! 1429 +--ro ldp-ext:hello-adjacencies 1430 +--ro ldp-ext:hello-adjacency* 1431 [local-address adjacent-address] 1432 +--ro ldp-ext:local-address inet:ipv6-address 1433 +--ro ldp-ext:adjacent-address 1434 inet:ipv6-address 1435 +--ro ldp-ext:flag* identityref 1436 +--ro ldp-ext:hello-holdtime 1437 | +--ro ldp-ext:adjacent? uint16 1438 | +--ro ldp-ext:negotiated? uint16 1439 | +--ro ldp-ext:remaining? uint16 1440 +--ro ldp-ext:next-hello? uint16 1441 +--ro ldp-ext:statistics 1442 | +--ro ldp-ext:discontinuity-time 1443 | yang:date-and-time 1444 | +--ro ldp-ext:hello-received? 1445 | yang:counter64 1446 | +--ro ldp-ext:hello-dropped? yang:counter64 1447 +--ro ldp-ext:interface? if:interface-ref 1449 Figure 9 1451 6.2. States 1453 Following are main areas for which LDP operational state is defined: 1455 Neighbor Adjacencies 1457 Peer 1459 Bindings (FEC-label and address) 1461 Capabilities 1463 6.2.1. Adjacency state 1465 Neighbor adjacencies are per address-family hello adjacencies that 1466 are formed with neighbors as result of LDP basic or extended 1467 discovery. In terms of organization, there is a source of discovery 1468 (e.g. interface or target address) along with its associated 1469 parameters and one or more discovered neighbors along with neighbor 1470 discovery related parameters. For the basic discovery, there could 1471 be more than one discovered neighbor for a given source (interface), 1472 whereas there is at most one discovered neighbor for an extended 1473 discovery source (local-address and target-address). This is also to 1474 be noted that the reason for a targeted neighbor adjacency could be 1475 either an active source (locally configured targeted) or passive 1476 source (to allow any incoming extended/targeted hellos). A neighbor/ 1477 adjacency record also contains session-state that helps highlight 1478 whether a given adjacency has progressed to subsequent session level 1479 or to eventual peer level. 1481 Following captures high level tree hierarchy for neighbor adjacency 1482 state. 1484 +--rw mpls-ldp! 1485 +--rw discovery 1486 +--rw interfaces 1487 | +--rw interface* [interface] 1488 | +--rw address-families 1489 | +--rw ipv4 (or ipv6) 1490 | +--ro hello-adjacencies 1491 | +--ro hello-adjacencies* [adjacent-address] 1492 | +--ro adjacent-address 1493 | . . . . 1494 | . . . . 1495 +--rw targeted 1496 +--rw address-families 1497 +--rw ipv4 (or ipv6) 1498 +--ro hello-adjacencies 1499 +--ro hello-adjacencies* 1500 [local-address adjacent-address] 1501 +--ro local-address 1502 +--ro adjacent-address 1503 . . . . 1504 . . . . 1506 Figure 10 1508 6.2.2. Peer state 1510 Peer related state is presented under peers tree. This is one of the 1511 core state that provides info on the session related parameters 1512 (mode, authentication, KA timeout etc.), TCP connection info, hello 1513 adjacencies for the peer, statistics related to messages and 1514 bindings, and capabilities exchange info. 1516 Following captures high level tree hierarchy for peer state. 1518 +--rw mpls-ldp! 1519 +--rw peers 1520 +--rw peer* [lsr-id label-space-id] 1521 +--rw lsr-id 1522 +--rw label-space-id 1523 +--ro label-advertisement-mode 1524 +--ro session-state 1525 +--ro tcp-connection 1526 +--ro session-holdtime? 1527 +--ro up-time 1528 +-- . . . . 1529 +--ro address-families 1530 | +--ro ipv4 (or ipv6) 1531 | +--ro hello-adjacencies 1532 | +--ro hello-adjacencies* 1533 | [local-address adjacent-address] 1534 | . . . . 1535 | . . . . 1536 +--ro received-peer-state 1537 | +--ro . . . . 1538 | +--ro capability 1539 | +--ro . . . . 1540 +--ro statistics 1541 +-- . . . . 1542 +-- received 1543 | +-- ... 1544 +-- sent 1545 +-- ... 1547 Figure 11 1549 6.2.3. Bindings state 1551 Binding state provides information on LDP FEC-label bindings as well 1552 as address binding for both inbound (received) as well as outbound 1553 (advertised) direction. FEC-label bindings are presented as a FEC- 1554 centric view, and address bindings are presented as an address- 1555 centric view: 1557 FEC-Label bindings: 1558 FEC 203.0.113.1/32: 1559 advertised: local-label 16000 1560 peer 192.0.2.1:0 1561 peer 192.0.2.2:0 1562 peer 192.0.2.3:0 1563 received: 1564 peer 192.0.2.1:0, label 16002, used-in-forwarding=Yes 1565 peer 192.0.2.2:0, label 17002, used-in-forwarding=No 1566 FEC 203.0.113.2/32: 1567 . . . . 1568 FEC 198.51.100.0/24: 1569 . . . . 1571 Address bindings: 1572 Addr 192.0.2.10: 1573 advertised 1574 Addr 192.0.2.1: 1575 received, peer 192.0.2.1:0 1576 Addr 192.0.2.2: 1577 received, peer 192.0.2.2:0 1578 Addr 192.0.2.3: 1579 received, peer 192.0.2.3:0 1581 Figure 12 1583 Note that all local addresses are advertised to all peers and hence 1584 no need to provide per-peer information for local address 1585 advertisement. Furthermore, note that it is easy to derive a peer- 1586 centric view for the bindings from the information already provided 1587 in this model. 1589 Following captures high level tree hierarchy for bindings state. 1591 +--rw mpls-ldp! 1592 +--rw global 1593 +--rw address-families 1594 +--rw ipv4 (or ipv6) 1595 +--ro bindings 1596 +--ro address* [address] 1597 | +--ro address (ipv4-address or ipv6-address) 1598 | +--ro advertisement-type? advertised-received 1599 | +--ro peer? leafref 1600 +--ro fec-label* [fec] 1601 +--ro fec (ipv4-prefix or ipv6-prefix) 1602 +--ro peer* [peer advertisement-type] 1603 +--ro peer leafref 1604 +--ro advertisement-type? advertised-received 1605 +--ro label? mpls:mpls-label 1606 +--ro used-in-forwarding? boolean 1608 Figure 13 1610 6.2.4. Capabilities state 1612 LDP capabilities state comprise two types of information - global 1613 information (such as timer etc.), and per-peer information. 1615 Following captures high level tree hierarchy for LDP capabilities 1616 state. 1618 +--rw mpls-ldp! 1619 +--rw peers 1620 +--rw peer* [lsr-id label-space-id] 1621 +--rw lsr-id yang:dotted-quad 1622 +--rw label-space-id 1623 +--ro received-peer-state 1624 +--ro capability 1625 +--ro . . . . 1626 +--ro . . . . 1628 Figure 14 1630 7. Notifications 1632 This model defines a list of notifications to inform client of 1633 important events detected during the protocol operation. These 1634 events include events related to changes in the operational state of 1635 an LDP peer, hello adjacency, and FEC etc. It is to be noted that an 1636 LDP FEC is treated as operational (up) as long as it has at least 1 1637 NHLFE with outgoing label. 1639 Following is a simplified graphical representation of the data model 1640 for LDP notifications. 1642 module: ietf-mpls-ldp 1643 notifications: 1644 +---n mpls-ldp-peer-event 1645 | +--ro event-type? oper-status-event-type 1646 | +--ro peer 1647 | +--ro lsr-id? leafref 1648 | +--ro label-space-id? leafref 1649 +---n mpls-ldp-hello-adjacency-event 1650 | +--ro event-type? oper-status-event-type 1651 | +--ro (hello-adjacency-type)? 1652 | +--:(targeted) 1653 | | +--ro targeted 1654 | | +--ro target-address? inet:ip-address 1655 | +--:(link) 1656 | +--ro link 1657 | +--ro next-hop-interface? if:interface-ref 1658 | +--ro next-hop-address? inet:ip-address 1659 +---n mpls-ldp-fec-event 1660 +--ro event-type? oper-status-event-type 1661 +--ro prefix? inet:ip-prefix 1663 Figure 15 1665 8. Actions 1667 This model defines a list of rpcs that allow performing an action or 1668 executing a command on the protocol. For example, it allows to clear 1669 (reset) LDP peers, hello-adjacencies, and statistics. The model 1670 makes an effort to provide different level of control so that a user 1671 is able to either clear all, or clear all for a given type, or clear 1672 a specific entity. 1674 Following is a simplified graphical representation of the data model 1675 for LDP actions. 1677 module: ietf-mpls-ldp 1678 rpcs: 1679 +---x mpls-ldp-clear-peer 1680 | +---w input 1681 | +---w lsr-id? leafref 1682 | +---w label-space-id? leafref 1683 +---x mpls-ldp-clear-hello-adjacency 1684 | +---w input 1685 | +---w hello-adjacency 1686 | +---w (hello-adjacency-type)? 1687 | +--:(targeted) 1688 | | +---w targeted! 1689 | | +---w target-address? inet:ip-address 1690 | +--:(link) 1691 | +---w link! 1692 | +---w next-hop-interface? leafref 1693 | +---w next-hop-address? inet:ip-address 1694 +---x mpls-ldp-clear-peer-statistics 1695 +---w input 1696 +---w lsr-id? leafref 1697 +---w label-space-id? leafref 1699 Figure 16 1701 9. YANG Specification 1703 Following sections specify the actual YANG (module) specification for 1704 LDP constructs defined earlier in the document. 1706 9.1. Base 1708 This YANG module imports types defined in [RFC6991], [RFC8349], 1709 [RFC8294], [RFC8343], and [RFC8344]. 1711 file "ietf-mpls-ldp@2018-10-22.yang" 1713 // RFC Editor: replace the above date 2018-10-22 with the date of 1714 // publication and remove this note. 1716 module ietf-mpls-ldp { 1717 yang-version 1.1; 1719 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; 1720 prefix "ldp"; 1721 import ietf-inet-types { 1722 prefix "inet"; 1723 reference "RFC 6991: Common YANG Data Types"; 1724 } 1726 import ietf-yang-types { 1727 prefix "yang"; 1728 reference "RFC 6991: Common YANG Data Types"; 1729 } 1731 import ietf-routing { 1732 prefix "rt"; 1733 reference 1734 "RFC 8349: A YANG Data Model for Routing Management (NMDA 1735 version)"; 1736 } 1738 import ietf-routing-types { 1739 prefix "rt-types"; 1740 reference 1741 "RFC 8294: Common YANG Data Types for the Routing Area"; 1742 } 1744 import ietf-interfaces { 1745 prefix "if"; 1746 reference "RFC 8343: A YANG Data Model for Interface Management"; 1747 } 1749 import ietf-ip { 1750 prefix "ip"; 1751 reference "RFC 8344: A YANG Data Model for IP Management"; 1752 } 1754 organization 1755 "IETF MPLS Working Group"; 1756 contact 1757 "WG Web: 1758 WG List: 1760 Editor: Kamran Raza 1761 1763 Editor: Rajiv Asati 1764 1766 Editor: Xufeng Liu 1767 1769 Editor: Santosh Esale 1770 1772 Editor: Xia Chen 1773 1775 Editor: Himanshu Shah 1776 "; 1778 description 1779 "This YANG module defines the essential components for the 1780 management of Multi-Protocol Label Switching (MPLS) Label 1781 Distribution Protocol (LDP). It is also the base model to 1782 be augmented for Multipoint LDP (mLDP). 1784 Copyright (c) 2018 IETF Trust and the persons identified as 1785 authors of the code. All rights reserved. 1787 Redistribution and use in source and binary forms, with or 1788 without modification, is permitted pursuant to, and subject to 1789 the license terms contained in, the Simplified BSD License set 1790 forth in Section 4.c of the IETF Trust's Legal Provisions 1791 Relating to IETF Documents 1792 (http://trustee.ietf.org/license-info). 1794 This version of this YANG module is part of RFC XXXX; see the 1795 RFC itself for full legal notices."; 1797 // RFC Editor: replace XXXX with actual RFC number and remove 1798 // this note 1800 revision 2018-10-22 { 1801 // RFC Editor: replace the above date 2018-10-22 with the date of 1802 // publication and remove this note. 1804 description 1805 "Initial revision."; 1806 reference 1807 "RFC XXXX: YANG Data Model for MPLS LDP."; 1808 // RFC Editor: replace XXXX with actual RFC number and remove 1809 // this note 1810 } 1812 /* 1813 * Typedefs 1814 */ 1815 typedef ldp-address-family { 1816 type identityref { 1817 base rt:address-family; 1818 } 1819 description 1820 "LDP address family type."; 1821 } 1823 typedef duration32-inf { 1824 type union { 1825 type uint32; 1826 type enumeration { 1827 enum "infinite" { 1828 description "The duration is infinite."; 1829 } 1830 } 1831 } 1832 units seconds; 1833 description 1834 "Duration represented as 32 bit seconds with infinite."; 1835 } 1837 typedef advertised-received { 1838 type enumeration { 1839 enum advertised { 1840 description "Advertised information."; 1841 } 1842 enum received { 1843 description "Received information."; 1844 } 1845 } 1846 description 1847 "Received or advertised."; 1848 } 1850 typedef downstream-upstream { 1851 type enumeration { 1852 enum downstream { 1853 description "Downstream information."; 1854 } 1855 enum upstream { 1856 description "Upstream information."; 1857 } 1858 } 1859 description 1860 "Received or advertised."; 1861 } 1863 typedef label-adv-mode { 1864 type enumeration { 1865 enum downstream-unsolicited { 1866 description "Downstream Unsolicited."; 1867 } 1868 enum downstream-on-demand { 1869 description "Downstream on Demand."; 1870 } 1871 } 1872 description 1873 "Label Advertisement Mode."; 1874 } 1876 typedef oper-status-event-type { 1877 type enumeration { 1878 enum up { 1879 value 1; 1880 description 1881 "Operational status changed to up."; 1882 } 1883 enum down { 1884 value 2; 1885 description 1886 "Operational status changed to down."; 1887 } 1888 } 1889 description "Operational status event type for notifications."; 1890 } 1892 /* 1893 * Identities 1894 */ 1895 identity adjacency-flag-base { 1896 description "Base type for adjacency flags."; 1897 } 1899 identity adjacency-flag-active { 1900 base adjacency-flag-base; 1901 description 1902 "This adjacency is configured and actively created."; 1903 } 1905 identity adjacency-flag-passive { 1906 base adjacency-flag-base; 1907 description 1908 "This adjacency is not configured and passively accepted."; 1909 } 1911 /* 1912 * Groupings 1913 */ 1915 grouping adjacency-state-attributes { 1916 description 1917 "The operational state attributes of an LDP hello adjacency, 1918 which can used for basic and extended discoveris, in IPv4 and 1919 IPv6 address families."; 1921 leaf-list flag { 1922 type identityref { 1923 base adjacency-flag-base; 1924 } 1925 description 1926 "On or more flags to indicate whether the adjacency is 1927 actively created, passively accepted, or both."; 1928 } 1929 container hello-holdtime { 1930 description 1931 "Containing hello holdtime state information."; 1932 leaf adjacent { 1933 type uint16; 1934 units seconds; 1935 description 1936 "The holdtime value learned from the adjacent LSR."; 1937 } 1938 leaf negotiated { 1939 type uint16; 1940 units seconds; 1941 description 1942 "The holdtime negotiated between this LSR and the adjacent 1943 LSR."; 1944 } 1945 leaf remaining { 1946 type uint16; 1947 units seconds; 1948 description 1949 "The time remaining until the holdtime timer expires."; 1950 } 1951 } 1953 leaf next-hello { 1954 type uint16; 1955 units seconds; 1956 description 1957 "The time when the next Hello message will be sent."; 1958 } 1960 container statistics { 1961 description 1962 "Statistics objects."; 1964 leaf discontinuity-time { 1965 type yang:date-and-time; 1966 mandatory true; 1967 description 1968 "The time on the most recent occasion at which any one or 1969 more of this interface's counters suffered a 1970 discontinuity. If no such discontinuities have occurred 1971 since the last re-initialization of the local management 1972 subsystem, then this node contains the time the local 1973 management subsystem re-initialized itself."; 1974 } 1976 leaf hello-received { 1977 type yang:counter64; 1978 description 1979 "The number of Hello messages received."; 1980 } 1981 leaf hello-dropped { 1982 type yang:counter64; 1983 description 1984 "The number of Hello messages dropped."; 1985 } 1986 } // statistics 1987 } // adjacency-state-attributes 1989 grouping basic-discovery-timers { 1990 description 1991 "The timer attributes for basic discovery, used in the 1992 per-interface setting and in the all-interface setting."; 1994 leaf hello-holdtime { 1995 type uint16 { 1996 range 15..3600; 1997 } 1998 units seconds; 1999 default 15; 2000 description 2001 "The time interval for which a LDP link Hello adjacency 2002 is maintained in the absence of link Hello messages from 2003 the LDP neighbor"; 2004 } 2005 leaf hello-interval { 2006 type uint16 { 2007 range 5..1200; 2008 } 2009 units seconds; 2010 default 5; 2011 description 2012 "The interval between consecutive LDP link Hello messages 2013 used in basic LDP discovery"; 2014 } 2015 } // basic-discovery-timers 2017 grouping binding-address-state-attributes { 2018 description 2019 "Operational state attributes of an address binding, used in 2020 IPv4 and IPv6 address families."; 2022 leaf advertisement-type { 2023 type advertised-received; 2024 description 2025 "Received or advertised."; 2026 } 2027 container peer { 2028 when "../advertisement-type = 'received'" { 2029 description 2030 "Applicable for received address."; 2031 } 2032 description 2033 "LDP peer from which this address is received."; 2034 uses ldp-peer-ref; 2035 } 2036 } // binding-address-state-attributes 2038 grouping binding-label-state-attributes { 2039 description 2040 "Operational state attributes for a FEC-label binding, used in 2041 IPv4 and IPv6 address families."; 2043 list peer { 2044 key "lsr-id label-space-id advertisement-type"; 2045 description 2046 "List of advertised and received peers."; 2047 uses ldp-peer-ref { 2048 description 2049 "The LDP peer from which this binding is received, or to 2050 which this binding is advertised. 2051 The peer is identified by its LDP ID, which consists of 2052 the LSR ID and the Label Space ID."; 2053 } 2054 leaf advertisement-type { 2055 type advertised-received; 2056 description 2057 "Received or advertised."; 2058 } 2059 leaf label { 2060 type rt-types:mpls-label; 2061 description 2062 "Advertised (outbound) or received (inbound) 2063 label."; 2064 } 2065 leaf used-in-forwarding { 2066 type boolean; 2067 description 2068 "'true' if the lable is used in forwarding."; 2069 } 2070 } // peer 2071 } // binding-label-state-attributes 2073 grouping graceful-restart-attributes-per-peer { 2074 description 2075 "Per peer graceful restart attributes. 2076 On the local side, these attributes are configuration and 2077 operational state data. One the peer side, these attributes 2078 are operational state data reveiced from the peer."; 2080 container graceful-restart { 2081 description 2082 "Attributes for graceful restart."; 2083 leaf enable { 2084 type boolean; 2085 default false; 2086 description 2087 "Enable or disable graceful restart."; 2088 } 2089 leaf reconnect-time { 2090 type uint16 { 2091 range 10..1800; 2092 } 2093 units seconds; 2094 default 120; 2095 description 2096 "Specifies the time interval that the remote LDP peer 2097 must wait for the local LDP peer to reconnect after the 2098 remote peer detects the LDP communication failure."; 2099 } 2100 leaf recovery-time { 2101 type uint16 { 2102 range 30..3600; 2103 } 2104 units seconds; 2105 default 120; 2106 description 2107 "Specifies the time interval, in seconds, that the remote 2108 LDP peer preserves its MPLS forwarding state after 2109 receiving the Initialization message from the restarted 2110 local LDP peer."; 2111 } 2112 } // graceful-restart 2113 } // graceful-restart-attributes-per-peer 2115 grouping ldp-interface-ref { 2116 description 2117 "Defining a reference to LDP interface."; 2119 leaf name { 2120 type if:interface-ref; 2121 must "(/if:interfaces/if:interface[if:name=current()]/ip:ipv4)" 2122 + " or " 2123 + "(/if:interfaces/if:interface[if:name=current()]/ip:ipv6)" 2124 { 2125 description "Interface is IPv4 or IPv6."; 2126 } 2127 description 2128 "The name of an LDP interface."; 2129 } 2130 } 2132 grouping ldp-peer-ref { 2133 description 2134 "An absolute reference to an LDP peer, by the LDP ID, which 2135 consists of the LSR ID and the Label Space ID."; 2137 leaf lsr-id { 2138 type leafref { 2139 path "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 2140 + "ldp:peers/ldp:peer/ldp:lsr-id"; 2141 } 2142 description 2143 "The LSR ID of the peer, as a portion of the peer LDP ID."; 2144 } 2145 leaf label-space-id { 2146 type leafref { 2147 path "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 2148 + "ldp:peers/ldp:peer/ldp:label-space-id"; 2149 } 2150 description 2151 "The Label Space ID of the peer, as a portion of the peer 2152 LDP ID."; 2154 } 2155 } // ldp-peer-ref 2157 grouping ldp-peer-ref-container { 2158 description 2159 "A container containing an absolute reference to an LDP peer."; 2161 container peer { 2162 description 2163 "Reference to an LDP peer, by the LDP ID, which consists of 2164 the LSR ID and the Label Space ID."; 2165 uses ldp-peer-ref; 2166 } // peer 2167 } // ldp-peer-ref 2169 grouping peer-attributes { 2170 description 2171 "Peer configuration attributes, used in the per-peer setting 2172 can in the all-peer setting."; 2174 leaf session-ka-holdtime { 2175 type uint16 { 2176 range 45..3600; 2177 } 2178 units seconds; 2179 default 180; 2180 description 2181 "The time interval after which an inactive LDP session 2182 terminates and the corresponding TCP session closes. 2183 Inactivity is defined as not receiving LDP packets from the 2184 peer."; 2185 } 2186 leaf session-ka-interval { 2187 type uint16 { 2188 range 15..1200; 2189 } 2190 units seconds; 2191 default 60; 2192 description 2193 "The interval between successive transmissions of keepalive 2194 packets. Keepalive packets are only sent in the absence of 2195 other LDP packets transmitted over the LDP session."; 2196 } 2197 } // peer-attributes 2199 grouping peer-authentication { 2200 description 2201 "Peer authentication container, used in the per-peer setting 2202 can in the all-peer setting."; 2204 container authentication { 2205 description 2206 "Containing authentication information."; 2207 choice auth-type-selection { 2208 description 2209 "Options for expressing authentication setting."; 2210 case auth-key { 2211 leaf md5-key { 2212 type string; 2213 description 2214 "MD5 Key string."; 2215 } 2216 } 2217 } 2218 } // authentication 2219 } // peer-authentication 2221 grouping peer-state-derived { 2222 description 2223 "The peer state information derived from the LDP protocol 2224 operatoins."; 2226 container label-advertisement-mode { 2227 config false; 2228 description "Label advertisement mode state."; 2229 leaf local { 2230 type label-adv-mode; 2231 description 2232 "Local Label Advertisement Mode."; 2233 } 2234 leaf peer { 2235 type label-adv-mode; 2236 description 2237 "Peer Label Advertisement Mode."; 2238 } 2239 leaf negotiated { 2240 type label-adv-mode; 2241 description 2242 "Negotiated Label Advertisement Mode."; 2243 } 2244 } 2245 leaf next-keep-alive { 2246 type uint16; 2247 units seconds; 2248 config false; 2249 description "Time to send the next KeepAlive message."; 2251 } 2253 container received-peer-state { 2254 config false; 2255 description 2256 "Operational state information learned from the peer."; 2258 uses graceful-restart-attributes-per-peer; 2260 container capability { 2261 description "Configure capability."; 2262 container end-of-lib { 2263 description 2264 "Configure end-of-lib capability."; 2265 leaf enable { 2266 type boolean; 2267 description 2268 "Enable end-of-lib capability."; 2269 } 2270 } 2271 container typed-wildcard-fec { 2272 description 2273 "Configure typed-wildcard-fec capability."; 2274 leaf enable { 2275 type boolean; 2276 description 2277 "Enable typed-wildcard-fec capability."; 2278 } 2279 } 2280 container upstream-label-assignment { 2281 description 2282 "Configure upstream label assignment capability."; 2283 leaf enable { 2284 type boolean; 2285 description 2286 "Enable upstream label assignment."; 2287 } 2288 } 2289 } // capability 2290 } // received-peer-state 2292 container session-holdtime { 2293 config false; 2294 description "Session holdtime state."; 2295 leaf peer { 2296 type uint16; 2297 units seconds; 2298 description "Peer holdtime."; 2300 } 2301 leaf negotiated { 2302 type uint16; 2303 units seconds; 2304 description "Negotiated holdtime."; 2305 } 2306 leaf remaining { 2307 type uint16; 2308 units seconds; 2309 description "Remaining holdtime."; 2310 } 2311 } // session-holdtime 2313 leaf session-state { 2314 type enumeration { 2315 enum non-existent { 2316 description "NON EXISTENT state. Transport disconnected."; 2317 } 2318 enum initialized { 2319 description "INITIALIZED state."; 2320 } 2321 enum openrec { 2322 description "OPENREC state."; 2323 } 2324 enum opensent { 2325 description "OPENSENT state."; 2326 } 2327 enum operational { 2328 description "OPERATIONAL state."; 2329 } 2330 } 2331 config false; 2332 description 2333 "Representing the operational status of the LDP session."; 2334 reference 2335 "RFC5036, Sec. 2.5.4."; 2336 } 2338 container tcp-connection { 2339 config false; 2340 description "TCP connection state."; 2341 leaf local-address { 2342 type inet:ip-address; 2343 description "Local address."; 2344 } 2345 leaf local-port { 2346 type inet:port-number; 2347 description "Local port number."; 2349 } 2350 leaf remote-address { 2351 type inet:ip-address; 2352 description "Remote address."; 2353 } 2354 leaf remote-port { 2355 type inet:port-number; 2356 description "Remote port number."; 2357 } 2358 } // tcp-connection 2360 leaf up-time { 2361 type string; 2362 config false; 2363 description "Up time. The interval format in ISO 8601."; 2364 } 2366 container statistics { 2367 config false; 2368 description 2369 "Statistics objects."; 2371 leaf discontinuity-time { 2372 type yang:date-and-time; 2373 mandatory true; 2374 description 2375 "The time on the most recent occasion at which any one or 2376 more of this interface's counters suffered a 2377 discontinuity. If no such discontinuities have occurred 2378 since the last re-initialization of the local management 2379 subsystem, then this node contains the time the local 2380 management subsystem re-initialized itself."; 2381 } 2383 container received { 2384 description "Inbound statistics."; 2385 uses statistics-peer-received-sent; 2386 } 2387 container sent { 2388 description "Outbound statistics."; 2389 uses statistics-peer-received-sent; 2390 } 2392 leaf total-addresses { 2393 type uint32; 2394 description 2395 "The number of learned addresses."; 2396 } 2397 leaf total-labels { 2398 type uint32; 2399 description 2400 "The number of learned labels."; 2401 } 2402 leaf total-fec-label-bindings { 2403 type uint32; 2404 description 2405 "The number of learned label-address bindings."; 2406 } 2407 } // statistics 2408 } // peer-state-derived 2410 grouping statistics-peer-received-sent { 2411 description 2412 "Inbound and outbound statistic counters."; 2413 leaf total-octets { 2414 type yang:counter64; 2415 description 2416 "The total number of octets sent or received."; 2417 } 2418 leaf total-messages { 2419 type yang:counter64; 2420 description 2421 "The number of messages sent or received."; 2422 } 2423 leaf address { 2424 type yang:counter64; 2425 description 2426 "The number of address messages sent or received."; 2427 } 2428 leaf address-withdraw { 2429 type yang:counter64; 2430 description 2431 "The number of address-withdraw messages sent or received."; 2432 } 2433 leaf initialization { 2434 type yang:counter64; 2435 description 2436 "The number of initialization messages sent or received."; 2437 } 2438 leaf keepalive { 2439 type yang:counter64; 2440 description 2441 "The number of keepalive messages sent or received."; 2442 } 2443 leaf label-abort-request { 2444 type yang:counter64; 2445 description 2446 "The number of label-abort-request messages sent or 2447 received."; 2448 } 2449 leaf label-mapping { 2450 type yang:counter64; 2451 description 2452 "The number of label-mapping messages sent or received."; 2453 } 2454 leaf label-release { 2455 type yang:counter64; 2456 description 2457 "The number of label-release messages sent or received."; 2458 } 2459 leaf label-request { 2460 type yang:counter64; 2461 description 2462 "The number of label-request messages sent or received."; 2463 } 2464 leaf label-withdraw { 2465 type yang:counter64; 2466 description 2467 "The number of label-withdraw messages sent or received."; 2468 } 2469 leaf notification { 2470 type yang:counter64; 2471 description 2472 "The number of messages sent or received."; 2473 } 2474 } // statistics-peer-received-sent 2476 /* 2477 * Configuration data and operational state data nodes 2478 */ 2480 augment "/rt:routing/rt:control-plane-protocols" { 2481 description "LDP augmentation."; 2483 container mpls-ldp { 2484 presence 2485 "Enables the LDP protocol."; 2486 description 2487 "Containing configuration and operational data for the LDP 2488 protocol."; 2490 container global { 2491 description 2492 "Global attributes for LDP."; 2494 container capability { 2495 description 2496 "Containing the LDP capability data. The container is 2497 used for augmentations."; 2498 reference 2499 "RFC5036: Sec. 1.5."; 2500 } // capability 2502 container graceful-restart { 2503 description 2504 "Attributes for graceful restart."; 2505 leaf enable { 2506 type boolean; 2507 default false; 2508 description 2509 "Enable or disable graceful restart."; 2510 } 2511 leaf reconnect-time { 2512 type uint16 { 2513 range 10..1800; 2514 } 2515 units seconds; 2516 default 120; 2517 description 2518 "Specifies the time interval that the remote LDP peer 2519 must wait for the local LDP peer to reconnect after 2520 the remote peer detects the LDP communication 2521 failure."; 2522 } 2523 leaf recovery-time { 2524 type uint16 { 2525 range 30..3600; 2526 } 2527 units seconds; 2528 default 120; 2529 description 2530 "Specifies the time interval, in seconds, that the 2531 remote LDP peer preserves its MPLS forwarding state 2532 after receiving the Initialization message from the 2533 restarted local LDP peer."; 2534 } 2535 leaf forwarding-holdtime { 2536 type uint16 { 2537 range 30..3600; 2538 } 2539 units seconds; 2540 default 180; 2541 description 2542 "Specifies the time interval, in seconds, before the 2543 termination of the recovery phase."; 2544 } 2545 } // graceful-restart 2547 leaf lsr-id { 2548 type rt-types:router-id; 2549 description 2550 "Specify the value to act as the LDP LSR ID. 2551 If this attribute is not specified, LDP uses the router 2552 ID as determined by the system."; 2553 } 2555 container address-families { 2556 description 2557 "Per address family confgiration and operational state. 2558 The address family can be either IPv4 or IPv6."; 2559 container ipv4 { 2560 presence 2561 "Present if IPv4 is enabled, unless the 'enable' 2562 leaf is set to 'false'"; 2563 description 2564 "Containing data related to the IPv4 address family."; 2566 leaf enable { 2567 type boolean; 2568 default true; 2569 description 2570 "'true' to enable the address family."; 2571 } 2573 leaf label-distribution-controlmode { 2574 type enumeration { 2575 enum independent { 2576 description 2577 "Independent label distribution control."; 2578 } 2579 enum ordered { 2580 description 2581 "Ordered label distribution control."; 2582 } 2583 } 2584 config false; 2585 description 2586 "Label distribution control mode."; 2587 reference 2588 "RFC5036: LDP Specification. Sec 2.6."; 2589 } 2590 // ipv4 bindings 2591 container bindings { 2592 config false; 2593 description 2594 "LDP address and label binding information."; 2595 list address { 2596 key "address"; 2597 description 2598 "List of address bindings learned by LDP."; 2599 leaf address { 2600 type inet:ipv4-address; 2601 description 2602 "The IPv4 address learned from an Address 2603 message received from or advertised to a peer."; 2604 } 2605 uses binding-address-state-attributes; 2606 } // binding-address 2608 list fec-label { 2609 key "fec"; 2610 description 2611 "List of FEC-label bindings learned by LDP."; 2612 leaf fec { 2613 type inet:ipv4-prefix; 2614 description 2615 "The prefix FEC value in the FEC-label binding, 2616 learned in a Label Mapping message received from 2617 or advertised to a peer."; 2618 } 2619 uses binding-label-state-attributes; 2620 } // fec-label 2621 } // bindings 2622 } // ipv4 2623 } // address-families 2624 } // global 2626 container discovery { 2627 description 2628 "Neibgbor discovery configuration and operational state."; 2630 container interfaces { 2631 description 2632 "A list of interfaces for LDP Basic Descovery."; 2633 reference 2634 "RFC5036: LDP Specification. Sec 2.4.1."; 2636 uses basic-discovery-timers; 2637 list interface { 2638 key "name"; 2639 description 2640 "List of LDP interfaces used for LDP Basic Discovery."; 2641 uses ldp-interface-ref; 2642 leaf next-hello { 2643 type uint16; 2644 units seconds; 2645 config false; 2646 description "Time to send the next hello message."; 2647 } 2649 container address-families { 2650 description 2651 "Container for address families."; 2652 container ipv4 { 2653 presence 2654 "Present if IPv4 is enabled, unless the 'enable' 2655 leaf is set to 'false'"; 2656 description 2657 "IPv4 address family."; 2659 leaf enable { 2660 type boolean; 2661 default true; 2662 description 2663 "Enable the address family on the interface."; 2664 } 2666 // ipv4 2667 container hello-adjacencies { 2668 config false; 2669 description 2670 "Containing a list of hello adjacencies."; 2672 list hello-adjacency { 2673 key "adjacent-address"; 2674 config false; 2675 description "List of hello adjacencies."; 2677 leaf adjacent-address { 2678 type inet:ipv4-address; 2679 description 2680 "Neighbor address of the hello adjacency."; 2681 } 2683 uses adjacency-state-attributes; 2684 uses ldp-peer-ref-container; 2686 } // hello-adjacency 2687 } // hello-adjacencies 2688 } // ipv4 2689 } // address-families 2690 } // list interface 2691 } // interfaces 2693 container targeted 2694 { 2695 description 2696 "A list of targeted neighbors for extended discovery."; 2698 leaf hello-holdtime { 2699 type uint16 { 2700 range 15..3600; 2701 } 2702 units seconds; 2703 default 45; 2704 description 2705 "The time interval for which LDP targeted Hello 2706 adjacency is maintained in the absence of targeted 2707 Hello messages from an LDP neighbor."; 2708 } 2709 leaf hello-interval { 2710 type uint16 { 2711 range 5..3600; 2712 } 2713 units seconds; 2714 default 15; 2715 description 2716 "The interval between consecutive LDP targeted Hello 2717 messages used in extended LDP discovery."; 2718 } 2720 container hello-accept { 2721 description 2722 "LDP policy to control the acceptance of extended 2723 neighbor discovery Hello messages."; 2725 leaf enable { 2726 type boolean; 2727 default false; 2728 description 2729 "'true' to accept; 'false' to deny."; 2730 } 2731 } // hello-accept 2733 container address-families { 2734 description 2735 "Container for address families."; 2736 container ipv4 { 2737 presence 2738 "Present if IPv4 is enabled."; 2739 description 2740 "IPv4 address family."; 2742 container hello-adjacencies { 2743 config false; 2744 description 2745 "Containing a list of hello adjacencies."; 2747 list hello-adjacency { 2748 key "local-address adjacent-address"; 2749 description "List of hello adjacencies."; 2751 leaf local-address { 2752 type inet:ipv4-address; 2753 description 2754 "Local address of the hello adjacency."; 2755 } 2756 leaf adjacent-address { 2757 type inet:ipv4-address; 2758 description 2759 "Neighbor address of the hello adjacency."; 2760 } 2762 uses adjacency-state-attributes; 2763 uses ldp-peer-ref-container; 2764 } // hello-adjacency 2765 } // hello-adjacencies 2767 list target { 2768 key "adjacent-address"; 2769 description 2770 "Targeted discovery params."; 2772 leaf adjacent-address { 2773 type inet:ipv4-address; 2774 description 2775 "Configures a remote LDP neighbor and enables 2776 extended LDP discovery of the specified 2777 neighbor."; 2778 } 2780 leaf enable { 2781 type boolean; 2782 default true; 2783 description 2784 "Enable the target."; 2785 } 2786 leaf local-address { 2787 type inet:ipv4-address; 2788 description 2789 "The local address used as the source address to 2790 send targeted Hello messages. 2791 If the value is not specified, the 2792 transport-address is used as the source 2793 address."; 2794 } 2795 } // target 2796 } // ipv4 2797 } // address-families 2798 } // targeted 2799 } // discovery 2801 container peers { 2802 description 2803 "Peers configuration attributes."; 2805 uses peer-authentication; 2806 uses peer-attributes; 2808 list peer { 2809 key "lsr-id label-space-id"; 2810 description 2811 "List of peers."; 2813 leaf lsr-id { 2814 type rt-types:router-id; 2815 description 2816 "The LSR ID of the peer, to identify the globally 2817 unique LSR. This is the first four octets of the LDP 2818 ID. This leaf is used together with the leaf 2819 'label-space-id' to form the LDP ID."; 2820 reference 2821 "RFC5036. Sec 2.2.2."; 2822 } 2823 leaf label-space-id { 2824 type uint16; 2825 description 2826 "The Label Space ID of the peer, to identify a specific 2827 label space within the LSR. This is the last two 2828 octets of the LDP ID. This leaf is used together with 2829 the leaf 'lsr-id' to form the LDP ID."; 2831 reference 2832 "RFC5036. Sec 2.2.2."; 2833 } 2835 uses peer-authentication; 2836 container capability { 2837 description 2838 "Per peer capability"; 2839 } 2841 container address-families { 2842 description 2843 "Per-vrf per-af params."; 2844 container ipv4 { 2845 presence 2846 "Present if IPv4 is enabled."; 2847 description 2848 "IPv4 address family."; 2850 container hello-adjacencies { 2851 config false; 2852 description 2853 "Containing a list of hello adjacencies."; 2855 list hello-adjacency { 2856 key "local-address adjacent-address"; 2857 description "List of hello adjacencies."; 2859 leaf local-address { 2860 type inet:ipv4-address; 2861 description 2862 "Local address of the hello adjacency."; 2863 } 2864 leaf adjacent-address { 2865 type inet:ipv4-address; 2866 description 2867 "Neighbor address of the hello adjacency."; 2868 } 2870 uses adjacency-state-attributes; 2872 leaf interface { 2873 type if:interface-ref; 2874 description "Interface for this adjacency."; 2875 } 2876 } // hello-adjacency 2877 } // hello-adjacencies 2878 } // ipv4 2880 } // address-families 2882 uses peer-state-derived; 2883 } // list peer 2884 } // peers 2885 } // container mpls-ldp 2886 } 2888 /* 2889 * RPCs 2890 */ 2891 rpc mpls-ldp-clear-peer { 2892 description 2893 "Clears the session to the peer."; 2894 input { 2895 uses ldp-peer-ref { 2896 description 2897 "The LDP peer to be cleared. If this is not provided 2898 then all peers are cleared. 2899 The peer is identified by its LDP ID, which consists of 2900 the LSR ID and the Label Space ID."; 2901 } 2902 } 2903 } 2905 rpc mpls-ldp-clear-hello-adjacency { 2906 description 2907 "Clears the hello adjacency"; 2908 input { 2909 container hello-adjacency { 2910 description 2911 "Link adjacency or targettted adjacency. If this is not 2912 provided then all hello adjacencies are cleared"; 2913 choice hello-adjacency-type { 2914 description "Adjacency type."; 2915 case targeted { 2916 container targeted { 2917 presence "Present to clear targeted adjacencies."; 2918 description 2919 "Clear targeted adjacencies."; 2920 leaf target-address { 2921 type inet:ip-address; 2922 description 2923 "The target address. If this is not provided then 2924 all targeted adjacencies are cleared"; 2925 } 2926 } // targeted 2927 } 2928 case link { 2929 container link { 2930 presence "Present to clear link adjacencies."; 2931 description 2932 "Clear link adjacencies."; 2933 leaf next-hop-interface { 2934 type leafref { 2935 path "/rt:routing/rt:control-plane-protocols/" 2936 + "mpls-ldp/discovery/interfaces/interface/name"; 2937 } 2938 description 2939 "Interface connecting to next-hop. If this is not 2940 provided then all link adjacencies are cleared."; 2941 } 2942 leaf next-hop-address { 2943 type inet:ip-address; 2944 must "../next-hop-interface" { 2945 description 2946 "Applicable when interface is specified."; 2947 } 2948 description 2949 "IP address of next-hop. If this is not provided 2950 then adjacencies to all next-hops on the given 2951 interface are cleared."; 2952 } // next-hop-address 2953 } // link 2954 } 2955 } 2956 } 2957 } 2958 } 2960 rpc mpls-ldp-clear-peer-statistics { 2961 description 2962 "Clears protocol statistics (e.g. sent and received 2963 counters)."; 2964 input { 2965 uses ldp-peer-ref { 2966 description 2967 "The LDP peer whose statistics are to be cleared. 2968 If this is not provided then all peers' statistics are 2969 cleared. 2970 The peer is identified by its LDP ID, which consists of 2971 the LSR ID and the Label Space ID."; 2972 } 2973 } 2974 } 2975 /* 2976 * Notifications 2977 */ 2978 notification mpls-ldp-peer-event { 2980 description 2981 "Notification event for a change of LDP peer operational 2982 status."; 2983 leaf event-type { 2984 type oper-status-event-type; 2985 description "Event type."; 2986 } 2987 uses ldp-peer-ref-container; 2988 } 2990 notification mpls-ldp-hello-adjacency-event { 2991 description 2992 "Notification event for a change of LDP adjacency operational 2993 status."; 2994 leaf event-type { 2995 type oper-status-event-type; 2996 description "Event type."; 2997 } 2998 choice hello-adjacency-type { 2999 description 3000 "Interface or targeted adjacency."; 3001 case targeted { 3002 container targeted { 3003 description 3004 "Targeted adjacency through LDP extended discovery."; 3005 leaf target-address { 3006 type inet:ip-address; 3007 description 3008 "The target adjacent address learned."; 3009 } 3010 } // targeted 3011 } 3012 case link { 3013 container link { 3014 description 3015 "Link adjacency through LDP basic discovery."; 3016 leaf next-hop-interface { 3017 type if:interface-ref; 3018 description 3019 "The interface connecting to the adjacent next hop."; 3020 } 3021 leaf next-hop-address { 3022 type inet:ip-address; 3023 must "../next-hop-interface" { 3024 description 3025 "Applicable when interface is specified."; 3027 } 3028 description 3029 "IP address of the next hop. This can be IPv4 or IPv6 3030 address."; 3031 } 3032 } // link 3033 } 3034 } 3035 } 3037 notification mpls-ldp-fec-event { 3038 description 3039 "Notification event for a change of FEC status."; 3040 leaf event-type { 3041 type oper-status-event-type; 3042 description "Event type."; 3043 } 3044 leaf prefix { 3045 type inet:ip-prefix; 3046 description 3047 "The address prefix element of the FEC whose status 3048 has changed."; 3049 } 3050 } 3051 } 3053 3055 Figure 17 3057 9.2. Extended 3059 This YANG module imports types defined in [RFC6991], [RFC8349], 3060 [RFC8177], and [RFC8343]. 3062 file "ietf-mpls-ldp-extended@2018-10-22.yang" 3064 // RFC Editor: replace the above date 2018-02-28 with the date of 3065 // publication and remove this note. 3067 module ietf-mpls-ldp-extended { 3068 yang-version 1.1; 3070 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended"; 3071 prefix "ldp-ext"; 3073 import ietf-inet-types { 3074 prefix "inet"; 3075 reference "RFC 6991: Common YANG Data Types"; 3076 } 3078 import ietf-routing { 3079 prefix "rt"; 3080 reference 3081 "RFC 8349: A YANG Data Model for Routing Management (NMDA 3082 version)"; 3083 } 3085 import ietf-key-chain { 3086 prefix "key-chain"; 3087 reference "RFC 8177: YANG Data Model for Key Chains"; 3088 } 3090 import ietf-mpls-ldp { 3091 prefix "ldp"; 3092 reference "RFC XXXX: YANG Data Model for MPLS LDP"; 3093 // RFC Editor: replace XXXX with actual RFC number and remove 3094 // this note 3095 } 3097 import ietf-interfaces { 3098 prefix "if"; 3099 reference "RFC 8343: A YANG Data Model for Interface Management"; 3100 } 3102 organization 3103 "IETF MPLS Working Group"; 3104 contact 3105 "WG Web: 3106 WG List: 3108 Editor: Kamran Raza 3109 3111 Editor: Rajiv Asati 3112 3114 Editor: Xufeng Liu 3115 3117 Editor: Santosh Esale 3118 3120 Editor: Xia Chen 3121 3123 Editor: Himanshu Shah 3124 "; 3126 description 3127 "This YANG module defines the extended components for the 3128 management of Multi-Protocol Label Switching (MPLS) Label 3129 Distribution Protocol (LDP). It is also the model to 3130 be augmented for extended Multipoint LDP (mLDP). 3132 Copyright (c) 2018 IETF Trust and the persons identified as 3133 authors of the code. All rights reserved. 3135 Redistribution and use in source and binary forms, with or 3136 without modification, is permitted pursuant to, and subject to 3137 the license terms contained in, the Simplified BSD License set 3138 forth in Section 4.c of the IETF Trust's Legal Provisions 3139 Relating to IETF Documents 3140 (http://trustee.ietf.org/license-info). 3142 This version of this YANG module is part of RFC XXXX; see the 3143 RFC itself for full legal notices."; 3145 // RFC Editor: replace XXXX with actual RFC number and remove 3146 // this note 3148 revision 2018-10-22 { 3149 // RFC Editor: replace the above date 2018-10-22 with the date of 3150 // publication and remove this note. 3152 description 3153 "Initial revision."; 3154 reference 3155 "RFC XXXX: YANG Data Model for MPLS LDP."; 3157 // RFC Editor: replace XXXX with actual RFC number and remove 3158 // this note 3159 } 3161 /* 3162 * Features 3163 */ 3164 feature dual-stack-transport-pereference { 3165 description 3166 "This feature indicates that the system allows to configure 3167 the transport connection pereference in a dual-stack setup."; 3168 } 3170 feature capability-end-of-lib { 3171 description 3172 "This feature indicates that the system allows to configure 3173 LDP end-of-lib capability."; 3174 } 3176 feature capability-typed-wildcard-fec { 3177 description 3178 "This feature indicates that the system allows to configure 3179 LDP typed-wildcard-fec capability."; 3180 } 3182 feature capability-upstream-label-assignment { 3183 description 3184 "This feature indicates that the system allows to configure 3185 LDP upstream label assignment capability."; 3186 } 3188 feature forwarding-nexthop-config { 3189 description 3190 "This feature indicates that the system allows to configure 3191 forwarding nexthop on interfaces."; 3192 } 3194 feature graceful-restart-helper-mode { 3195 description 3196 "This feature indicates that the system supports graceful 3197 restart helper mode."; 3198 } 3200 feature key-chain { 3201 description 3202 "This feature indicates that the system supports keychain for 3203 authentication."; 3204 } 3206 feature per-interface-timer-config { 3207 description 3208 "This feature indicates that the system allows to configure 3209 interface hello timers at the per-interface level."; 3210 } 3211 feature per-peer-admin-down { 3212 description 3213 "This feature indicates that the system allows to 3214 administratively disable a peer."; 3215 } 3217 feature per-peer-graceful-restart-config { 3218 description 3219 "This feature indicates that the system allows to configure 3220 graceful restart at the per-peer level."; 3221 } 3223 feature per-peer-session-attributes-config { 3224 description 3225 "This feature indicates that the system allows to configure 3226 session attributes at the per-peer level."; 3227 } 3229 feature policy-label-assignment-config { 3230 description 3231 "This feature indicates that the system allows to configure 3232 policies to assign labels according to certain prefixes."; 3233 } 3235 feature policy-ordered-label-config { 3236 description 3237 "This feature indicates that the system allows to configure 3238 ordered label policies."; 3239 } 3241 feature policy-targeted-discovery-config { 3242 description 3243 "This feature indicates that the system allows to configure 3244 policies to control the acceptance of targeted neighbor 3245 discovery hello messages."; 3246 } 3248 feature session-downstream-on-demand-config { 3249 description 3250 "This feature indicates that the system allows to configure 3251 session downstream-on-demand"; 3252 } 3254 /* 3255 * Typedefs 3256 */ 3257 typedef neighbor-list-ref { 3258 type string; 3259 description 3260 "A type for a reference to a neighbor address list. 3261 The string value is the name identifier for uniquely 3262 identifying the referenced address list, which contains a list 3263 of addresses that a routing policy can applied. The definition 3264 of such an address list is outside the scope of this 3265 document."; 3266 } 3268 typedef prefix-list-ref { 3269 type string; 3270 description 3271 "A type for a reference to a prefix list. 3272 The string value is the name identifier for uniquely 3273 identifying the referenced prefix set, which contains a list 3274 of prefixes that a routing policy can applied. The definition 3275 of such a prefix set is outside the scope of this document."; 3277 } 3279 typedef peer-list-ref { 3280 type string; 3281 description 3282 "A type for a reference to a peer address list. 3283 The string value is the name identifier for uniquely 3284 identifying the referenced address list, which contains a list 3285 of addresses that a routing policy can applied. The definition 3286 of such an address list is outside the scope of this 3287 document."; 3288 } 3290 /* 3291 * Identities 3292 */ 3294 /* 3295 * Groupings 3296 */ 3297 grouping address-family-ipv4-augment { 3298 description "Augmentation to address family IPv4."; 3300 uses policy-container; 3302 leaf transport-address { 3303 type inet:ipv4-address; 3304 description 3305 "The transport address advertised in LDP Hello messages. 3306 If this value is not specified, the LDP LSR ID is used as 3307 the transport address."; 3308 reference 3309 "RFC5036. Sec. 3.5.2."; 3310 } 3311 } // address-family-ipv4-augment 3313 grouping authentication-keychain-augment { 3314 description "Augmentation to authentication to add keychain."; 3316 leaf key-chain { 3317 type key-chain:key-chain-ref; 3318 description 3319 "key-chain name. 3320 If not specified, no key chain is used."; 3321 } 3322 } // authentication-keychain-augment 3324 grouping capability-augment { 3325 description "Augmentation to capability."; 3327 container end-of-lib { 3328 if-feature capability-end-of-lib; 3329 description 3330 "Configure end-of-lib capability."; 3331 leaf enable { 3332 type boolean; 3333 default false; 3334 description 3335 "Enable end-of-lib capability."; 3336 } 3337 } 3338 container typed-wildcard-fec { 3339 if-feature capability-typed-wildcard-fec; 3340 description 3341 "Configure typed-wildcard-fec capability."; 3342 leaf enable { 3343 type boolean; 3344 default false; 3345 description 3346 "Enable typed-wildcard-fec capability."; 3347 } 3348 } 3349 container upstream-label-assignment { 3350 if-feature capability-upstream-label-assignment; 3351 description 3352 "Configure upstream label assignment capability."; 3353 leaf enable { 3354 type boolean; 3355 default false; 3356 description 3357 "Enable upstream label assignment."; 3358 } 3359 } 3360 } // capability-augment 3362 grouping global-augment { 3363 description "Augmentation to global attributes."; 3365 leaf igp-synchronization-delay { 3366 type uint16 { 3367 range "0 | 3..300"; 3368 } 3369 units seconds; 3370 default 0; 3371 description 3372 "Sets the interval that the LDP waits before notifying the 3373 Interior Gateway Protocol (IGP) that label exchange is 3374 completed so that IGP can start advertising the normal 3375 metric for the link. 3376 If the value is not specified, there is no delay."; 3377 } 3378 } // global-augment 3380 grouping global-forwarding-nexthop-augment { 3381 description 3382 "Augmentation to global forwarding nexthop interfaces."; 3384 container forwarding-nexthop { 3385 if-feature forwarding-nexthop-config; 3386 description 3387 "Configuration for forwarding nexthop."; 3389 container interfaces { 3390 description 3391 "A list of interfaces on which forwarding is disabled."; 3393 list interface { 3394 key "name"; 3395 description 3396 "List of LDP interfaces used for LDP Basic Discovery."; 3397 uses ldp:ldp-interface-ref; 3398 list address-family { 3399 key "afi"; 3400 description 3401 "Per-vrf per-af params."; 3402 leaf afi { 3403 type ldp:ldp-address-family; 3404 description 3405 "Address family type value."; 3406 } 3407 leaf ldp-disable { 3408 type boolean; 3409 default false; 3410 description 3411 "'true' to disable LDP forwarding on the interface."; 3412 } 3413 } // address-family 3414 } // list interface 3415 } // interfaces 3416 } // forwarding-nexthop 3417 } // global-forwarding-nexthop-augment 3419 grouping graceful-restart-augment { 3420 description "Augmentation to graceful restart."; 3422 leaf helper-enable { 3423 if-feature graceful-restart-helper-mode; 3424 type boolean; 3425 default false; 3426 description 3427 "Enable or disable graceful restart helper mode."; 3428 } 3429 } // graceful-restart-augment 3431 grouping interface-address-family-ipv4-augment { 3432 description "Augmentation to interface address family IPv4."; 3434 leaf transport-address { 3435 type union { 3436 type enumeration { 3437 enum "use-global-transport-address" { 3438 description 3439 "Use the transport address set at the global level 3440 common for all interfaces for this address family."; 3441 } 3442 enum "use-interface-address" { 3443 description 3444 "Use interface address as the transport address."; 3445 } 3446 } 3447 type inet:ipv4-address; 3448 } 3449 default "use-global-transport-address"; 3450 description 3451 "IP address to be advertised as the LDP transport address."; 3452 } 3453 } // interface-address-family-ipv4-augment 3455 grouping interface-address-family-ipv6-augment { 3456 description "Augmentation to interface address family IPv6."; 3458 leaf transport-address { 3459 type union { 3460 type enumeration { 3461 enum "use-global-transport-address" { 3462 description 3463 "Use the transport address set at the global level 3464 common for all interfaces for this address family."; 3465 } 3466 enum "use-interface-address" { 3467 description 3468 "Use interface address as the transport address."; 3469 } 3470 } 3471 type inet:ipv6-address; 3472 } 3473 default "use-global-transport-address"; 3474 description 3475 "IP address to be advertised as the LDP transport address."; 3476 } 3477 } // interface-address-family-ipv6-augment 3479 grouping interface-augment { 3480 description "Augmentation to interface."; 3482 uses ldp:basic-discovery-timers { 3483 if-feature per-interface-timer-config; 3484 } 3485 leaf igp-synchronization-delay { 3486 if-feature per-interface-timer-config; 3487 type uint16 { 3488 range "0 | 3..300"; 3489 } 3490 units seconds; 3491 default 0; 3492 description 3493 "Sets the interval that the LDP waits before notifying the 3494 Interior Gateway Protocol (IGP) that label exchange is 3495 completed so that IGP can start advertising the normal 3496 metric for the link. 3497 If the value is not specified, there is no delay."; 3498 } 3500 } // interface-augment 3502 grouping peer-af-policy-container { 3503 description 3504 "LDP policy attribute container under peer address-family."; 3505 container label-policy { 3506 description 3507 "Label policy attributes."; 3508 container advertise { 3509 description 3510 "Label advertising policies."; 3511 leaf prefix-list { 3512 type prefix-list-ref; 3513 description 3514 "Applies the prefix list to filter outgoing label 3515 advertisements. 3516 If the value is not specified, no prefix filter 3517 is applied."; 3518 } 3519 } 3520 container accept { 3521 description 3522 "Label advertisement acceptance policies."; 3523 leaf prefix-list { 3524 type prefix-list-ref; 3525 description 3526 "Applies the prefix list to filer incoming label 3527 advertisements. 3528 If the value is not specified, no prefix filter 3529 is applied."; 3530 } 3531 } // accept 3532 } // label-policy 3533 } // peer-af-policy-container 3535 grouping peer-augment { 3536 description "Augmentation to each peer list entry."; 3538 leaf admin-down { 3539 if-feature per-peer-admin-down; 3540 type boolean; 3541 default false; 3542 description 3543 "'true' to disable the peer."; 3544 } 3546 uses ldp:graceful-restart-attributes-per-peer { 3547 if-feature per-peer-graceful-restart-config; 3549 } 3551 uses ldp:peer-attributes { 3552 if-feature per-peer-session-attributes-config; 3553 } 3554 } // peer-augment 3556 grouping peers-augment { 3557 description "Augmentation to peers container."; 3559 container session-downstream-on-demand { 3560 if-feature session-downstream-on-demand-config; 3561 description 3562 "Session downstream-on-demand attributes."; 3563 leaf enable { 3564 type boolean; 3565 default false; 3566 description 3567 "'true' if session downstream-on-demand is enabled."; 3568 } 3569 leaf peer-list { 3570 type peer-list-ref; 3571 description 3572 "The name of a peer ACL, to be applied to the 3573 downstream-on-demand sessions. 3574 If this value is not specified, no filter is applied to 3575 any downstream-on-demand sessions."; 3576 } 3577 } 3578 container dual-stack-transport-pereference { 3579 if-feature dual-stack-transport-pereference; 3580 description 3581 "The settings of peers to establish TCP connection in a 3582 dual-stack setup."; 3583 leaf max-wait { 3584 type uint16 { 3585 range "0..60"; 3586 } 3587 default 30; 3588 description 3589 "The maximum wait time in seconds for preferred transport 3590 connection establishment. 0 indicates no preference."; 3591 } 3592 container prefer-ipv4 { 3593 presence 3594 "Present if IPv4 is prefered for transport connection 3595 establishment, subject to the 'peer-list' in this 3596 container."; 3598 description 3599 "Uses IPv4 as the prefered address family for transport 3600 connection establishment, subject to the 'peer-list' in 3601 this container. 3602 If this container is not present, as a default, IPv6 is 3603 the prefered address family for transport connection 3604 establishment."; 3605 leaf peer-list { 3606 type peer-list-ref; 3607 description 3608 "The name of a peer ACL, to be applied to the IPv4 3609 transport connections. 3610 If this value is not specified, no filter is applied, 3611 and the IPv4 is prefered for all peers."; 3612 } 3613 } 3614 } 3615 } // peers-augment 3617 grouping policy-container { 3618 description 3619 "LDP policy attributes."; 3620 container label-policy { 3621 description 3622 "Label policy attributes."; 3623 container advertise { 3624 description 3625 "Label advertising policies."; 3626 container egress-explicit-null { 3627 description 3628 "Enables an egress router to advertise an 3629 explicit null label (value 0) in place of an 3630 implicit null label (value 3) to the 3631 penultimate hop router."; 3632 leaf enable { 3633 type boolean; 3634 default false; 3635 description 3636 "'true' to enable explicit null."; 3637 } 3638 } 3639 leaf prefix-list { 3640 type prefix-list-ref; 3641 description 3642 "Applies the prefix list to filter outgoing label 3643 advertisements. 3644 If the value is not specified, no prefix filter 3645 is applied."; 3647 } 3648 } // advertise 3649 container accept { 3650 description 3651 "Label advertisement acceptance policies."; 3652 leaf prefix-list { 3653 type prefix-list-ref; 3654 description 3655 "Applies the prefix list to filter incoming label 3656 advertisements. 3657 If the value is not specified, no prefix filter 3658 is applied."; 3659 } 3660 } // accept 3661 container assign { 3662 if-feature policy-label-assignment-config; 3663 description 3664 "Label assignment policies"; 3665 container independent-mode { 3666 description 3667 "Independent label policy attributes."; 3668 leaf prefix-list { 3669 type prefix-list-ref; 3670 description 3671 "Assign labels according to certain prefixes. 3672 If the value is not specified, no prefix filter 3673 is applied (labels are assigned to all learned 3674 routes)."; 3676 } 3677 } // independent-mode 3678 container ordered-mode { 3679 if-feature policy-ordered-label-config; 3680 description 3681 "Ordered label policy attributes."; 3682 leaf egress-prefix-list { 3683 type prefix-list-ref; 3684 description 3685 "Assign labels according to certain prefixes for 3686 egress LSR."; 3687 } 3688 } // ordered-mode 3689 } // assign 3690 } // label-policy 3691 } // policy-container 3693 /* 3694 * Configuration and state data nodes 3695 */ 3696 // Forwarding nexthop augmentation to the global tree 3697 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3698 + "ldp:global" { 3699 description "Graceful forwarding nexthop augmentation."; 3700 uses global-forwarding-nexthop-augment; 3701 } 3703 // global/address-families/ipv6 3704 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3705 + "ldp:global/ldp:address-families" { 3706 description "Global IPv6 augmentation."; 3708 container ipv6 { 3709 presence 3710 "Present if IPv6 is enabled, unless the 'enable' 3711 leaf is set to 'false'"; 3712 description 3713 "Containing data related to the IPv6 address family."; 3715 leaf enable { 3716 type boolean; 3717 default true; 3718 description 3719 "'true' to enable the address family."; 3720 } 3722 uses policy-container; 3724 leaf transport-address { 3725 type inet:ipv6-address; 3726 mandatory true; 3727 description 3728 "The transport address advertised in LDP Hello messages."; 3729 } 3731 leaf label-distribution-controlmode { 3732 type enumeration { 3733 enum independent { 3734 description 3735 "Independent label distribution control."; 3736 } 3737 enum ordered { 3738 description 3739 "Ordered label distribution control."; 3740 } 3741 } 3742 config false; 3743 description 3744 "Label distribution control mode."; 3745 reference 3746 "RFC5036: LDP Specification. Sec 2.6."; 3747 } 3749 // ipv6 bindings 3750 container bindings { 3751 config false; 3752 description 3753 "LDP address and label binding information."; 3754 list address { 3755 key "address"; 3756 description 3757 "List of address bindings learned by LDP."; 3758 leaf address { 3759 type inet:ipv6-address; 3760 description 3761 "The IPv6 address learned from an Address 3762 message received from or advertised to a peer."; 3763 } 3764 uses ldp:binding-address-state-attributes; 3765 } // binding-address 3767 list fec-label { 3768 key "fec"; 3769 description 3770 "List of FEC-label bindings learned by LDP."; 3771 leaf fec { 3772 type inet:ipv6-prefix; 3773 description 3774 "The prefix FEC value in the FEC-label binding, 3775 learned in a Label Mapping message received from 3776 or advertised to a peer."; 3777 } 3778 uses ldp:binding-label-state-attributes; 3779 } // fec-label 3780 } // bindings 3781 } // ipv6 3782 } 3784 // discovery/interfaces/interface/address-families/ipv6 3785 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3786 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3787 + "ldp:address-families" { 3788 description "Interface IPv6 augmentation."; 3790 container ipv6 { 3791 presence 3792 "Present if IPv6 is enabled, unless the 'enable' 3793 leaf is set to 'false'"; 3794 description 3795 "IPv6 address family."; 3797 leaf enable { 3798 type boolean; 3799 default true; 3800 description 3801 "Enable the address family on the interface."; 3802 } 3804 // ipv6 3805 container hello-adjacencies { 3806 config false; 3807 description 3808 "Containing a list of hello adjacencies."; 3810 list hello-adjacency { 3811 key "adjacent-address"; 3812 config false; 3813 description "List of hello adjacencies."; 3815 leaf adjacent-address { 3816 type inet:ipv6-address; 3817 description 3818 "Neighbor address of the hello adjacency."; 3819 } 3821 uses ldp:adjacency-state-attributes; 3822 uses ldp:ldp-peer-ref-container; 3823 } // hello-adjacency 3824 } // hello-adjacencies 3825 } // ipv6 3826 } 3828 // discovery/targeted/address-families/ipv6 3829 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3830 + "ldp:discovery/ldp:targeted/ldp:address-families" { 3831 description "Targeted discovery IPv6 augmentation."; 3833 container ipv6 { 3834 presence 3835 "Present if IPv6 is enabled."; 3836 description 3837 "IPv6 address family."; 3839 container hello-adjacencies { 3840 config false; 3841 description 3842 "Containing a list of hello adjacencies."; 3844 list hello-adjacency { 3845 key "local-address adjacent-address"; 3846 config false; 3847 description "List of hello adjacencies."; 3849 leaf local-address { 3850 type inet:ipv6-address; 3851 description 3852 "Local address of the hello adjacency."; 3853 } 3854 leaf adjacent-address { 3855 type inet:ipv6-address; 3856 description 3857 "Neighbor address of the hello adjacency."; 3858 } 3860 uses ldp:adjacency-state-attributes; 3861 uses ldp:ldp-peer-ref-container; 3862 } // hello-adjacency 3863 } // hello-adjacencies 3865 list target { 3866 key "adjacent-address"; 3867 description 3868 "Targeted discovery params."; 3870 leaf adjacent-address { 3871 type inet:ipv6-address; 3872 description 3873 "Configures a remote LDP neighbor and enables 3874 extended LDP discovery of the specified 3875 neighbor."; 3876 } 3877 leaf enable { 3878 type boolean; 3879 default true; 3880 description 3881 "Enable the target."; 3882 } 3883 leaf local-address { 3884 type inet:ipv6-address; 3885 description 3886 "The local address used as the source address to send 3887 targeted Hello messages. 3888 If the value is not specified, the transport-address 3889 is used as the source address."; 3890 } 3891 } // target 3892 } // ipv6 3893 } 3895 // /peers/peer/state/address-families/ipv6 3896 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3897 + "ldp:peers/ldp:peer/ldp:address-families" { 3898 description "Peer state IPv6 augmentation."; 3900 container ipv6 { 3901 presence 3902 "Present if IPv6 is enabled."; 3903 description 3904 "IPv6 address family."; 3906 container hello-adjacencies { 3907 config false; 3908 description 3909 "Containing a list of hello adjacencies."; 3911 list hello-adjacency { 3912 key "local-address adjacent-address"; 3913 description "List of hello adjacencies."; 3915 leaf local-address { 3916 type inet:ipv6-address; 3917 description 3918 "Local address of the hello adjacency."; 3919 } 3920 leaf adjacent-address { 3921 type inet:ipv6-address; 3922 description 3923 "Neighbor address of the hello adjacency."; 3924 } 3926 uses ldp:adjacency-state-attributes; 3928 leaf interface { 3929 type if:interface-ref; 3930 description "Interface for this adjacency."; 3931 } 3932 } // hello-adjacency 3933 } // hello-adjacencies 3934 } // ipv6 3936 } 3938 /* 3939 * Configuration data and operational state data nodes 3940 */ 3941 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3942 + "ldp:global" { 3943 description "Graceful restart augmentation."; 3944 uses global-augment; 3945 } 3947 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3948 + "ldp:global/ldp:capability" { 3949 description "Capability augmentation."; 3950 uses capability-augment; 3951 } 3953 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3954 + "ldp:global/ldp:graceful-restart" { 3955 description "Graceful restart augmentation."; 3956 uses graceful-restart-augment; 3957 } 3959 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3960 + "ldp:global/ldp:address-families/ldp:ipv4" { 3961 description "Address family IPv4 augmentation."; 3962 uses address-family-ipv4-augment; 3963 } 3965 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3966 + "ldp:discovery/ldp:interfaces/ldp:interface" { 3967 description "Interface augmentation."; 3968 uses interface-augment; 3969 } 3971 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3972 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3973 + "ldp:address-families/ldp:ipv4" { 3974 description "Interface address family IPv4 augmentation."; 3975 uses interface-address-family-ipv4-augment; 3976 } 3978 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3979 + "ldp:discovery/ldp:interfaces/ldp:interface/" 3980 + "ldp:address-families/ldp-ext:ipv6" { 3981 description "Interface address family IPv6 augmentation."; 3982 uses interface-address-family-ipv6-augment; 3983 } 3984 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3985 + "ldp:discovery/ldp:targeted/ldp:hello-accept" { 3986 description "Targeted discovery augmentation."; 3987 leaf neighbor-list { 3988 if-feature policy-targeted-discovery-config; 3989 type neighbor-list-ref; 3990 description 3991 "The name of a neighbor ACL, to accept Hello messages from 3992 LDP peers as permitted by the neighbor-list policy. 3993 If this value is not specified, targeted Hello messages from 3994 any source are accepted."; 3995 } 3996 } 3998 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 3999 + "ldp:peers" { 4000 description "Peers augmentation."; 4001 uses peers-augment; 4002 } 4004 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 4005 + "ldp:peers/ldp:authentication/ldp:auth-type-selection" { 4006 if-feature key-chain; 4007 description "Peers authentication augmentation."; 4008 case auth-key-chain { 4009 uses authentication-keychain-augment; 4010 } 4011 } 4013 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 4014 + "ldp:peers/ldp:peer" { 4015 description "Peer list entry augmentation."; 4016 uses peer-augment; 4017 } 4019 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 4020 + "ldp:peers/ldp:peer/ldp:authentication/" 4021 + "ldp:auth-type-selection" { 4022 if-feature key-chain; 4023 description "Peer list entry authentication augmentation."; 4024 case auth-key-chain { 4025 uses authentication-keychain-augment; 4026 } 4027 } 4029 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 4030 + "ldp:peers/ldp:peer/ldp:address-families/ldp:ipv4" { 4031 description 4032 "Peer list entry IPv4 augmentation."; 4033 uses peer-af-policy-container; 4034 } 4036 augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" 4037 + "ldp:peers/ldp:peer/ldp:address-families/ldp-ext:ipv6" { 4038 description 4039 "Peer list entry IPv6 augmentation."; 4040 uses peer-af-policy-container; 4041 } 4042 } 4044 4046 Figure 18 4048 10. Security Considerations 4050 The YANG module specified in this document defines a schema for data 4051 that is designed to be accessed via network management protocols such 4052 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 4053 is the secure transport layer, and the mandatory-to-implement secure 4054 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 4055 is HTTPS, and the mandatory-to-implement secure transport is TLS 4056 [RFC8446]. 4058 The Network Configuration Access Control Model (NACM) [RFC8341] 4059 provides the means to restrict access for particular NETCONF or 4060 RESTCONF users to a preconfigured subset of all available NETCONF or 4061 RESTCONF protocol operations and content. 4063 There are a number of data nodes defined in this YANG module that are 4064 writable/creatable/ deletable (i.e., config true, which is the 4065 default). These data nodes may be considered sensitive or vulnerable 4066 in some network environments. Write operations (e.g., edit-config) 4067 to these data nodes without proper protection can have a negative 4068 effect on network operations. 4070 Some of the readable data nodes in this YANG module may be considered 4071 sensitive or vulnerable in some network environments. It is thus 4072 important to control read access (e.g., via get, get-config, or 4073 notification) to these data nodes. 4075 Some of the RPC operations in this YANG module may be considered 4076 sensitive or vulnerable in some network environments. It is thus 4077 important to control access to these operations. 4079 It goes without saying that this specification also inherits the 4080 security considerations captured in the actual protocol specification 4081 documents, namely base LDP [RFC5036], LDP IPv6 [RFC7552], LDP 4082 Capabilities [RFC5561], Typed Wildcard FEC [RFC5918], LDP End-of-LIB 4083 [RFC5919], and LDP Upstream Label Assignment [RFC6389]. 4085 11. IANA Considerations 4087 This document requests the registration of the following URIs in the 4088 IETF "XML registry" [RFC3688]: 4090 +------------------------------------------------+------------+-----+ 4091 | URI | Registrant | XML | 4092 +------------------------------------------------+------------+-----+ 4093 | urn:ietf:params:xml:ns:yang:ietf-mpls-ldp | The IESG | N/A | 4094 | | | | 4095 | urn:ietf:params:xml:ns:yang:ietf-mpls-ldp- | The IESG | N/A | 4096 | extended | | | 4097 +------------------------------------------------+------------+-----+ 4099 This document requests the registration of the following YANG modules 4100 in the "YANG Module Names" registry [RFC6020]: 4102 +---------------+----------------------------------+-------+--------+ 4103 | Name | Namespace | Prefi | Refere | 4104 | | | x | nce | 4105 +---------------+----------------------------------+-------+--------+ 4106 | ietf-mpls-ldp | urn:ietf:params:xml:ns:yang | ldp | This d | 4107 | | :ietf-mpls-ldp | | ocumen | 4108 | | | | t | 4109 | | | | | 4110 | ietf-mpls- | urn:ietf:params:xml:ns:yang | ldp- | This d | 4111 | ldp-extended | :ietf-mpls-ldp-extended | ext | ocumen | 4112 | | | | t | 4113 +---------------+----------------------------------+-------+--------+ 4115 -- RFC Editor: Replace "This document" with the document RFC number 4116 at time of publication, and remove this note. 4118 12. Acknowledgments 4120 The authors would like to acknowledge Eddie Chami, Nagendra Kumar, 4121 Mannan Venkatesan, and Pavan Beeram for their contribution to this 4122 document. We also acknowledge Ladislav Lhotka for his useful 4123 comments as the YANG Doctor. 4125 The review comments from Tom Petch, as part of WGLC of this document, 4126 were very useful. Some of those comments were also applied to some 4127 other YANG modules in the Routing area. 4129 13. References 4131 13.1. Normative References 4133 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 4134 Requirement Levels", BCP 14, RFC 2119, 4135 DOI 10.17487/RFC2119, March 1997, 4136 . 4138 [RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful 4139 Restart Mechanism for Label Distribution Protocol", 4140 RFC 3478, DOI 10.17487/RFC3478, February 2003, 4141 . 4143 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 4144 DOI 10.17487/RFC3688, January 2004, 4145 . 4147 [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., 4148 "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, 4149 October 2007, . 4151 [RFC5331] Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream 4152 Label Assignment and Context-Specific Label Space", 4153 RFC 5331, DOI 10.17487/RFC5331, August 2008, 4154 . 4156 [RFC5561] Thomas, B., Raza, K., Aggarwal, S., Aggarwal, R., and JL. 4157 Le Roux, "LDP Capabilities", RFC 5561, 4158 DOI 10.17487/RFC5561, July 2009, 4159 . 4161 [RFC5918] Asati, R., Minei, I., and B. Thomas, "Label Distribution 4162 Protocol (LDP) 'Typed Wildcard' Forward Equivalence Class 4163 (FEC)", RFC 5918, DOI 10.17487/RFC5918, August 2010, 4164 . 4166 [RFC5919] Asati, R., Mohapatra, P., Chen, E., and B. Thomas, 4167 "Signaling LDP Label Advertisement Completion", RFC 5919, 4168 DOI 10.17487/RFC5919, August 2010, 4169 . 4171 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 4172 the Network Configuration Protocol (NETCONF)", RFC 6020, 4173 DOI 10.17487/RFC6020, October 2010, 4174 . 4176 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 4177 and A. Bierman, Ed., "Network Configuration Protocol 4178 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 4179 . 4181 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 4182 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 4183 . 4185 [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label 4186 Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, 4187 November 2011, . 4189 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 4190 RFC 6991, DOI 10.17487/RFC6991, July 2013, 4191 . 4193 [RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. 4194 Papneja, "Updates to LDP for IPv6", RFC 7552, 4195 DOI 10.17487/RFC7552, June 2015, 4196 . 4198 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 4199 RFC 7950, DOI 10.17487/RFC7950, August 2016, 4200 . 4202 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 4203 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 4204 . 4206 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 4207 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 4208 May 2017, . 4210 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 4211 Zhang, "YANG Data Model for Key Chains", RFC 8177, 4212 DOI 10.17487/RFC8177, June 2017, 4213 . 4215 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 4216 "Common YANG Data Types for the Routing Area", RFC 8294, 4217 DOI 10.17487/RFC8294, December 2017, 4218 . 4220 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 4221 Access Control Model", STD 91, RFC 8341, 4222 DOI 10.17487/RFC8341, March 2018, 4223 . 4225 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 4226 and R. Wilton, "Network Management Datastore Architecture 4227 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 4228 . 4230 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 4231 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 4232 . 4234 [RFC8344] Bjorklund, M., "A YANG Data Model for IP Management", 4235 RFC 8344, DOI 10.17487/RFC8344, March 2018, 4236 . 4238 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 4239 Routing Management (NMDA Version)", RFC 8349, 4240 DOI 10.17487/RFC8349, March 2018, 4241 . 4243 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 4244 Documents Containing YANG Data Models", BCP 216, RFC 8407, 4245 DOI 10.17487/RFC8407, October 2018, 4246 . 4248 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 4249 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 4250 . 4252 [RFC8529] Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. 4253 Liu, "YANG Data Model for Network Instances", RFC 8529, 4254 DOI 10.17487/RFC8529, March 2019, 4255 . 4257 13.2. Informative References 4259 [I-D.ietf-mpls-mldp-yang] 4260 Raza, K., Liu, X., Esale, S., Andersson, L., Tantsura, J., 4261 and S. Krishnaswamy, "YANG Data Model for MPLS mLDP", 4262 draft-ietf-mpls-mldp-yang-05 (work in progress), October 4263 2018. 4265 [I-D.ietf-rtgwg-policy-model] 4266 Qu, Y., Tantsura, J., Lindem, A., and X. Liu, "A YANG Data 4267 Model for Routing Policy Management", draft-ietf-rtgwg- 4268 policy-model-06 (work in progress), March 2019. 4270 [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private 4271 Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February 4272 2006, . 4274 [RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. 4275 King, "LDP Extensions for Multi-Topology", RFC 7307, 4276 DOI 10.17487/RFC7307, July 2014, 4277 . 4279 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 4280 RFC 7951, DOI 10.17487/RFC7951, August 2016, 4281 . 4283 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 4284 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 4285 . 4287 Appendix A. Data Tree Example 4289 This section contains an example of an instance data tree in the JSON 4290 encoding [RFC7951], containing both configuration and state data. 4292 +---------------------+ 4293 | | 4294 | Router 203.0.113.1 | 4295 | | 4296 +----------+----------+ 4297 |eth1 4298 |2001:db8:0:1::1/64 4299 | 4300 | 4301 |2001:db8:0:1::2/64 4302 +----------+----------+ 4303 | | | 4304 | Another Router +---------| 2001:db8:0:2::/64 4305 | | | 4306 +---------------------+ 4308 The configuration instance data tree for Router 203.0.113.1 in the 4309 above figure could be as follows: 4311 { 4312 "ietf-interfaces:interfaces": { 4313 "interface": [ 4314 { 4315 "name": "eth1", 4316 "description": "An interface with LDP enabled.", 4317 "type": "iana-if-type:ethernetCsmacd", 4318 "ietf-ip:ipv6": { 4319 "address": [ 4320 { 4321 "ip": "2001:db8:0:1::1", 4322 "prefix-length": 64 4323 } 4324 ], 4325 "forwarding": true 4326 } 4327 } 4328 ] 4329 }, 4330 "ietf-routing:routing": { 4331 "router-id": "203.0.113.1", 4332 "control-plane-protocols": { 4333 "ietf-mpls-ldp:mpls-ldp": { 4334 "global": { 4335 "address-families": { 4336 "ietf-mpls-ldp-extended:ipv6": { 4337 "enable": true 4338 } 4339 } 4340 }, 4341 "discovery": { 4342 "interfaces": { 4343 "interface": [ 4344 { 4345 "name": "eth1", 4346 "address-families": { 4347 "ietf-mpls-ldp-extended:ipv6": { 4348 "enable": true 4349 } 4350 } 4351 } 4352 ] 4353 } 4354 } 4355 } 4356 } 4357 } 4358 } 4359 The cooresponding operational state data for Router 203.0.113.1 could 4360 be as follows: 4362 { 4363 "ietf-interfaces:interfaces": { 4364 "interface": [ 4365 { 4366 "name": "eth1", 4367 "description": "An interface with RIPng enabled.", 4368 "type": "iana-if-type:ethernetCsmacd", 4369 "phys-address": "00:00:5e:00:53:01", 4370 "oper-status": "up", 4371 "statistics": { 4372 "discontinuity-time": "2018-09-10T15:16:27-05:00" 4373 }, 4374 "ietf-ip:ipv6": { 4375 "forwarding": true, 4376 "mtu": 1500, 4377 "address": [ 4378 { 4379 "ip": "2001:db8:0:1::1", 4380 "prefix-length": 64, 4381 "origin": "static", 4382 "status": "preferred" 4383 }, 4384 { 4385 "ip": "fe80::200:5eff:fe00:5301", 4386 "prefix-length": 64, 4387 "origin": "link-layer", 4388 "status": "preferred" 4389 } 4390 ], 4391 "neighbor": [ 4392 { 4393 "ip": "2001:db8:0:1::2", 4394 "link-layer-address": "00:00:5e:00:53:02", 4395 "origin": "dynamic", 4396 "is-router": [null], 4397 "state": "reachable" 4398 }, 4399 { 4400 "ip": "fe80::200:5eff:fe00:5302", 4401 "link-layer-address": "00:00:5e:00:53:02", 4402 "origin": "dynamic", 4403 "is-router": [null], 4404 "state": "reachable" 4405 } 4406 ] 4408 } 4409 } 4410 ] 4411 }, 4412 "ietf-routing:routing": { 4413 "router-id": "203.0.113.1", 4414 "interfaces": { 4415 "interface": [ 4416 "eth1" 4417 ] 4418 }, 4419 "control-plane-protocols": { 4420 "ietf-mpls-ldp:mpls-ldp": { 4421 "global": { 4422 "address-families": { 4423 "ietf-mpls-ldp-extended:ipv6": { 4424 "enable": true 4425 } 4426 } 4427 }, 4428 "discovery": { 4429 "interfaces": { 4430 "interface": [ 4431 { 4432 "name": "eth1", 4433 "address-families": { 4434 "ietf-mpls-ldp-extended:ipv6": { 4435 "enable": true, 4436 "hello-adjacencies": { 4437 "hello-adjacency": [ 4438 { 4439 "adjacent-address": 4440 "fe80::200:5eff:fe00:5302", 4441 "flag": ["adjacency-flag-active"], 4442 "hello-holdtime": { 4443 "adjacent": 15, 4444 "negotiated": 15, 4445 "remaining": 9 4446 }, 4447 "next-hello": 3, 4448 "statistics": { 4449 "discontinuity-time": 4450 "2018-09-10T15:16:27-05:00" 4451 }, 4452 "peer": { 4453 "lsr-id": "203.0.113.2", 4454 "label-space-id": 0 4455 } 4457 } 4458 ] 4459 } 4460 } 4461 } 4462 } 4463 ] 4464 } 4465 }, 4466 "peers": { 4467 "peer": [ 4468 { 4469 "lsr-id": "203.0.113.2", 4470 "label-space-id": 0, 4471 "label-advertisement-mode": { 4472 "local": "downstream-unsolicited", 4473 "peer": "downstream-unsolicited", 4474 "negotiated": "downstream-unsolicited" 4475 }, 4476 "next-keep-alive": 5, 4477 "session-holdtime": { 4478 "peer": 180, 4479 "negotiated": 180, 4480 "remaining": 78 4481 }, 4482 "session-state": "operational", 4483 "tcp-connection": { 4484 "local-address": "fe80::200:5eff:fe00:5301", 4485 "local-port": 646, 4486 "remote-address": "fe80::200:5eff:fe00:5302", 4487 "remote-port": 646 4488 }, 4489 "up-time": "P2H33M5S", 4490 "statistics": { 4491 "discontinuity-time": "2018-09-10T15:16:27-05:00" 4492 } 4493 } 4494 ] 4495 } 4496 } 4497 } 4498 } 4499 } 4501 Appendix B. Additional Contributors 4503 Reshad Rahman 4504 Cisco Systems 4505 Email: rrahman@cisco.com 4507 Stephane Litkowski 4508 Orange. 4509 Email: stephane.litkowski@orange.com 4511 Authors' Addresses 4513 Kamran Raza 4514 Cisco Systems 4515 Email: skraza@cisco.com 4517 Rajiv Asati 4518 Cisco Systems 4519 Email: rajiva@cisco.com 4521 Xufeng Liu 4522 Volta Networks 4523 Email: xufeng.liu.ietf@gmail.com 4525 Santosh Esale 4526 Juniper Networks 4527 Email: sesale@juniper.net 4529 Xia Chen 4530 Huawei Technologies 4531 Email: jescia.chenxia@huawei.com 4533 Himanshu Shah 4534 Ciena Corporation 4535 Email: hshah@ciena.com 4537 Danial Johari 4538 Cisco Systems 4539 Email: dajohari@cisco.com 4540 Loa Andersson 4541 Huawei Technologies 4542 Email: loa@pi.nu 4544 Jeff Tantsura 4545 Nuage Networks 4546 Email: jefftant.ietf@gmail.com 4548 Matthew Bocci 4549 Nokia 4550 Email: matthew.bocci@nokia.com