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