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