rfc9070.original | rfc9070.txt | |||
---|---|---|---|---|
MPLS Working Group K. Raza, Ed. | ||||
Internet-Draft R. Asati | ||||
Intended status: Standards Track Cisco Systems | ||||
Expires: September 21, 2020 | ||||
X. Liu | ||||
Volta Networks | ||||
S. Esale | Internet Engineering Task Force (IETF) K. Raza, Ed. | |||
Request for Comments: 9070 R. Asati | ||||
Category: Standards Track Cisco Systems | ||||
ISSN: 2070-1721 X. Liu | ||||
IBM Corporation | ||||
S. Easale | ||||
Juniper Networks | Juniper Networks | |||
X. Chen | X. Chen | |||
Huawei Technologies | Huawei Technologies | |||
H. Shah | H. Shah | |||
Ciena Corporation | Ciena Corporation | |||
March 2022 | ||||
March 20, 2020 | ||||
YANG Data Model for MPLS LDP | YANG Data Model for MPLS LDP | |||
draft-ietf-mpls-ldp-yang-09 | ||||
Abstract | Abstract | |||
This document describes a YANG data model for Multi-Protocol Label | This document describes a YANG data model for the Multiprotocol Label | |||
Switching (MPLS) Label Distribution Protocol (LDP). The model also | Switching (MPLS) Label Distribution Protocol (LDP). The model also | |||
serves as the base model to define Multipoint LDP (mLDP) model. | serves as the base model to define the Multipoint LDP (mLDP) model. | |||
The YANG modules in this document conform to the Network Management | The YANG modules in this document conform to the Network Management | |||
Datastore Architecture (NMDA). | Datastore Architecture (NMDA). | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on September 21, 2020. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9070. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Base and Extended . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Base and Extended | |||
2. Specification of Requirements . . . . . . . . . . . . . . . . 4 | 2. Specification of Requirements | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Overview | |||
4. The Complete Tree . . . . . . . . . . . . . . . . . . . . . . 7 | 4. The Complete Tree | |||
5. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 16 | 5. Configuration | |||
5.1. Configuration Hierarchy . . . . . . . . . . . . . . . . . 19 | 5.1. Configuration Hierarchy | |||
5.1.1. Global parameters . . . . . . . . . . . . . . . . . . 20 | 5.1.1. Global Parameters | |||
5.1.2. Capabilities parameters . . . . . . . . . . . . . . . 20 | 5.1.2. Capabilities Parameters | |||
5.1.3. Per-Address-Family parameters . . . . . . . . . . . . 20 | 5.1.3. Per-Address-Family Parameters | |||
5.1.4. Hello Discovery parameters . . . . . . . . . . . . . 20 | 5.1.4. Hello Discovery Parameters | |||
5.1.5. Peer parameters . . . . . . . . . . . . . . . . . . . 21 | 5.1.5. Peer Parameters | |||
5.1.6. Forwarding parameters . . . . . . . . . . . . . . . . 21 | 5.1.6. Forwarding Parameters | |||
6. Operational State . . . . . . . . . . . . . . . . . . . . . . 22 | 6. Operational State | |||
6.1. Adjacency state . . . . . . . . . . . . . . . . . . . . . 22 | 6.1. Adjacency State | |||
6.2. Peer state . . . . . . . . . . . . . . . . . . . . . . . 23 | 6.2. Peer State | |||
6.3. Bindings state . . . . . . . . . . . . . . . . . . . . . 24 | 6.3. Bindings State | |||
6.4. Capabilities state . . . . . . . . . . . . . . . . . . . 26 | 6.4. Capabilities State | |||
7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 27 | 7. Notifications | |||
8. Action . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 8. Action | |||
9. YANG Specification . . . . . . . . . . . . . . . . . . . . . 27 | 9. YANG Specification | |||
9.1. Base . . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 9.1. Base | |||
9.2. Extended . . . . . . . . . . . . . . . . . . . . . . . . 59 | 9.2. Extended | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 80 | 10. Security Considerations | |||
10.1. YANG model . . . . . . . . . . . . . . . . . . . . . . . 80 | 10.1. YANG Data Model | |||
10.1.1. Writable nodes . . . . . . . . . . . . . . . . . . . 81 | 10.1.1. Writable Nodes | |||
10.1.2. Readable nodes . . . . . . . . . . . . . . . . . . . 81 | 10.1.2. Readable Nodes | |||
10.1.3. RPC operations . . . . . . . . . . . . . . . . . . . 82 | 10.1.3. RPC Operations | |||
10.1.4. Notifications . . . . . . . . . . . . . . . . . . . 83 | 10.1.4. Notifications | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 83 | 11. IANA Considerations | |||
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 83 | 12. Normative References | |||
13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 84 | 13. Informative References | |||
14. Normative References . . . . . . . . . . . . . . . . . . . . 84 | Appendix A. Data Tree Example | |||
15. Informative References . . . . . . . . . . . . . . . . . . . 87 | Acknowledgments | |||
Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 88 | Contributors | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 92 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
The Network Configuration Protocol (NETCONF) [RFC6241] is one of the | The Network Configuration Protocol (NETCONF) [RFC6241] is one of the | |||
network management protocols that defines mechanisms to manage | network management protocols that defines mechanisms to manage | |||
network devices. YANG [RFC6020] [RFC7950] is a modular language that | network devices. YANG [RFC6020] [RFC7950] is a modular language that | |||
represents data structures in an XML tree format, and is used as a | represents data structures in an XML tree format and is used as a | |||
data modelling language for the NETCONF. | data modeling language for NETCONF. | |||
This document introduces a YANG data model for MPLS Label | This document introduces a YANG data model for the MPLS Label | |||
Distribution Protocol (LDP) [RFC5036]. This model also covers LDP | Distribution Protocol (LDP) [RFC5036]. This model also covers LDP | |||
IPv6 [RFC7552] and LDP capabilities [RFC5561] specifications. | IPv6 [RFC7552] and LDP capability [RFC5561] specifications. | |||
The data model is defined for the following constructs that are used | The data model is defined for the following constructs that are used | |||
for managing the protocol: | for managing the protocol: | |||
* Configuration | * Configuration | |||
* Operational State | * Operational State | |||
* Executables (Actions) | * Executables (Actions) | |||
skipping to change at page 3, line 42 ¶ | skipping to change at line 131 ¶ | |||
The configuration and state items are divided into the following two | The configuration and state items are divided into the following two | |||
broad categories: | broad categories: | |||
* Base | * Base | |||
* Extended | * Extended | |||
The "base" category contains the basic and fundamental features that | The "base" category contains the basic and fundamental features that | |||
are covered in LDP base specification [RFC5036] and constitute the | are covered in LDP base specification [RFC5036] and constitute the | |||
minimum requirements for a typical base LDP deployment. Whereas, the | minimum requirements for a typical base LDP deployment, whereas the | |||
"extended" category contains other non-base features. All the items | "extended" category contains other non-base features. All the items | |||
in a base category are mandatory and hence no "if-feature" is allowed | in a base category are mandatory and, hence, no "if-feature" is | |||
under the "base" category. The base and extended categories are | allowed under the "base" category. The base and extended categories | |||
defined in their own modules as described later. | are defined in their own modules as described later. | |||
The example of base feature includes the configuration of LDP lsr-id, | The examples of a base feature include the configuration of LDP lsr- | |||
enabling LDP interfaces, setting password for LDP session etc., | id, enabling LDP interfaces, setting passwords for LDP sessions, | |||
whereas the examples of extended feature include inbound/outbound | etc., whereas the examples of an extended feature include inbound/ | |||
label policies, igp sync [RFC5443], downstream-on-demand etc. It is | outbound label policies, IGP Sync [RFC5443], downstream on demand, | |||
worth highlighting that LDP IPv6 [RFC7552] is also categorized as an | etc. It is worth highlighting that LDP IPv6 [RFC7552] is also | |||
extended feature. | categorized as an extended feature. | |||
While "base" model support will suffice for small deployments, it is | While "base" model support will suffice for small deployments, it is | |||
expected that large deployments will require both the "base" and | expected that large deployments will require both "base" and | |||
"extended" models support from the vendors. | "extended" model support from the vendors. | |||
2. Specification of Requirements | 2. Specification of Requirements | |||
In this document, the word "IP" is used to refer to both IPv4 and | In this document, the word "IP" is used to refer to both IPv4 and | |||
IPv6, unless otherwise explicitly stated. For example, "IP address | IPv6 unless otherwise explicitly stated. For example, "IP address | |||
family" should be read as "IPv4 and/or IPv6 address family". | family" should be read as "IPv4 and/or IPv6 address family". | |||
3. Overview | 3. Overview | |||
This document defines two new modules for LDP YANG support: | This document defines two new modules for LDP YANG support: | |||
* "ietf-mpls-ldp" module that specifies the base LDP features and | "ietf-mpls-ldp" | |||
augments /rt:routing/rt:control-plane-protocols/rt:control-plane- | A module that specifies the base LDP features and augments | |||
protocol defined in [RFC8349]. We define new identity 'mpls-ldp' | /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol | |||
for LDP and the model allows only a single instance of 'mpls-ldp'. | defined in [RFC8349]. We define the new identity 'mpls-ldp' for | |||
LDP; the model allows only a single instance of 'mpls-ldp'. | ||||
* "ietf-mpls-ldp-extended" module that specifies the extended LDP | "ietf-mpls-ldp-extended" | |||
features and augments the base LDP module. | A module that specifies the extended LDP features and augments the | |||
base LDP module. | ||||
It is to be noted that mLDP YANG model [I-D.ietf-mpls-mldp-yang] | It is to be noted that the mLDP YANG data model [MPLS-MLDP-YANG] | |||
augments LDP base and extended modules to specify the mLDP specific | augments LDP base and extended modules to specify the mLDP-specific | |||
base and extended features. | base and extended features. | |||
There are four types of containers in our module(s): | There are four types of containers in our module(s): | |||
* Read-Write parameters for configuration (Section 5) | * Read-write parameters for configuration (Section 5) | |||
* Read-only parameters for operational state (Section 6) | * Read-only parameters for operational state (Section 6) | |||
* Notifications for events (Section 7) | * Notifications for events (Section 7) | |||
* RPCs for executing commands to perform some action (Section 8) | * RPCs for executing commands to perform some action (Section 8) | |||
The modules in this document conforms to the Network Management | The modules in this document conform to the Network Management | |||
Datastore Architecture (NMDA) defined in [RFC8342]. The operational | Datastore Architecture (NMDA) defined in [RFC8342]. The operational | |||
state data is combined with the associated configuration data in the | state data is combined with the associated configuration data in the | |||
same hierarchy [RFC8407]. When protocol states are retrieved from | same hierarchy [RFC8407]. When protocol states are retrieved from | |||
the NMDA operational state datastore, the returned states cover all | the NMDA operational state datastore, the returned states cover all | |||
"config true" (rw) and "config false" (ro) nodes defined in the | "config true" (rw) and "config false" (ro) nodes defined in the | |||
schema. | schema. | |||
Following diagram depicts high level LDP YANG tree organization and | The following diagram depicts high-level LDP YANG tree organization | |||
hierarchy: | and hierarchy: | |||
+-- rw routing | +-- rw routing | |||
+-- rw control-plane-protocols | +-- rw control-plane-protocols | |||
+-- rw control-plane-protocol | +-- rw control-plane-protocol | |||
+-- rw mpls-ldp | +-- rw mpls-ldp | |||
+-- rw ... | +-- rw ... | |||
+-- rw ... // base | +-- rw ... // base | |||
| +-- rw ... | | +-- rw ... | |||
| +-- ro ... | | +-- ro ... | |||
| +-- | | +-- | |||
skipping to change at page 5, line 37 ¶ | skipping to change at line 222 ¶ | |||
+-- ro ... | +-- ro ... | |||
rpcs: | rpcs: | |||
+-- x mpls-ldp-some_action | +-- x mpls-ldp-some_action | |||
+-- x . . . . . | +-- x . . . . . | |||
notifications: | notifications: | |||
+--- n mpls-ldp-some_event | +--- n mpls-ldp-some_event | |||
+--- n ... | +--- n ... | |||
Figure 1: LDP YANG tree organization | Figure 1: LDP YANG Tree Organization | |||
Before going into data model details, it is important to take note of | Before going into data model details, it is important to take note of | |||
the following points: | the following points: | |||
* This model aims to address only the core LDP parameters as per RFC | * This model aims to address only the core LDP parameters as per RFC | |||
specification, as well as well-known and widely deployed | specification, as well as well-known and widely deployed | |||
manageability controls (such as label filtering policies to apply | manageability controls (such as label filtering policies to apply | |||
filtering rules on the assignment, advertisement, and acceptance | filtering rules on the assignment, advertisement, and acceptance | |||
for label bindings). Any vendor specific feature should be | for label bindings). Any vendor-specific feature should be | |||
defined in a vendor-specific augmentation of this model. | defined in a vendor-specific augmentation of this model. | |||
* Multi-topology LDP [RFC7307] is beyond the scope of this document. | * Multi-topology LDP [RFC7307] is beyond the scope of this document. | |||
* This model does not cover any applications running on top of LDP, | * This model does not cover any applications running on top of LDP, | |||
nor does it cover any OAM procedures for LDP. | nor does it cover any Operations, Administration, and Maintenance | |||
(OAM) procedures for LDP. | ||||
* This model is a VPN Routing and Forwarding (VRF)-centric model. | * This model is a VRF-centric model. It is important to note that | |||
It is important to note that [RFC4364] defines VRF tables and | [RFC4364] defines VPN Routing and Forwarding (VRF) tables and | |||
default forwarding tables as different, however from a YANG | default forwarding tables as different; however, from a YANG | |||
modelling perspective this introduces unnecessary complications, | modeling perspective, this introduces unnecessary complications; | |||
hence we are treating the default forwarding table as just another | hence, we are treating the default forwarding table as just | |||
VRF. | another VRF. | |||
* A "network-instance", as defined in [RFC8529], refers to a VRF | * A "network-instance", as defined in [RFC8529], refers to a VRF | |||
instance (both default and non-default) within the scope of this | instance (both default and non-default) within the scope of this | |||
model. | model. | |||
* This model supports two address-families, namely "ipv4" and | * This model supports two address families, namely, "ipv4" and | |||
"ipv6". | "ipv6". | |||
* This model assumes platform-wide label space (i.e. label space Id | * This model assumes platform-wide label space (i.e., label space Id | |||
of zero). However, when Upstream Label assignment [RFC6389] is in | of zero). However, when upstream label assignment [RFC6389] is in | |||
use, an upstream assigned label is looked up in a Context-Specific | use, an upstream assigned label is looked up in a Context-Specific | |||
label space as defined in [RFC5331]. | Label Space as defined in [RFC5331]. | |||
* The label and peer policies (including filters) are defined using | * The label and peer policies (including filters) are defined using | |||
prefix-set and neighbor-set respectively as defined in routing- | prefix-set and neighbor-set, respectively, as defined in the | |||
policy model [I-D.ietf-rtgwg-policy-model]. | routing-policy model [RFC9067]. | |||
* This model uses the terms LDP "neighbor"/"adjacency", "session", | * This model uses the terms LDP "neighbor/adjacency", "session", and | |||
and "peer" with the following semantics: | "peer" with the following semantics: | |||
- Neighbor/Adjacency: An LDP enabled LSR that is discovered | Neighbor/Adjacency: An LDP-enabled Label Switching Router (LSR) | |||
through LDP discovery mechanisms. | that is discovered through LDP discovery mechanisms. | |||
- Session: An LDP neighbor with whom a TCP connection has been | Session: An LDP neighbor with whom a TCP connection has been | |||
established. | established. | |||
- Peer: An LDP session which has successfully progressed beyond | Peer: An LDP session that has successfully progressed beyond its | |||
its initialization phase and is either already exchanging the | initialization phase and is either already exchanging the | |||
bindings or is ready to do so. | bindings or is ready to do so. | |||
It is to be noted that LDP Graceful Restart (GR) mechanisms | It is to be noted that LDP Graceful Restart (GR) mechanisms | |||
defined in [RFC3478] allow keeping the exchanged bindings for some | defined in [RFC3478] allow keeping the exchanged bindings for some | |||
time after a session goes down with a peer. We call such a state | time after a session goes down with a peer. We refer to such a | |||
belonging to a "stale" peer -- i.e. keeping peer bindings from a | state as belonging to a "stale" peer, i.e., keeping peer bindings | |||
peer with whom currently there is either no connection established | from a peer with whom currently there is either no connection | |||
or connection is established but GR session is in recovery state. | established or connection is established but the GR session is in | |||
When used in this document, the above terms will refer strictly to | recovery state. When used in this document, the above terms will | |||
the semantics and definitions defined for them. | refer strictly to the semantics and definitions defined for them. | |||
A simplified graphical tree representation of base and extended LDP | A simplified graphical tree representation of base and extended LDP | |||
YANG data model is presented in Figure 2. The meaning of the symbols | YANG data models is presented in Figure 2. The meaning of the | |||
in these tree diagrams is defined in [RFC8340]. | symbols in these tree diagrams is defined in [RFC8340]. | |||
The actual YANG specification for base and extended modules is | The actual YANG specification for base and extended modules is | |||
captured in Section 9. | captured in Section 9. | |||
While presenting the YANG tree view and actual specification, this | While presenting the YANG tree view and actual specification, this | |||
document assumes readers' familiarity with the concepts of YANG | document assumes readers are familiar with the concepts of YANG | |||
modeling, its presentation and its compilation. | modeling, its presentation, and its compilation. | |||
4. The Complete Tree | 4. The Complete Tree | |||
Following is a complete tree representation of configuration, state, | The following is a complete tree representation of configuration, | |||
notification, and RPC items under LDP base and extended modules. | state, notification, and RPC items under LDP base and extended | |||
modules. | ||||
module: ietf-mpls-ldp | module: ietf-mpls-ldp | |||
augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
/rt:control-plane-protocol: | /rt:control-plane-protocol: | |||
+--rw mpls-ldp | +--rw mpls-ldp | |||
+--rw global | +--rw global | |||
| +--rw capability | | +--rw capability | |||
| | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? | | | +--rw ldp-ext:end-of-lib {capability-end-of-lib}? | |||
| | | +--rw ldp-ext:enabled? boolean | | | | +--rw ldp-ext:enabled? boolean | |||
| | +--rw ldp-ext:typed-wildcard-fec | | | +--rw ldp-ext:typed-wildcard-fec | |||
skipping to change at page 8, line 9 ¶ | skipping to change at line 339 ¶ | |||
| | | +--ro bindings | | | | +--ro bindings | |||
| | | | +--ro address* [address] | | | | | +--ro address* [address] | |||
| | | | | +--ro address inet:ipv4-address | | | | | | +--ro address inet:ipv4-address | |||
| | | | | +--ro advertisement-type? advertised-received | | | | | | +--ro advertisement-type? advertised-received | |||
| | | | | +--ro peer | | | | | | +--ro peer | |||
| | | | | +--ro lsr-id? leafref | | | | | | +--ro lsr-id? leafref | |||
| | | | | +--ro label-space-id? leafref | | | | | | +--ro label-space-id? leafref | |||
| | | | +--ro fec-label* [fec] | | | | | +--ro fec-label* [fec] | |||
| | | | +--ro fec inet:ipv4-prefix | | | | | +--ro fec inet:ipv4-prefix | |||
| | | | +--ro peer* | | | | | +--ro peer* | |||
| | | | [lsr-id label-space-id advertisement-type] | | | | | [lsr-id label-space-id advertisement-type] | |||
| | | | +--ro lsr-id leafref | | | | | +--ro lsr-id leafref | |||
| | | | +--ro label-space-id leafref | | | | | +--ro label-space-id leafref | |||
| | | | +--ro advertisement-type | | | | | +--ro advertisement-type | |||
| | | | | advertised-received | | | | | | advertised-received | |||
| | | | +--ro label? | | | | | +--ro label? | |||
| | | | | rt-types:mpls-label | | | | | | rt-types:mpls-label | |||
| | | | +--ro used-in-forwarding? boolean | | | | | +--ro used-in-forwarding? boolean | |||
| | | +--rw ldp-ext:label-policy | | | | +--rw ldp-ext:label-policy | |||
| | | | +--rw ldp-ext:advertise | | | | | +--rw ldp-ext:advertise | |||
| | | | | +--rw ldp-ext:egress-explicit-null | | | | | | +--rw ldp-ext:egress-explicit-null | |||
skipping to change at page 9, line 22 ¶ | skipping to change at line 400 ¶ | |||
| | | +--ro ldp-ext:address | | | | +--ro ldp-ext:address | |||
| | | | inet:ipv6-address | | | | | inet:ipv6-address | |||
| | | +--ro ldp-ext:advertisement-type? | | | | +--ro ldp-ext:advertisement-type? | |||
| | | | advertised-received | | | | | advertised-received | |||
| | | +--ro ldp-ext:peer | | | | +--ro ldp-ext:peer | |||
| | | +--ro ldp-ext:lsr-id? leafref | | | | +--ro ldp-ext:lsr-id? leafref | |||
| | | +--ro ldp-ext:label-space-id? leafref | | | | +--ro ldp-ext:label-space-id? leafref | |||
| | +--ro ldp-ext:fec-label* [fec] | | | +--ro ldp-ext:fec-label* [fec] | |||
| | +--ro ldp-ext:fec inet:ipv6-prefix | | | +--ro ldp-ext:fec inet:ipv6-prefix | |||
| | +--ro ldp-ext:peer* | | | +--ro ldp-ext:peer* | |||
| | [lsr-id label-space-id advertisement-type] | | | [lsr-id label-space-id advertisement-type] | |||
| | +--ro ldp-ext:lsr-id leafref | | | +--ro ldp-ext:lsr-id leafref | |||
| | +--ro ldp-ext:label-space-id leafref | | | +--ro ldp-ext:label-space-id leafref | |||
| | +--ro ldp-ext:advertisement-type | | | +--ro ldp-ext:advertisement-type | |||
| | | advertised-received | | | | advertised-received | |||
| | +--ro ldp-ext:label? | | | +--ro ldp-ext:label? | |||
| | | rt-types:mpls-label | | | | rt-types:mpls-label | |||
| | +--ro ldp-ext:used-in-forwarding? boolean | | | +--ro ldp-ext:used-in-forwarding? boolean | |||
| +--rw ldp-ext:forwarding-nexthop | | +--rw ldp-ext:forwarding-nexthop | |||
| | {forwarding-nexthop-config}? | | | {forwarding-nexthop-config}? | |||
| | +--rw ldp-ext:interfaces | | | +--rw ldp-ext:interfaces | |||
skipping to change at page 10, line 45 ¶ | skipping to change at line 471 ¶ | |||
| | | | | +--ro ldp-ext:remaining? uint16 | | | | | | +--ro ldp-ext:remaining? uint16 | |||
| | | | +--ro ldp-ext:next-hello? uint16 | | | | | +--ro ldp-ext:next-hello? uint16 | |||
| | | | +--ro ldp-ext:statistics | | | | | +--ro ldp-ext:statistics | |||
| | | | | +--ro ldp-ext:discontinuity-time | | | | | | +--ro ldp-ext:discontinuity-time | |||
| | | | | | yang:date-and-time | | | | | | | yang:date-and-time | |||
| | | | | +--ro ldp-ext:hello-received? | | | | | | +--ro ldp-ext:hello-received? | |||
| | | | | | yang:counter64 | | | | | | | yang:counter64 | |||
| | | | | +--ro ldp-ext:hello-dropped? | | | | | | +--ro ldp-ext:hello-dropped? | |||
| | | | | yang:counter64 | | | | | | yang:counter64 | |||
| | | | +--ro ldp-ext:peer | | | | | +--ro ldp-ext:peer | |||
| | | | +--ro ldp-ext:lsr-id? leafref | | | | | +--ro ldp-ext:lsr-id? leafref | |||
| | | | +--ro ldp-ext:label-space-id? leafref | | | | | +--ro ldp-ext:label-space-id? leafref | |||
| | | +--rw ldp-ext:transport-address? union | | | | +--rw ldp-ext:transport-address? union | |||
| | +--rw ldp-ext:hello-holdtime? uint16 | | | +--rw ldp-ext:hello-holdtime? uint16 | |||
| | | {per-interface-timer-config}? | | | | {per-interface-timer-config}? | |||
| | +--rw ldp-ext:hello-interval? uint16 | | | +--rw ldp-ext:hello-interval? uint16 | |||
| | | {per-interface-timer-config}? | | | | {per-interface-timer-config}? | |||
| | +--rw ldp-ext:igp-synchronization-delay? uint16 | | | +--rw ldp-ext:igp-synchronization-delay? uint16 | |||
| | {per-interface-timer-config}? | | | {per-interface-timer-config}? | |||
| +--rw targeted | | +--rw targeted | |||
| +--rw hello-holdtime? uint16 | | +--rw hello-holdtime? uint16 | |||
| +--rw hello-interval? uint16 | | +--rw hello-interval? uint16 | |||
skipping to change at page 15, line 38 ¶ | skipping to change at line 704 ¶ | |||
| +--rw ldp-ext:enabled? boolean | | +--rw ldp-ext:enabled? boolean | |||
| +--rw ldp-ext:peer-list? peer-list-ref | | +--rw ldp-ext:peer-list? peer-list-ref | |||
+--rw ldp-ext:dual-stack-transport-preference | +--rw ldp-ext:dual-stack-transport-preference | |||
{peers-dual-stack-transport-preference}? | {peers-dual-stack-transport-preference}? | |||
+--rw ldp-ext:max-wait? uint16 | +--rw ldp-ext:max-wait? uint16 | |||
+--rw ldp-ext:prefer-ipv4! | +--rw ldp-ext:prefer-ipv4! | |||
+--rw ldp-ext:peer-list? peer-list-ref | +--rw ldp-ext:peer-list? peer-list-ref | |||
rpcs: | rpcs: | |||
+---x mpls-ldp-clear-peer | +---x mpls-ldp-clear-peer | |||
| +---w input | | +---w input | |||
| +---w protocol-name? leafref | | +---w protocol-name? leafref | |||
| +---w lsr-id? leafref | | +---w lsr-id? leafref | |||
| +---w label-space-id? leafref | | +---w label-space-id? leafref | |||
+---x mpls-ldp-clear-hello-adjacency | +---x mpls-ldp-clear-hello-adjacency | |||
| +---w input | | +---w input | |||
| +---w hello-adjacency | | +---w hello-adjacency | |||
| +---w protocol-name? leafref | | +---w protocol-name? leafref | |||
| +---w (hello-adjacency-type)? | | +---w (hello-adjacency-type)? | |||
| +--:(targeted) | | +--:(targeted) | |||
| | +---w targeted! | | | +---w targeted! | |||
| | +---w target-address? inet:ip-address | | | +---w target-address? inet:ip-address | |||
| +--:(link) | | +--:(link) | |||
| +---w link! | | +---w link! | |||
| +---w next-hop-interface? leafref | | +---w next-hop-interface? leafref | |||
| +---w next-hop-address? inet:ip-address | | +---w next-hop-address? inet:ip-address | |||
+---x mpls-ldp-clear-peer-statistics | +---x mpls-ldp-clear-peer-statistics | |||
+---w input | +---w input | |||
+---w protocol-name? leafref | +---w protocol-name? leafref | |||
+---w lsr-id? leafref | +---w lsr-id? leafref | |||
+---w label-space-id? leafref | +---w label-space-id? leafref | |||
notifications: | notifications: | |||
+---n mpls-ldp-peer-event | +---n mpls-ldp-peer-event | |||
| +--ro event-type? oper-status-event-type | | +--ro event-type? oper-status-event-type | |||
| +--ro peer | | +--ro peer | |||
| +--ro protocol-name? leafref | | +--ro protocol-name? leafref | |||
| +--ro lsr-id? leafref | | +--ro lsr-id? leafref | |||
| +--ro label-space-id? leafref | | +--ro label-space-id? leafref | |||
+---n mpls-ldp-hello-adjacency-event | +---n mpls-ldp-hello-adjacency-event | |||
| +--ro event-type? oper-status-event-type | | +--ro event-type? oper-status-event-type | |||
| +--ro protocol-name? leafref | | +--ro protocol-name? leafref | |||
| +--ro (hello-adjacency-type)? | | +--ro (hello-adjacency-type)? | |||
| +--:(targeted) | | +--:(targeted) | |||
| | +--ro targeted | | | +--ro targeted | |||
| | +--ro target-address? inet:ip-address | | | +--ro target-address? inet:ip-address | |||
| +--:(link) | | +--:(link) | |||
| +--ro link | | +--ro link | |||
| +--ro next-hop-interface? if:interface-ref | | +--ro next-hop-interface? if:interface-ref | |||
| +--ro next-hop-address? inet:ip-address | | +--ro next-hop-address? inet:ip-address | |||
+---n mpls-ldp-fec-event | +---n mpls-ldp-fec-event | |||
+--ro event-type? oper-status-event-type | +--ro event-type? oper-status-event-type | |||
+--ro protocol-name? leafref | +--ro protocol-name? leafref | |||
+--ro fec? inet:ip-prefix | +--ro fec? inet:ip-prefix | |||
Figure 2: Complete Tree | Figure 2: Complete Tree | |||
5. Configuration | 5. Configuration | |||
This specification defines the configuration parameters for base LDP | This specification defines the configuration parameters for base LDP | |||
as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it | as specified in [RFC5036] and LDP IPv6 [RFC7552]. Moreover, it | |||
incorporates provisions to enable LDP Capabilities [RFC5561], and | incorporates provisions to enable LDP Capabilities [RFC5561] and | |||
defines some of the most significant and commonly used capabilities | defines some of the most significant and commonly used capabilities | |||
such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP | such as Typed Wildcard FEC [RFC5918], End-of-LIB [RFC5919], and LDP | |||
Upstream Label Assignment [RFC6389]. | Upstream Label Assignment [RFC6389]. | |||
This model augments /rt:routing/rt:control-plane-protocols/ | This model augments /rt:routing/rt:control-plane-protocols/ | |||
rt:control-plane-protocol that is defined in [RFC8349] and follows | rt:control-plane-protocol, which is defined in [RFC8349] and follows | |||
NMDA as mentioned earlier. | NMDA as mentioned earlier. | |||
Following is the high-level configuration organization for base LDP | The following is the high-level configuration organization for the | |||
module: | base LDP module: | |||
augment /rt:routing/rt:control-plane-protocols: | augment /rt:routing/rt:control-plane-protocols: | |||
/rt:control-plane-protocol: | /rt:control-plane-protocol: | |||
+-- mpls-ldp | +-- mpls-ldp | |||
+-- global | +-- global | |||
| +-- ... | | +-- ... | |||
| +-- ... | | +-- ... | |||
| +-- address-families | | +-- address-families | |||
| | +-- ipv4 | | | +-- ipv4 | |||
| | +-- . . . | | | +-- . . . | |||
| | +-- . . . | | | +-- . . . | |||
| +-- capability | | +-- capability | |||
| +-- ... | | +-- ... | |||
| +-- ... | | +-- ... | |||
+-- discovery | +-- discovery | |||
| +-- interfaces | | +-- interfaces | |||
| | +-- ... | | | +-- ... | |||
| | +-- ... | | | +-- ... | |||
| | +-- interface* [interface] | | | +-- interface* [interface] | |||
| | +-- ... | | | +-- ... | |||
| | +-- address-families | | | +-- address-families | |||
| | +-- ipv4 | | | +-- ipv4 | |||
| | +-- ... | | | +-- ... | |||
| | +-- ... | | | +-- ... | |||
| +-- targeted | | +-- targeted | |||
| +-- ... | | +-- ... | |||
| +-- address-families | | +-- address-families | |||
| +-- ipv4 | | +-- ipv4 | |||
| +- target* [adjacent-address] | | +-- target* [adjacent-address] | |||
| +- ... | | +-- ... | |||
| +- ... | | +-- ... | |||
+-- peers | +-- peers | |||
+-- ... | +-- ... | |||
+-- ... | +-- ... | |||
+-- peer* [lsr-id label-space-id] | +-- peer* [lsr-id label-space-id] | |||
+-- ... | +-- ... | |||
+-- ... | +-- ... | |||
Figure 3: Base Configuration organization | Figure 3: Base Configuration Organization | |||
Following is the high-level configuration organization for extended | The following is the high-level configuration organization for the | |||
LDP: | extended LDP module: | |||
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol | augment /rt:routing/rt:control-plane-protocols | |||
+-- mpls-ldp | /rt:control-plane-protocol | |||
+-- global | +-- mpls-ldp | |||
| +-- ... | +-- global | |||
| +-- ... | | +-- ... | |||
| +-- address-families | | +-- ... | |||
| | +-- ipv4 | | +-- address-families | |||
| | | +-- . . . | | | +-- ipv4 | |||
| | | +-- . . . | | | | +-- . . . | |||
| | | +-- label-policy | | | | +-- . . . | |||
| | | +-- ... | | | | +-- label-policy | |||
| | | +-- ... | | | | +-- ... | |||
| | +-- ipv6 | | | | +-- ... | |||
| | +-- . . . | | | +-- ipv6 | |||
| | +-- . . . | | | +-- . . . | |||
| | +-- label-policy | | | +-- . . . | |||
| | +-- ... | | | +-- label-policy | |||
| | +-- ... | | | +-- ... | |||
| +-- capability | | | +-- ... | |||
| | +-- ... | | +-- capability | |||
| | +-- ... | | | +-- ... | |||
| +-- discovery | | | +-- ... | |||
| +-- interfaces | | +-- discovery | |||
| | +-- ... | | +-- interfaces | |||
| | +-- ... | | | +-- ... | |||
| | +-- interface* [interface] | | | +-- ... | |||
| | +-- ... | | | +-- interface* [interface] | |||
| | +-- address-families | | | +-- ... | |||
| | +-- ipv4 | | | +-- address-families | |||
| | | +-- ... | | | +-- ipv4 | |||
| | | +-- ... | | | | +-- ... | |||
| | +-- ipv6 | | | | +-- ... | |||
| | +-- ... | | | +-- ipv6 | |||
| | +-- ... | | | +-- ... | |||
| +-- targeteted | | | +-- ... | |||
| +-- ... | | +-- targeted | |||
| +-- address-families | | +-- ... | |||
| +-- ipv6 | | +-- address-families | |||
| +- target* [adjacent-address] | | +-- ipv6 | |||
| +- ... | | +- target* [adjacent-address] | |||
| +- ... | | +- ... | |||
+-- forwarding-nexthop | | +- ... | |||
| +-- ... | +-- forwarding-nexthop | |||
| +-- ... | ||||
| +-- ... | ||||
+-- peers | ||||
+-- ... | ||||
+-- ... | ||||
+-- peer* | ||||
+-- ... | ||||
+-- ... | ||||
+-- label-policy | ||||
| +-- .. | ||||
+-- address-families | ||||
+-- ipv4 | ||||
| +-- ... | | +-- ... | |||
+-- peers | +-- ipv6 | |||
+-- ... | +-- ... | |||
+-- ... | ||||
+-- peer* | ||||
+-- ... | ||||
+-- ... | ||||
+-- label-policy | ||||
| +-- .. | ||||
+-- address-families | ||||
+-- ipv4 | ||||
| +-- ... | ||||
+-- ipv6 | ||||
+-- ... | ||||
Figure 4: Extended Configuration organization | Figure 4: Extended Configuration Organization | |||
Given the configuration hierarchy, the model allows inheritance such | Given the configuration hierarchy, the model allows inheritance such | |||
that an item in a child tree is able to derive value from a similar | that an item in a child tree is able to derive value from a similar | |||
or related item in one of the parents. For instance, hello holdtime | or related item in one of the parents. For instance, Hello holdtime | |||
can be configured per-VRF or per-VRF-interface, thus allowing | can be configured per VRF or per VRF interface, thus allowing | |||
inheritance as well flexibility to override with a different value at | inheritance as well flexibility to override with a different value at | |||
any child level. | any child level. | |||
5.1. Configuration Hierarchy | 5.1. Configuration Hierarchy | |||
LDP module resides under a network-instance and the scope of any LDP | The LDP module resides under a network-instance and the scope of any | |||
configuration defined under this tree is per network-instance (per- | LDP configuration defined under this tree is per network-instance | |||
VRF). This configuration is further divided into sub categories as | (per-VRF). This configuration is further divided into sub categories | |||
follows. | as follows: | |||
* Global parameters | * Global parameters | |||
* Per-address-family parameters | * Per-address-family parameters | |||
* LDP Capabilities parameters | * LDP Capabilities parameters | |||
* Hello Discovery parameters | * Hello Discovery parameters | |||
- interfaces | - interfaces | |||
skipping to change at page 20, line 4 ¶ | skipping to change at line 903 ¶ | |||
o Global | o Global | |||
o Per-interface: Global | o Per-interface: Global | |||
o Per-interface: Per-address-family | o Per-interface: Per-address-family | |||
- targeted | - targeted | |||
o Global | o Global | |||
o Per-address-family: Per-target | o Per-address-family: Per-target | |||
* Peer parameters | * Peer parameters | |||
- Global | - Global | |||
- Per-peer: Global | - Per-peer: Global | |||
- Per-peer: Per-address-family | - Per-peer: Per-address-family | |||
* Forwarding parameters | * Forwarding parameters | |||
Following subsections briefly explain these configuration areas. | The following subsections briefly explain these configuration areas. | |||
5.1.1. Global parameters | 5.1.1. Global Parameters | |||
There are configuration items that are available directly under a VRF | There are configuration items that are available directly under a VRF | |||
instance and do not fall under any other sub tree. Example of such a | instance and do not fall under any other subtree. An example of such | |||
parameter is LDP LSR Id that is typically configured per VRF. To | a parameter is an LDP LSR Id that is typically configured per VRF. | |||
keep legacy LDP features and applications working in an LDP IPv4 | To keep legacy LDP features and applications working in an LDP IPv4 | |||
networks with this model, this document recommends an operator to | network with this model, this document recommends an operator to pick | |||
pick a routable IPv4 unicast address (within a routing domain) as an | a routable IPv4 unicast address (within a routing domain) as an LSR | |||
LSR Id. | Id. | |||
5.1.2. Capabilities parameters | 5.1.2. Capabilities Parameters | |||
This container falls under the global tree and holds the LDP | This container falls under the global tree and holds the LDP | |||
capabilities that are to be enabled for certain features. By | capabilities that are to be enabled for certain features. By | |||
default, an LDP capability is disabled unless explicitly enabled. | default, an LDP capability is disabled unless explicitly enabled. | |||
These capabilities are typically used to negotiate with LDP peer(s) | These capabilities are typically used to negotiate with LDP peer(s) | |||
the support/non-support related to a feature and its parameters. The | the support/non-support related to a feature and its parameters. The | |||
scope of a capability enabled under this container applies to all LDP | scope of a capability enabled under this container applies to all LDP | |||
peers in the given VRF instance. There is also a peer level | peers in the given VRF instance. There is also a peer-level | |||
capability container that is provided to override a capability that | capability container that is provided to override a capability that | |||
is enabled/specified at VRF level. | is enabled/specified at VRF level. | |||
5.1.3. Per-Address-Family parameters | 5.1.3. Per-Address-Family Parameters | |||
Any LDP configuration parameter related to IP address family (AF) | Any LDP configuration parameter related to an IP address family (AF) | |||
whose scope is VRF wide is configured under this tree. The examples | whose scope is VRF wide is configured under this tree. The examples | |||
of per-AF parameters include enabling LDP for an address family, | of per-AF parameters include enabling LDP for an address family, | |||
prefix-list based label policies, and LDP transport address. | prefix-list-based label policies, and LDP transport address. | |||
5.1.4. Hello Discovery parameters | 5.1.4. Hello Discovery Parameters | |||
This container is used to hold LDP configuration related to Hello and | This container is used to hold LDP configuration related to the Hello | |||
discovery process for both basic (link) and extended (targeted) | and discovery process for both basic (link) and extended (targeted) | |||
discovery. | discovery. | |||
The "interfaces" is a container to configure parameters related to | The "interfaces" container is used to configure parameters related to | |||
VRF interfaces. There are parameters that apply to all interfaces | VRF interfaces. There are parameters that apply to all interfaces | |||
(such as hello timers), as well as parameters that can be configured | (such as Hello timers) as well as parameters that can be configured | |||
per-interface. Hence, an interface list is defined under | per interface. Hence, an interface list is defined under the | |||
"interfaces" container. The model defines parameters to configure | "interfaces" container. The model defines parameters to configure | |||
per-interface non AF related items, as well as per-interface per-AF | per-interface non-AF-related items as well as per-interface per-AF | |||
items. The example of the former is interface hello timers, and | items. The example of the former is interface Hello timers, and an | |||
example of the latter is enabling hellos for a given AF under an | example of the latter is enabling hellos for a given AF under an | |||
interface. | interface. | |||
The "targeted" container under a VRF instance allows to configure LDP | The "targeted" container under a VRF instance allows for the | |||
targeted discovery related parameters. Within this container, the | configuration of parameters related to LDP targeted discovery. | |||
"target" list provides a means to configure multiple target addresses | Within this container, the "target" list provides a means to | |||
to perform extended discovery to a specific destination target, as | configure multiple target addresses to perform extended discovery to | |||
well as to fine-tune the per-target parameters. | a specific destination target, as well as to fine tune the per-target | |||
parameters. | ||||
5.1.5. Peer parameters | 5.1.5. Peer Parameters | |||
This container is used to hold LDP configuration related to LDP | This container is used to hold LDP configuration related to LDP | |||
sessions and peers under a VRF instance. This container allows to | sessions and peers under a VRF instance. This container allows for | |||
configure parameters that either apply on VRF's all peers or a subset | the configuration of parameters that either apply to all or a subset | |||
(peer-list) of VRF peers. The example of such parameters include | (peer-list) of peers in a given VRF. The example of such parameters | |||
authentication password, session KA timers etc. Moreover, the model | includes authentication passwords, session KeepAlive (KA) timers, | |||
also allows per-peer parameter tuning by specifying a "peer" list | etc. Moreover, the model also allows per-peer parameter tuning by | |||
under the "peers" container. A peer is uniquely identified by its | specifying a "peer" list under the "peers" container. A peer is | |||
LSR Id. | uniquely identified by its LSR Id. | |||
Like per-interface parameters, some per-peer parameters are AF- | Like per-interface parameters, some per-peer parameters are AF | |||
agnostic (i.e. either non AF related or apply to both IP address | agnostic (i.e., either non-AF related or apply to both IP address | |||
families), and some that belong to an AF. The example of the former | families), and some belong to an AF. The example of the former is | |||
is per-peer session password configuration, whereas the example of | per-peer session password configuration, whereas the example of the | |||
the latter is prefix-list based label policies (inbound and outbound) | latter is prefix-lis-based label policies (inbound and outbound) that | |||
that apply to a given peer. | apply to a given peer. | |||
5.1.6. Forwarding parameters | 5.1.6. Forwarding Parameters | |||
This container is used to hold configuration used to control LDP | This container is used to hold configuration used to control LDP | |||
forwarding behavior under a VRF instance. One example of a | forwarding behavior under a VRF instance. One example of a | |||
configuration under this container is when a user wishes to enable | configuration under this container is when a user wishes to enable | |||
neighbor discovery on an interface but wishes to disable use of the | LDP neighbor discovery on an interface but wishes to disable use of | |||
same interface as forwarding nexthop. This example configuration | the same interface for forwarding MPLS packets. This example | |||
makes sense only when there are more than one LDP enabled interfaces | configuration makes sense only when there are more than one LDP- | |||
towards the neighbor. | enabled interfaces towards a neighbor. | |||
6. Operational State | 6. Operational State | |||
Operational state of LDP can be queried and obtained from read-only | The operational state of LDP can be queried and obtained from read- | |||
state containers that fall under the same tree (/rt:routing/ | only state containers that fall under the same tree (/rt:routing/ | |||
rt:control-plane-protocols/rt:control-plane-protocol) as the | rt:control-plane-protocols/rt:control-plane-protocol) as the | |||
configuration. | configuration. | |||
Following are main areas for which LDP operational state is defined: | The following are main areas for which LDP operational state is | |||
defined: | ||||
* Neighbor Adjacencies | * Neighbor Adjacencies | |||
* Peer | * Peer | |||
* Bindings (FEC-label and address) | * Bindings (FEC-Label and address) | |||
* Capabilities | * Capabilities | |||
6.1. Adjacency state | 6.1. Adjacency State | |||
Neighbor adjacencies are per address-family hello adjacencies that | Neighbor adjacencies are per-address-family Hello adjacencies that | |||
are formed with neighbors as result of LDP basic or extended | are formed with neighbors as a result of LDP basic or extended | |||
discovery. In terms of organization, there is a source of discovery | discovery. In terms of organization, there is a source of discovery | |||
(e.g. interface or target address) along with its associated | (e.g., interface or target address) along with its associated | |||
parameters and one or more discovered neighbors along with neighbor | parameters and one or more discovered neighbors along with neighbor- | |||
discovery related parameters. For the basic discovery, there could | discovery-related parameters. For the basic discovery, there could | |||
be more than one discovered neighbor for a given source (interface), | be more than one discovered neighbor for a given source (interface), | |||
whereas there is at most one discovered neighbor for an extended | whereas there is at most one discovered neighbor for an extended | |||
discovery source (local-address and target-address). It is also to | discovery source (local-address and target-address). It is also to | |||
be noted that the reason for a targeted neighbor adjacency could be | be noted that the reason for a targeted neighbor adjacency could be | |||
either an active source (locally configured targeted) or passive | either an active source (locally configured targeted) or passive | |||
source (to allow any incoming extended/targeted hellos). A neighbor/ | source (to allow any incoming extended/targeted hellos). A neighbor/ | |||
adjacency record also contains session-state that helps highlight | adjacency record also contains session state that helps highlight | |||
whether a given adjacency has progressed to subsequent session level | whether a given adjacency has progressed to the subsequent session | |||
or to eventual peer level. | level or eventual peer level. | |||
Following captures high level tree hierarchy for neighbor adjacency | The following captures high-level tree hierarchy for neighbor | |||
state. The tree is shown for ipv4 address-family only; a similar | adjacency state. The tree is shown for ipv4 address-family only; a | |||
tree exists for ipv6 address-family as well. | similar tree exists for ipv6 address-family as well. | |||
+--rw mpls-ldp! | +--rw mpls-ldp! | |||
+--rw discovery | +--rw discovery | |||
+--rw interfaces | +--rw interfaces | |||
| +--rw interface* [interface] | | +--rw interface* [interface] | |||
| +--rw address-families | | +--rw address-families | |||
| +--rw ipv4 | | +--rw ipv4 | |||
| +--ro hello-adjacencies | | +--ro hello-adjacencies | |||
| +--ro hello-adjacencies* [adjacent-address] | | +--ro hello-adjacencies* [adjacent-address] | |||
| +--ro adjacent-address | | +--ro adjacent-address | |||
| . . . . | | . . . . | |||
| . . . . | | . . . . | |||
+--rw targeted | +--rw targeted | |||
+--rw address-families | +--rw address-families | |||
+--rw ipv4 | +--rw ipv4 | |||
+--ro hello-adjacencies | +--ro hello-adjacencies | |||
+--ro hello-adjacencies* | +--ro hello-adjacencies* | |||
| [local-address adjacent-address] | | [local-address adjacent-address] | |||
+--ro local-address | +--ro local-address | |||
+--ro adjacent-address | +--ro adjacent-address | |||
. . . . | . . . . | |||
. . . . | . . . . | |||
Figure 5: Adjacency state | Figure 5: Adjacency State | |||
6.2. Peer state | 6.2. Peer State | |||
Peer related state is presented under peers tree. This is one of the | Peer-related state is presented under a peers tree. This is one of | |||
core state that provides info on the session related parameters | the core states that provides info on the session-related parameters | |||
(mode, authentication, KA timeout etc.), TCP connection info, hello | (mode, authentication, KA timeout, etc.), TCP connection info, Hello | |||
adjacencies for the peer, statistics related to messages and | adjacencies for the peer, statistics related to messages and | |||
bindings, and capabilities exchange info. | bindings, and capabilities exchange info. | |||
Following captures high level tree hierarchy for peer state. The | The following captures high-level tree hierarchy for peer state. The | |||
peer's hello adjacencies tree is shown for ipv4 address-family only; | peer's Hello adjacencies tree is shown for ipv4 address-family only; | |||
a similar tree exists for ipv6 address-family as well. | a similar tree exists for ipv6 address-family as well. | |||
+--rw mpls-ldp! | +--rw mpls-ldp! | |||
+--rw peers | +--rw peers | |||
+--rw peer* [lsr-id label-space-id] | +--rw peer* [lsr-id label-space-id] | |||
+--rw lsr-id | +--rw lsr-id | |||
+--rw label-space-id | +--rw label-space-id | |||
+--ro label-advertisement-mode | +--ro label-advertisement-mode | |||
+--ro session-state | +--ro session-state | |||
+--ro tcp-connection | +--ro tcp-connection | |||
+--ro session-holdtime? | +--ro session-holdtime? | |||
+--ro up-time | +--ro up-time | |||
+-- . . . . | +-- . . . . | |||
+--ro address-families | +--ro address-families | |||
| +--ro ipv4 | | +--ro ipv4 | |||
| +--ro hello-adjacencies | | +--ro hello-adjacencies | |||
| +--ro hello-adjacencies* | | +--ro hello-adjacencies* | |||
| [local-address adjacent-address] | | [local-address adjacent-address] | |||
| . . . . | | . . . . | |||
| . . . . | | . . . . | |||
+--ro received-peer-state | +--ro received-peer-state | |||
| +--ro . . . . | | +--ro . . . . | |||
| +--ro capability | | +--ro capability | |||
| +--ro . . . . | | +--ro . . . . | |||
+--ro statistics | +--ro statistics | |||
+-- . . . . | +-- . . . . | |||
+-- received | +-- received | |||
| +-- ... | | +-- ... | |||
+-- sent | +-- sent | |||
+-- ... | +-- ... | |||
Figure 6: Peer state | Figure 6: Peer State | |||
6.3. Bindings state | 6.3. Bindings State | |||
Binding state provides information on LDP FEC-label bindings as well | Bindings state provides information on LDP FEC-Label bindings as well | |||
as address binding for both inbound (received) as well as outbound | as address bindings for both inbound (received) as well as outbound | |||
(advertised) direction. FEC-label bindings are presented as a FEC- | (advertised) direction. FEC-Label bindings are presented in a FEC- | |||
centric view, and address bindings are presented as an address- | centric view, and address bindings are presented in an address- | |||
centric view: | centric view: | |||
FEC-Label bindings: | FEC-Label bindings: | |||
FEC 203.0.113.1/32: | FEC 203.0.113.1/32: | |||
advertised: local-label 16000 | advertised: local-label 16000 | |||
peer 192.0.2.1:0 | peer 192.0.2.1:0 | |||
peer 192.0.2.2:0 | peer 192.0.2.2:0 | |||
peer 192.0.2.3:0 | peer 192.0.2.3:0 | |||
received: | received: | |||
peer 192.0.2.1:0, label 16002, used-in-forwarding=Yes | peer 192.0.2.1:0, label 16002, used-in-forwarding=Yes | |||
skipping to change at page 25, line 42 ¶ | skipping to change at line 1150 ¶ | |||
received, peer 192.0.2.2:0 | received, peer 192.0.2.2:0 | |||
Addr 192.0.2.3: | Addr 192.0.2.3: | |||
received, peer 192.0.2.3:0 | received, peer 192.0.2.3:0 | |||
Addr 2001:db8:0:2:: | Addr 2001:db8:0:2:: | |||
received, peer 192.0.2.2:0 | received, peer 192.0.2.2:0 | |||
Addr 2001:db8:0:3:: | Addr 2001:db8:0:3:: | |||
received, peer 192.0.2.3:0 | received, peer 192.0.2.3:0 | |||
Figure 7: Example Bindings | Figure 7: Example Bindings | |||
Note that all local addresses are advertised to all peers and hence | Note that all local addresses are advertised to all peers; hence, | |||
no need to provide per-peer information for local address | there is no need to provide per-peer information for local address | |||
advertisement. Furthermore, note that it is easy to derive a peer- | advertisement. Furthermore, note that it is easy to derive a peer- | |||
centric view for the bindings from the information already provided | centric view for the bindings from the information already provided | |||
in this model. | in this model. | |||
Following captures high level tree hierarchy for bindings state. The | The following captures high-level tree hierarchy for bindings state. | |||
tree shown below is for ipv4 address-family only; a similar tree | The tree shown below is for ipv4 address-family only; a similar tree | |||
exists for ipv6 address-family as well. | exists for ipv6 address-family as well. | |||
+--rw mpls-ldp! | +--rw mpls-ldp! | |||
+--rw global | +--rw global | |||
+--rw address-families | +--rw address-families | |||
+--rw ipv4 | +--rw ipv4 | |||
+--ro bindings | +--ro bindings | |||
+--ro address* [address] | +--ro address* [address] | |||
| +--ro address (ipv4-address or ipv6-address) | | +--ro address (ipv4-address or ipv6-address) | |||
| +--ro advertisement-type? advertised-received | | +--ro advertisement-type? advertised-received | |||
| +--ro peer? leafref | | +--ro peer? leafref | |||
+--ro fec-label* [fec] | +--ro fec-label* [fec] | |||
+--ro fec (ipv4-prefix or ipv6-prefix) | +--ro fec (ipv4-prefix or ipv6-prefix) | |||
+--ro peer* [peer advertisement-type] | +--ro peer* [peer advertisement-type] | |||
+--ro peer leafref | +--ro peer leafref | |||
+--ro advertisement-type? advertised-received | +--ro advertisement-type? advertised-received | |||
+--ro label? mpls:mpls-label | +--ro label? mpls:mpls-label | |||
+--ro used-in-forwarding? boolean | +--ro used-in-forwarding? boolean | |||
Figure 8: Bindings state | Figure 8: Bindings State | |||
6.4. Capabilities state | 6.4. Capabilities State | |||
LDP capabilities state comprise two types of information - global | LDP capabilities state comprises two types of information: global | |||
information (such as timer etc.), and per-peer information. | information (such as timer, etc.) and per-peer information. | |||
Following captures high level tree hierarchy for LDP capabilities | The following captures high-level tree hierarchy for LDP capabilities | |||
state. | state. | |||
+--rw mpls-ldp! | +--rw mpls-ldp! | |||
+--rw peers | +--rw peers | |||
+--rw peer* [lsr-id label-space-id] | +--rw peer* [lsr-id label-space-id] | |||
+--rw lsr-id yang:dotted-quad | +--rw lsr-id yang:dotted-quad | |||
+--rw label-space-id | +--rw label-space-id | |||
+--ro received-peer-state | +--ro received-peer-state | |||
+--ro capability | +--ro capability | |||
+--ro . . . . | +--ro . . . . | |||
+--ro . . . . | +--ro . . . . | |||
Figure 9: Capabilities state | Figure 9: Capabilities State | |||
7. Notifications | 7. Notifications | |||
This model defines a list of notifications to inform client of | This model defines a list of notifications to inform the client of | |||
important events detected during the protocol operation. These | important events detected during the protocol operation. These | |||
events include events related to changes in the operational state of | events include events related to changes in the operational state of | |||
an LDP peer, hello adjacency, and FEC etc. It is to be noted that an | an LDP peer, Hello adjacency, and FEC, etc. It is to be noted that | |||
LDP FEC is treated as operational (up) as long as it has at least 1 | an LDP FEC is treated as operational (up) as long as it has at least | |||
NHLFE (Next Hop Label Forwarding Entry) with outgoing label. | one Next Hop Label Forwarding Entry (NHLFE) with an outgoing label. | |||
A simplified graphical representation of the data model for LDP | A simplified graphical representation of the data model for LDP | |||
notifications is shown in Figure 2. | notifications is shown in Figure 2. | |||
8. Action | 8. Action | |||
This model defines a list of rpcs that allow performing an action or | This model defines a list of rpcs that allow performing an action or | |||
executing a command on the protocol. For example, it allows to clear | executing a command on the protocol. For example, it allows for the | |||
(reset) LDP peers, hello-adjacencies, and statistics. The model | clearing (resetting) of LDP peers, hello-adjacencies, and statistics. | |||
makes an effort to provide different level of control so that a user | The model makes an effort to provide a different level of control so | |||
is able to either clear all, or clear all for a given type, or clear | that a user is able to either clear all, clear all for a given type, | |||
a specific entity. | or clear a specific entity. | |||
A simplified graphical representation of the data model for LDP | A simplified graphical representation of the data model for LDP | |||
actions is shown in Figure 2. | actions is shown in Figure 2. | |||
9. YANG Specification | 9. YANG Specification | |||
Following sections specify the actual YANG (module) specification for | The following sections specify the actual YANG (module) specification | |||
LDP constructs defined earlier in the document. | for LDP constructs defined earlier in the document. | |||
9.1. Base | 9.1. Base | |||
This YANG module imports types defined in [RFC6991], [RFC8349], | This YANG module imports types defined in [RFC6991], [RFC8177], | |||
[RFC8294], [RFC8343], and [RFC8344]. | [RFC8294], [RFC8343], [RFC8344], [RFC8349], and [RFC9067]. | |||
<CODE BEGINS> file "ietf-mpls-ldp@2020-02-25.yang" | ||||
// RFC Editor: replace the above date 2020-02-25 with the date of | ||||
// publication and remove this note. | ||||
<CODE BEGINS> file "ietf-mpls-ldp@2022-03-07.yang" | ||||
module ietf-mpls-ldp { | module ietf-mpls-ldp { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; | namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp"; | |||
prefix "ldp"; | prefix ldp; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix inet; | |||
reference "RFC 6991: Common YANG Data Types"; | reference | |||
"RFC 6991: Common YANG Data Types"; | ||||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix "yang"; | prefix yang; | |||
reference "RFC 6991: Common YANG Data Types"; | reference | |||
"RFC 6991: Common YANG Data Types"; | ||||
} | } | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
version)"; | version)"; | |||
} | } | |||
import ietf-routing-types { | import ietf-routing-types { | |||
prefix "rt-types"; | prefix rt-types; | |||
reference | reference | |||
"RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix if; | |||
reference "RFC 8343: A YANG Data Model for Interface Management"; | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | ||||
} | } | |||
import ietf-ip { | import ietf-ip { | |||
prefix "ip"; | prefix ip; | |||
reference "RFC 7277: A YANG Data Model for IP Management"; | reference | |||
"RFC 8344: A YANG Data Model for IP Management"; | ||||
} | } | |||
import ietf-key-chain { | import ietf-key-chain { | |||
prefix "key-chain"; | prefix key-chain; | |||
reference "RFC 8177: YANG Data Model for Key Chains"; | reference | |||
"RFC 8177: YANG Data Model for Key Chains"; | ||||
} | } | |||
organization | organization | |||
"IETF MPLS Working Group"; | "IETF MPLS Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/mpls/> | "WG Web: <https://datatracker.ietf.org/wg/mpls/> | |||
WG List: <mailto:mpls@ietf.org> | WG List: <mailto:mpls@ietf.org> | |||
Editor: Kamran Raza | Editor: Kamran Raza | |||
<mailto:skraza@cisco.com> | <mailto:skraza@cisco.com> | |||
Editor: Rajiv Asati | Author: Rajiv Asati | |||
<mailto:rajiva@cisco.com> | <mailto:rajiva@cisco.com> | |||
Editor: Xufeng Liu | Author: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Santosh Esale | Author: Santosh Easale | |||
<mailto:sesale@juniper.net> | <mailto:santosh_easale@berkeley.edu> | |||
Editor: Xia Chen | Author: Xia Chen | |||
<mailto:jescia.chenxia@huawei.com> | <mailto:jescia.chenxia@huawei.com> | |||
Editor: Himanshu Shah | Author: Himanshu Shah | |||
<mailto:hshah@ciena.com>"; | <mailto:hshah@ciena.com>"; | |||
description | description | |||
"This YANG module defines the essential components for the | "This YANG module defines the essential components for the | |||
management of Multi-Protocol Label Switching (MPLS) Label | management of Multiprotocol Label Switching (MPLS) Label | |||
Distribution Protocol (LDP). It is also the base model to | Distribution Protocol (LDP). It is also the base model to | |||
be augmented for Multipoint LDP (mLDP). | be augmented for Multipoint LDP (mLDP). | |||
Copyright (c) 2020 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC 9070; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
// RFC Editor: replace XXXX with actual RFC number and remove | revision 2022-03-7 { | |||
// this note | ||||
revision 2020-02-25 { | ||||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: YANG Data Model for MPLS LDP."; | "RFC 9070: YANG Data Model for MPLS LDP"; | |||
// RFC Editor: replace XXXX with actual RFC number and remove | ||||
// this note | ||||
} | } | |||
/* | /* | |||
* Typedefs | * Typedefs | |||
*/ | */ | |||
typedef advertised-received { | typedef advertised-received { | |||
type enumeration { | type enumeration { | |||
enum advertised { | enum advertised { | |||
description "Advertised information."; | description | |||
"Advertised information."; | ||||
} | } | |||
enum received { | enum received { | |||
description "Received information."; | description | |||
"Received information."; | ||||
} | } | |||
} | } | |||
description | description | |||
"Received or advertised."; | "Received or advertised."; | |||
} | } | |||
typedef downstream-upstream { | typedef downstream-upstream { | |||
type enumeration { | type enumeration { | |||
enum downstream { | enum downstream { | |||
description "Downstream information."; | description | |||
"Downstream information."; | ||||
} | } | |||
enum upstream { | enum upstream { | |||
description "Upstream information."; | description | |||
"Upstream information."; | ||||
} | } | |||
} | } | |||
description | description | |||
"Downstream or upstream."; | "Downstream or upstream."; | |||
} | } | |||
typedef label-adv-mode { | typedef label-adv-mode { | |||
type enumeration { | type enumeration { | |||
enum downstream-unsolicited { | enum downstream-unsolicited { | |||
description "Downstream Unsolicited."; | description | |||
"Downstream Unsolicited."; | ||||
} | } | |||
enum downstream-on-demand { | enum downstream-on-demand { | |||
description "Downstream on Demand."; | description | |||
"Downstream on Demand."; | ||||
} | } | |||
} | } | |||
description | description | |||
"Label Advertisement Mode."; | "Label Advertisement Mode."; | |||
} | } | |||
typedef oper-status-event-type { | typedef oper-status-event-type { | |||
type enumeration { | type enumeration { | |||
enum up { | enum up { | |||
value 1; | value 1; | |||
skipping to change at page 31, line 4 ¶ | skipping to change at line 1385 ¶ | |||
type enumeration { | type enumeration { | |||
enum up { | enum up { | |||
value 1; | value 1; | |||
description | description | |||
"Operational status changed to up."; | "Operational status changed to up."; | |||
} | } | |||
enum down { | enum down { | |||
value 2; | value 2; | |||
description | description | |||
"Operational status changed to down."; | "Operational status changed to down."; | |||
} | } | |||
} | } | |||
description "Operational status event type for notifications."; | description | |||
"Operational status event type for notifications."; | ||||
} | } | |||
/* | /* | |||
* Identities | * Identities | |||
*/ | */ | |||
identity mpls-ldp { | identity mpls-ldp { | |||
base rt:control-plane-protocol; | base rt:control-plane-protocol; | |||
description | description | |||
"LDP protocol."; | "LDP protocol."; | |||
reference | reference | |||
"RFC 5036: LDP Specification"; | "RFC 5036: LDP Specification"; | |||
} | } | |||
identity adjacency-flag-base { | identity adjacency-flag-base { | |||
description "Base type for adjacency flags."; | description | |||
"Base type for adjacency flags."; | ||||
} | } | |||
identity adjacency-flag-active { | identity adjacency-flag-active { | |||
base adjacency-flag-base; | base adjacency-flag-base; | |||
description | description | |||
"This adjacency is configured and actively created."; | "This adjacency is configured and actively created."; | |||
} | } | |||
identity adjacency-flag-passive { | identity adjacency-flag-passive { | |||
base adjacency-flag-base; | base adjacency-flag-base; | |||
skipping to change at page 31, line 44 ¶ | skipping to change at line 1427 ¶ | |||
"This adjacency is not configured and passively accepted."; | "This adjacency is not configured and passively accepted."; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping adjacency-state-attributes { | grouping adjacency-state-attributes { | |||
description | description | |||
"The operational state attributes of an LDP Hello adjacency, | "The operational state attributes of an LDP Hello adjacency, | |||
which can used for basic and extended discoveris, in IPv4 and | which can used for basic and extended discoveries, in IPv4 and | |||
IPv6 address families."; | IPv6 address families."; | |||
leaf-list flag { | leaf-list flag { | |||
type identityref { | type identityref { | |||
base adjacency-flag-base; | base adjacency-flag-base; | |||
} | } | |||
description | description | |||
"On or more flags to indicate whether the adjacency is | "One or more flags to indicate whether the adjacency is | |||
actively created, passively accepted, or both."; | actively created, passively accepted, or both."; | |||
} | } | |||
container hello-holdtime { | container hello-holdtime { | |||
description | description | |||
"Containing Hello holdtime state information."; | "Containing Hello holdtime state information."; | |||
leaf adjacent { | leaf adjacent { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The holdtime value learned from the adjacent LSR."; | "The holdtime value learned from the adjacent LSR."; | |||
} | } | |||
leaf negotiated { | leaf negotiated { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The holdtime negotiated between this LSR and the adjacent | "The holdtime negotiated between this LSR and the adjacent | |||
LSR."; | LSR."; | |||
} | } | |||
leaf remaining { | leaf remaining { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The time remaining until the holdtime timer expires."; | "The time remaining until the holdtime timer expires."; | |||
} | } | |||
} | } | |||
leaf next-hello { | leaf next-hello { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The time when the next Hello message will be sent."; | "The time when the next Hello message will be sent."; | |||
} | } | |||
container statistics { | container statistics { | |||
description | description | |||
"Statistics objects."; | "Statistics objects."; | |||
leaf discontinuity-time { | leaf discontinuity-time { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The time on the most recent occasion at which any one or | "The time on the most recent occasion at which any one or | |||
more of this interface's counters suffered a | more of this interface's counters suffered a | |||
discontinuity. If no such discontinuities have occurred | discontinuity. If no such discontinuities have occurred | |||
since the last re-initialization of the local management | since the last re-initialization of the local management | |||
subsystem, then this node contains the time the local | subsystem, then this node contains the time the local | |||
management subsystem re-initialized itself."; | management subsystem re-initialized itself."; | |||
skipping to change at page 33, line 21 ¶ | skipping to change at line 1497 ¶ | |||
description | description | |||
"The number of Hello messages dropped."; | "The number of Hello messages dropped."; | |||
} | } | |||
} // statistics | } // statistics | |||
} // adjacency-state-attributes | } // adjacency-state-attributes | |||
grouping basic-discovery-timers { | grouping basic-discovery-timers { | |||
description | description | |||
"The timer attributes for basic discovery, used in the | "The timer attributes for basic discovery, used in the | |||
per-interface setting and in the all-interface setting."; | per-interface setting and in the all-interface setting."; | |||
leaf hello-holdtime { | leaf hello-holdtime { | |||
type uint16 { | type uint16 { | |||
range 15..3600; | range "15..3600"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The time interval for which a LDP link Hello adjacency | "The time interval for which an LDP link Hello adjacency | |||
is maintained in the absence of link Hello messages from | is maintained in the absence of link Hello messages from | |||
the LDP neighbor. | the LDP neighbor. | |||
This leaf may be configured at the per-interface level or | This leaf may be configured at the per-interface level or | |||
the global level, with precedence given to the value at the | the global level, with precedence given to the value at the | |||
per-interface level. If the leaf is not configured at | per-interface level. If the leaf is not configured at | |||
either level, the default value at the global level is | either level, the default value at the global level is | |||
used."; | used."; | |||
} | } | |||
leaf hello-interval { | leaf hello-interval { | |||
type uint16 { | type uint16 { | |||
range 5..1200; | range "5..1200"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The interval between consecutive LDP link Hello messages | "The interval between consecutive LDP link Hello messages | |||
used in basic LDP discovery. | used in basic LDP discovery. | |||
This leaf may be configured at the per-interface level or | This leaf may be configured at the per-interface level or | |||
the global level, with precedence given to the value at the | the global level, with precedence given to the value at the | |||
per-interface level. If the leaf is not configured at | per-interface level. If the leaf is not configured at | |||
either level, the default value at the global level is | either level, the default value at the global level is | |||
used."; | used."; | |||
} | } | |||
} // basic-discovery-timers | } // basic-discovery-timers | |||
skipping to change at page 34, line 4 ¶ | skipping to change at line 1527 ¶ | |||
description | description | |||
"The interval between consecutive LDP link Hello messages | "The interval between consecutive LDP link Hello messages | |||
used in basic LDP discovery. | used in basic LDP discovery. | |||
This leaf may be configured at the per-interface level or | This leaf may be configured at the per-interface level or | |||
the global level, with precedence given to the value at the | the global level, with precedence given to the value at the | |||
per-interface level. If the leaf is not configured at | per-interface level. If the leaf is not configured at | |||
either level, the default value at the global level is | either level, the default value at the global level is | |||
used."; | used."; | |||
} | } | |||
} // basic-discovery-timers | } // basic-discovery-timers | |||
grouping binding-address-state-attributes { | grouping binding-address-state-attributes { | |||
description | description | |||
"Operational state attributes of an address binding, used in | "Operational state attributes of an address binding, used in | |||
IPv4 and IPv6 address families."; | IPv4 and IPv6 address families."; | |||
leaf advertisement-type { | leaf advertisement-type { | |||
type advertised-received; | type advertised-received; | |||
description | description | |||
"Received or advertised."; | "Received or advertised."; | |||
} | } | |||
container peer { | container peer { | |||
when "../advertisement-type = 'received'" { | when "../advertisement-type = 'received'" { | |||
description | description | |||
"Applicable for received address."; | "Applicable for received address."; | |||
} | } | |||
description | description | |||
"LDP peer from which this address is received."; | "LDP peer from which this address is received."; | |||
uses ldp-peer-ref-from-binding; | uses ldp-peer-ref-from-binding; | |||
} | } | |||
} // binding-address-state-attributes | } // binding-address-state-attributes | |||
grouping binding-label-state-attributes { | grouping binding-label-state-attributes { | |||
description | description | |||
"Operational state attributes for a FEC-label binding, used in | "Operational state attributes for a FEC-Label binding, used in | |||
IPv4 and IPv6 address families."; | IPv4 and IPv6 address families."; | |||
list peer { | list peer { | |||
key "lsr-id label-space-id advertisement-type"; | key "lsr-id label-space-id advertisement-type"; | |||
description | description | |||
"List of advertised and received peers."; | "List of advertised and received peers."; | |||
uses ldp-peer-ref-from-binding { | uses ldp-peer-ref-from-binding { | |||
description | description | |||
"The LDP peer from which this binding is received, or to | "The LDP peer from which this binding is received, or to | |||
which this binding is advertised. | which this binding is advertised. | |||
The peer is identified by its LDP ID, which consists of | The peer is identified by its LDP ID, which consists of | |||
the LSR ID and the Label Space ID."; | the LSR Id and the label space Id."; | |||
} | } | |||
leaf advertisement-type { | leaf advertisement-type { | |||
type advertised-received; | type advertised-received; | |||
description | description | |||
"Received or advertised."; | "Received or advertised."; | |||
} | } | |||
leaf label { | leaf label { | |||
type rt-types:mpls-label; | type rt-types:mpls-label; | |||
description | description | |||
"Advertised (outbound) or received (inbound) | "Advertised (outbound) or received (inbound) | |||
skipping to change at page 35, line 14 ¶ | skipping to change at line 1584 ¶ | |||
leaf used-in-forwarding { | leaf used-in-forwarding { | |||
type boolean; | type boolean; | |||
description | description | |||
"'true' if the label is used in forwarding."; | "'true' if the label is used in forwarding."; | |||
} | } | |||
} // peer | } // peer | |||
} // binding-label-state-attributes | } // binding-label-state-attributes | |||
grouping graceful-restart-attributes-per-peer { | grouping graceful-restart-attributes-per-peer { | |||
description | description | |||
"Per peer graceful restart attributes. | "Per-peer graceful restart attributes. | |||
On the local side, these attributes are configuration and | On the local side, these attributes are configuration and | |||
operational state data. One the peer side, these attributes | operational state data. On the peer side, these attributes | |||
are operational state data received from the peer."; | are operational state data received from the peer."; | |||
container graceful-restart { | container graceful-restart { | |||
description | description | |||
"Attributes for graceful restart."; | "Attributes for graceful restart."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
description | description | |||
"Enable or disable graceful restart. | "Enable or disable graceful restart. | |||
This leaf may be configured at the per-peer level or the | This leaf may be configured at the per-peer level or the | |||
global level, with precedence given to the value at the | global level, with precedence given to the value at the | |||
per-peer level. If the leaf is not configured at either | per-peer level. If the leaf is not configured at either | |||
level, the default value at the global level is used."; | level, the default value at the global level is used."; | |||
} | } | |||
leaf reconnect-time { | leaf reconnect-time { | |||
type uint16 { | type uint16 { | |||
range 10..1800; | range "10..1800"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"Specifies the time interval that the remote LDP peer | "Specifies the time interval that the remote LDP peer | |||
must wait for the local LDP peer to reconnect after the | must wait for the local LDP peer to reconnect after the | |||
remote peer detects the LDP communication failure. | remote peer detects the LDP communication failure. | |||
This leaf may be configured at the per-peer level or the | This leaf may be configured at the per-peer level or the | |||
global level, with precedence given to the value at the | global level, with precedence given to the value at the | |||
per-peer level. If the leaf is not configured at either | per-peer level. If the leaf is not configured at either | |||
level, the default value at the global level is used."; | level, the default value at the global level is used."; | |||
} | } | |||
leaf recovery-time { | leaf recovery-time { | |||
type uint16 { | type uint16 { | |||
range 30..3600; | range "30..3600"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"Specifies the time interval, in seconds, that the remote | "Specifies the time interval, in seconds, that the remote | |||
LDP peer preserves its MPLS forwarding state after | LDP peer preserves its MPLS forwarding state after | |||
receiving the Initialization message from the restarted | receiving the Initialization message from the restarted | |||
local LDP peer. | local LDP peer. | |||
This leaf may be configured at the per-peer level or the | This leaf may be configured at the per-peer level or the | |||
global level, with precedence given to the value at the | global level, with precedence given to the value at the | |||
per-peer level. If the leaf is not configured at either | per-peer level. If the leaf is not configured at either | |||
level, the default value at the global level is used."; | level, the default value at the global level is used."; | |||
} | } | |||
} // graceful-restart | } // graceful-restart | |||
} // graceful-restart-attributes-per-peer | } // graceful-restart-attributes-per-peer | |||
grouping ldp-interface-ref { | grouping ldp-interface-ref { | |||
description | description | |||
"Defining a reference to LDP interface."; | "Defining a reference to an LDP interface."; | |||
leaf name { | leaf name { | |||
type if:interface-ref; | type if:interface-ref; | |||
must "(/if:interfaces/if:interface[if:name=current()]/ip:ipv4)" | must '(/if:interfaces/if:interface[if:name=current()]/ip:ipv4)' | |||
+ " or " | + ' or ' | |||
+ "(/if:interfaces/if:interface[if:name=current()]/ip:ipv6)" | + '(/if:interfaces/if:interface[if:name=current()]/ip:ipv6)' | |||
{ | { | |||
description "Interface is IPv4 or IPv6."; | description | |||
"Interface is IPv4 or IPv6."; | ||||
} | } | |||
description | description | |||
"The name of an LDP interface."; | "The name of an LDP interface."; | |||
} | } | |||
} | } | |||
grouping ldp-peer-ref-absolute { | grouping ldp-peer-ref-absolute { | |||
description | description | |||
"An absolute reference to an LDP peer, by the LDP ID, which | "An absolute reference to an LDP peer, by the LDP ID, which | |||
consists of the LSR ID and the Label Space ID."; | consists of the LSR Id and the label space Id."; | |||
leaf protocol-name { | leaf protocol-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/rt:name"; | + "rt:control-plane-protocol/rt:name"; | |||
} | } | |||
description | description | |||
"The name of the LDP protocol instance."; | "The name of the LDP protocol instance."; | |||
} | } | |||
leaf lsr-id { | leaf lsr-id { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol" | + "rt:control-plane-protocol" | |||
+ "[rt:name=current()/../protocol-name]/" | + "[rt:name=current()/../protocol-name]/" | |||
+ "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:lsr-id"; | + "ldp:mpls-ldp/ldp:peers/ldp:peer/ldp:lsr-id"; | |||
} | } | |||
description | description | |||
"The LSR ID of the peer, as a portion of the peer LDP ID."; | "The LSR Id of the peer, as a portion of the peer LDP ID."; | |||
} | } | |||
leaf label-space-id { | leaf label-space-id { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol" | + "rt:control-plane-protocol" | |||
+ "[rt:name=current()/../protocol-name]/" | + "[rt:name=current()/../protocol-name]/" | |||
+ "ldp:mpls-ldp/ldp:peers/" | + "ldp:mpls-ldp/ldp:peers/" | |||
+ "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | + "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | |||
+ "ldp:label-space-id"; | + "ldp:label-space-id"; | |||
} | } | |||
description | description | |||
"The Label Space ID of the peer, as a portion of the peer | "The label space Id of the peer, as a portion of the peer | |||
LDP ID."; | LDP ID."; | |||
} | } | |||
} // ldp-peer-ref-absolute | } // ldp-peer-ref-absolute | |||
grouping ldp-peer-ref-from-binding { | grouping ldp-peer-ref-from-binding { | |||
description | description | |||
"A relative reference to an LDP peer, by the LDP ID, which | "A relative reference to an LDP peer, by the LDP ID, which | |||
consists of the LSR ID and the Label Space ID."; | consists of the LSR Id and the label space Id."; | |||
leaf lsr-id { | leaf lsr-id { | |||
type leafref { | type leafref { | |||
path "../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; | path "../../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; | |||
} | } | |||
description | description | |||
"The LSR ID of the peer, as a portion of the peer LDP ID."; | "The LSR Id of the peer, as a portion of the peer LDP ID."; | |||
} | } | |||
leaf label-space-id { | leaf label-space-id { | |||
type leafref { | type leafref { | |||
path "../../../../../../../ldp:peers/" | path "../../../../../../../ldp:peers/" | |||
+ "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | + "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | |||
+ "ldp:label-space-id"; | + "ldp:label-space-id"; | |||
} | } | |||
description | description | |||
"The Label Space ID of the peer, as a portion of the peer | "The label space Id of the peer, as a portion of the peer | |||
LDP ID."; | LDP ID."; | |||
} | } | |||
} // ldp-peer-ref-from-binding | } // ldp-peer-ref-from-binding | |||
grouping ldp-peer-ref-from-interface { | grouping ldp-peer-ref-from-interface { | |||
description | description | |||
"A relative reference to an LDP peer, by the LDP ID, which | "A relative reference to an LDP peer, by the LDP ID, which | |||
consists of the LSR ID and the Label Space ID."; | consists of the LSR Id and the label space Id."; | |||
container peer { | container peer { | |||
description | description | |||
"Reference to an LDP peer, by the LDP ID, which consists of | "Reference to an LDP peer, by the LDP ID, which consists of | |||
the LSR ID and the Label Space ID."; | the LSR Id and the label space Id."; | |||
leaf lsr-id { | leaf lsr-id { | |||
type leafref { | type leafref { | |||
path "../../../../../../../../../ldp:peers/ldp:peer/" | path "../../../../../../../../../ldp:peers/ldp:peer/" | |||
+ "ldp:lsr-id"; | + "ldp:lsr-id"; | |||
} | } | |||
description | description | |||
"The LSR ID of the peer, as a portion of the peer LDP ID."; | "The LSR Id of the peer, as a portion of the peer LDP ID."; | |||
} | } | |||
leaf label-space-id { | leaf label-space-id { | |||
type leafref { | type leafref { | |||
path "../../../../../../../../../ldp:peers/" | path "../../../../../../../../../ldp:peers/" | |||
+ "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | + "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | |||
+ "ldp:label-space-id"; | + "ldp:label-space-id"; | |||
} | } | |||
description | description | |||
"The Label Space ID of the peer, as a portion of the peer | "The label space Id of the peer, as a portion of the peer | |||
LDP ID."; | LDP ID."; | |||
} | } | |||
} // peer | } // peer | |||
} // ldp-peer-ref-from-interface | } // ldp-peer-ref-from-interface | |||
grouping ldp-peer-ref-from-target { | grouping ldp-peer-ref-from-target { | |||
description | description | |||
"A relative reference to an LDP peer, by the LDP ID, which | "A relative reference to an LDP peer, by the LDP ID, which | |||
consists of the LSR ID and the Label Space ID."; | consists of the LSR Id and the label space Id."; | |||
container peer { | container peer { | |||
description | description | |||
"Reference to an LDP peer, by the LDP ID, which consists of | "Reference to an LDP peer, by the LDP ID, which consists of | |||
the LSR ID and the Label Space ID."; | the LSR Id and the label space Id."; | |||
leaf lsr-id { | leaf lsr-id { | |||
type leafref { | type leafref { | |||
path "../../../../../../../../ldp:peers/ldp:peer/" | path "../../../../../../../../ldp:peers/ldp:peer/" | |||
+ "ldp:lsr-id"; | + "ldp:lsr-id"; | |||
} | } | |||
description | description | |||
"The LSR ID of the peer, as a portion of the peer LDP ID."; | "The LSR Id of the peer, as a portion of the peer LDP ID."; | |||
} | } | |||
leaf label-space-id { | leaf label-space-id { | |||
type leafref { | type leafref { | |||
path "../../../../../../../../ldp:peers/" | path "../../../../../../../../ldp:peers/" | |||
+ "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | + "ldp:peer[ldp:lsr-id=current()/../lsr-id]/" | |||
+ "ldp:label-space-id"; | + "ldp:label-space-id"; | |||
} | } | |||
description | description | |||
"The Label Space ID of the peer, as a portion of the peer | "The label space Id of the peer, as a portion of the peer | |||
LDP ID."; | LDP ID."; | |||
} | } | |||
} // peer | } // peer | |||
} // ldp-peer-ref-from-target | } // ldp-peer-ref-from-target | |||
grouping peer-attributes { | grouping peer-attributes { | |||
description | description | |||
"Peer configuration attributes, used in the per-peer setting | "Peer configuration attributes, used in the per-peer setting | |||
can in the all-peer setting."; | can in the all-peer setting."; | |||
leaf session-ka-holdtime { | leaf session-ka-holdtime { | |||
type uint16 { | type uint16 { | |||
range 45..3600; | range "45..3600"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The time interval after which an inactive LDP session | "The time interval after which an inactive LDP session | |||
terminates and the corresponding TCP session closes. | terminates and the corresponding TCP session closes. | |||
Inactivity is defined as not receiving LDP packets from the | Inactivity is defined as not receiving LDP packets from the | |||
peer. | peer. | |||
This leaf may be configured at the per-peer level or the | This leaf may be configured at the per-peer level or the | |||
global level, with precedence given to the value at the | global level, with precedence given to the value at the | |||
per-peer level. If the leaf is not configured at either | per-peer level. If the leaf is not configured at either | |||
level, the default value at the global level is used."; | level, the default value at the global level is used."; | |||
} | } | |||
leaf session-ka-interval { | leaf session-ka-interval { | |||
type uint16 { | type uint16 { | |||
range 15..1200; | range "15..1200"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The interval between successive transmissions of keepalive | "The interval between successive transmissions of KeepAlive | |||
packets. Keepalive packets are only sent in the absence of | packets. Keepalive packets are only sent in the absence of | |||
other LDP packets transmitted over the LDP session. | other LDP packets transmitted over the LDP session. | |||
This leaf may be configured at the per-peer level or the | This leaf may be configured at the per-peer level or the | |||
global level, with precedence given to the value at the | global level, with precedence given to the value at the | |||
per-peer level. If the leaf is not configured at either | per-peer level. If the leaf is not configured at either | |||
level, the default value at the global level is used."; | level, the default value at the global level is used."; | |||
} | } | |||
} // peer-attributes | } // peer-attributes | |||
grouping peer-authentication { | grouping peer-authentication { | |||
description | description | |||
skipping to change at page 39, line 50 ¶ | skipping to change at line 1806 ¶ | |||
global level, with precedence given to the value at the | global level, with precedence given to the value at the | |||
per-peer level. If the leaf is not configured at either | per-peer level. If the leaf is not configured at either | |||
level, the default value at the global level is used."; | level, the default value at the global level is used."; | |||
} | } | |||
} // peer-attributes | } // peer-attributes | |||
grouping peer-authentication { | grouping peer-authentication { | |||
description | description | |||
"Peer authentication container, used in the per-peer setting | "Peer authentication container, used in the per-peer setting | |||
can in the all-peer setting."; | can in the all-peer setting."; | |||
container authentication { | container authentication { | |||
description | description | |||
"Containing authentication information."; | "Containing authentication information."; | |||
choice authentication-type { | choice authentication-type { | |||
description | description | |||
"Choice of authentication."; | "Choice of authentication."; | |||
case password { | case password { | |||
leaf key { | leaf key { | |||
type string; | type string; | |||
description | description | |||
"This leaf specifies the authentication key. The length | "This leaf specifies the authentication key. The | |||
of the key may be dependent on the cryptographic | length of the key may be dependent on the | |||
algorithm."; | cryptographic algorithm."; | |||
} | } | |||
leaf crypto-algorithm { | leaf crypto-algorithm { | |||
type identityref { | type identityref { | |||
base key-chain:crypto-algorithm; | base key-chain:crypto-algorithm; | |||
} | } | |||
description | description | |||
"Cryptographic algorithm associated with key."; | "Cryptographic algorithm associated with key."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} // peer-authentication | } // peer-authentication | |||
grouping peer-state-derived { | grouping peer-state-derived { | |||
description | description | |||
"The peer state information derived from the LDP protocol | "The peer state information derived from the LDP protocol | |||
operations."; | operations."; | |||
container label-advertisement-mode { | container label-advertisement-mode { | |||
config false; | config false; | |||
description "Label advertisement mode state."; | description | |||
"Label advertisement mode state."; | ||||
leaf local { | leaf local { | |||
type label-adv-mode; | type label-adv-mode; | |||
description | description | |||
"Local Label Advertisement Mode."; | "Local Label Advertisement Mode."; | |||
} | } | |||
leaf peer { | leaf peer { | |||
type label-adv-mode; | type label-adv-mode; | |||
description | description | |||
"Peer Label Advertisement Mode."; | "Peer Label Advertisement Mode."; | |||
} | } | |||
skipping to change at page 41, line 4 ¶ | skipping to change at line 1855 ¶ | |||
leaf peer { | leaf peer { | |||
type label-adv-mode; | type label-adv-mode; | |||
description | description | |||
"Peer Label Advertisement Mode."; | "Peer Label Advertisement Mode."; | |||
} | } | |||
leaf negotiated { | leaf negotiated { | |||
type label-adv-mode; | type label-adv-mode; | |||
description | description | |||
"Negotiated Label Advertisement Mode."; | "Negotiated Label Advertisement Mode."; | |||
} | } | |||
} | } | |||
leaf next-keep-alive { | leaf next-keep-alive { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
config false; | config false; | |||
description | description | |||
"Time duration from now until sending the next KeepAlive | "Time duration from now until sending the next KeepAlive | |||
message."; | message."; | |||
} | } | |||
container received-peer-state { | container received-peer-state { | |||
config false; | config false; | |||
description | description | |||
"Operational state information learned from the peer."; | "Operational state information learned from the peer."; | |||
uses graceful-restart-attributes-per-peer; | uses graceful-restart-attributes-per-peer; | |||
container capability { | container capability { | |||
description "Peer capability information."; | description | |||
"Peer capability information."; | ||||
container end-of-lib { | container end-of-lib { | |||
description | description | |||
"Peer's end-of-lib capability."; | "Peer's end-of-lib capability."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
description | description | |||
"'true' if peer's end-of-lib capability is enabled."; | "'true' if peer's end-of-lib capability is enabled."; | |||
} | } | |||
} | } | |||
container typed-wildcard-fec { | container typed-wildcard-fec { | |||
skipping to change at page 42, line 4 ¶ | skipping to change at line 1901 ¶ | |||
container upstream-label-assignment { | container upstream-label-assignment { | |||
description | description | |||
"Peer's upstream label assignment capability."; | "Peer's upstream label assignment capability."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
description | description | |||
"'true' if peer's upstream label assignment is | "'true' if peer's upstream label assignment is | |||
enabled."; | enabled."; | |||
} | } | |||
} | } | |||
} // capability | } // capability | |||
} // received-peer-state | } // received-peer-state | |||
container session-holdtime { | container session-holdtime { | |||
config false; | config false; | |||
description "Session holdtime state."; | description | |||
"Session holdtime state."; | ||||
leaf peer { | leaf peer { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
description "Peer holdtime."; | description | |||
"Peer holdtime."; | ||||
} | } | |||
leaf negotiated { | leaf negotiated { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
description "Negotiated holdtime."; | description | |||
"Negotiated holdtime."; | ||||
} | } | |||
leaf remaining { | leaf remaining { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
description "Remaining holdtime."; | description | |||
"Remaining holdtime."; | ||||
} | } | |||
} // session-holdtime | } // session-holdtime | |||
leaf session-state { | leaf session-state { | |||
type enumeration { | type enumeration { | |||
enum non-existent { | enum non-existent { | |||
description "NON EXISTENT state. Transport disconnected."; | description | |||
"NON EXISTENT state. Transport disconnected."; | ||||
} | } | |||
enum initialized { | enum initialized { | |||
description "INITIALIZED state."; | description | |||
"INITIALIZED state."; | ||||
} | } | |||
enum openrec { | enum openrec { | |||
description "OPENREC state."; | description | |||
"OPENREC state."; | ||||
} | } | |||
enum opensent { | enum opensent { | |||
description "OPENSENT state."; | description | |||
"OPENSENT state."; | ||||
} | } | |||
enum operational { | enum operational { | |||
description "OPERATIONAL state."; | description | |||
"OPERATIONAL state."; | ||||
} | } | |||
} | } | |||
config false; | config false; | |||
description | description | |||
"Representing the operational status of the LDP session."; | "Representing the operational status of the LDP session."; | |||
reference | reference | |||
"RFC5036, Sec. 2.5.4."; | "RFC 5036: LDP Specification, Sec. 2.5.4."; | |||
} | } | |||
container tcp-connection { | container tcp-connection { | |||
config false; | config false; | |||
description "TCP connection state."; | description | |||
"TCP connection state."; | ||||
leaf local-address { | leaf local-address { | |||
type inet:ip-address; | type inet:ip-address; | |||
description "Local address."; | description | |||
"Local address."; | ||||
} | } | |||
leaf local-port { | leaf local-port { | |||
type inet:port-number; | type inet:port-number; | |||
description "Local port number."; | description | |||
"Local port number."; | ||||
} | } | |||
leaf remote-address { | leaf remote-address { | |||
type inet:ip-address; | type inet:ip-address; | |||
description "Remote address."; | description | |||
"Remote address."; | ||||
} | } | |||
leaf remote-port { | leaf remote-port { | |||
type inet:port-number; | type inet:port-number; | |||
description "Remote port number."; | description | |||
"Remote port number."; | ||||
} | } | |||
} // tcp-connection | } // tcp-connection | |||
leaf up-time { | leaf up-time { | |||
type rt-types:timeticks64; | type rt-types:timeticks64; | |||
config false; | config false; | |||
description | description | |||
"The number of time ticks (hundredths of a second) since the | "The number of time ticks (hundredths of a second) since the | |||
the state of the session with the peer changed to | state of the session with the peer changed to | |||
OPERATIONAL."; | OPERATIONAL."; | |||
} | } | |||
container statistics { | container statistics { | |||
config false; | config false; | |||
description | description | |||
"Statistics objects."; | "Statistics objects."; | |||
leaf discontinuity-time { | leaf discontinuity-time { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The time on the most recent occasion at which any one or | "The time on the most recent occasion at which any one or | |||
more of this interface's counters suffered a | more of this interface's counters suffered a | |||
discontinuity. If no such discontinuities have occurred | discontinuity. If no such discontinuities have occurred | |||
since the last re-initialization of the local management | since the last re-initialization of the local management | |||
subsystem, then this node contains the time the local | subsystem, then this node contains the time the local | |||
management subsystem re-initialized itself."; | management subsystem re-initialized itself."; | |||
skipping to change at page 43, line 50 ¶ | skipping to change at line 2003 ¶ | |||
type yang:date-and-time; | type yang:date-and-time; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The time on the most recent occasion at which any one or | "The time on the most recent occasion at which any one or | |||
more of this interface's counters suffered a | more of this interface's counters suffered a | |||
discontinuity. If no such discontinuities have occurred | discontinuity. If no such discontinuities have occurred | |||
since the last re-initialization of the local management | since the last re-initialization of the local management | |||
subsystem, then this node contains the time the local | subsystem, then this node contains the time the local | |||
management subsystem re-initialized itself."; | management subsystem re-initialized itself."; | |||
} | } | |||
container received { | container received { | |||
description "Inbound statistics."; | description | |||
"Inbound statistics."; | ||||
uses statistics-peer-received-sent; | uses statistics-peer-received-sent; | |||
} | } | |||
container sent { | container sent { | |||
description "Outbound statistics."; | description | |||
"Outbound statistics."; | ||||
uses statistics-peer-received-sent; | uses statistics-peer-received-sent; | |||
} | } | |||
leaf total-addresses { | leaf total-addresses { | |||
type uint32; | type uint32; | |||
description | description | |||
"The number of learned addresses."; | "The number of learned addresses."; | |||
} | } | |||
leaf total-labels { | leaf total-labels { | |||
type uint32; | type uint32; | |||
description | description | |||
"The number of learned labels."; | "The number of learned labels."; | |||
} | } | |||
skipping to change at page 44, line 46 ¶ | skipping to change at line 2047 ¶ | |||
"The total number of octets sent or received."; | "The total number of octets sent or received."; | |||
} | } | |||
leaf total-messages { | leaf total-messages { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of messages sent or received."; | "The number of messages sent or received."; | |||
} | } | |||
leaf address { | leaf address { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of address messages sent or received."; | "The number of Address messages sent or received."; | |||
} | } | |||
leaf address-withdraw { | leaf address-withdraw { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of address-withdraw messages sent or received."; | "The number of address-withdraw messages sent or received."; | |||
} | } | |||
leaf initialization { | leaf initialization { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of initialization messages sent or received."; | "The number of Initialization messages sent or received."; | |||
} | } | |||
leaf keepalive { | leaf keepalive { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of keepalive messages sent or received."; | "The number of KeepAlive messages sent or received."; | |||
} | } | |||
leaf label-abort-request { | leaf label-abort-request { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of label-abort-request messages sent or | "The number of label-abort-request messages sent or | |||
received."; | received."; | |||
} | } | |||
leaf label-mapping { | leaf label-mapping { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
skipping to change at page 46, line 9 ¶ | skipping to change at line 2105 ¶ | |||
} // statistics-peer-received-sent | } // statistics-peer-received-sent | |||
/* | /* | |||
* Configuration data and operational state data nodes | * Configuration data and operational state data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol" { | + "rt:control-plane-protocol" { | |||
when "derived-from-or-self(rt:type, 'ldp:mpls-ldp')" { | when "derived-from-or-self(rt:type, 'ldp:mpls-ldp')" { | |||
description | description | |||
"This augmentation is only valid for a control-plane | "This augmentation is only valid for a control plane | |||
protocol instance of LDP (type 'mpls-ldp')."; | protocol instance of LDP (type 'mpls-ldp')."; | |||
} | } | |||
description | description | |||
"LDP augmentation to routing control-plane protocol | "LDP augmentation to routing control plane protocol | |||
configuration and state."; | configuration and state."; | |||
container mpls-ldp { | container mpls-ldp { | |||
must "not (../../rt:control-plane-protocol" | must "not (../../rt:control-plane-protocol" | |||
+ "[derived-from-or-self(rt:type, 'ldp:mpls-ldp')]" | + "[derived-from-or-self(rt:type, 'ldp:mpls-ldp')]" | |||
+ "[rt:name!=current()/../rt:name])" | + "[rt:name!=current()/../rt:name])" { | |||
{ | description | |||
description "Only one LDP instance is allowed."; | "Only one LDP instance is allowed."; | |||
} | } | |||
description | description | |||
"Containing configuration and operational data for the LDP | "Containing configuration and operational data for the LDP | |||
protocol."; | protocol."; | |||
container global { | container global { | |||
description | description | |||
"Global attributes for LDP."; | "Global attributes for LDP."; | |||
container capability { | container capability { | |||
description | description | |||
"Containing the LDP capability data. The container is | "Containing the LDP capability data. The container is | |||
used for augmentations."; | used for augmentations."; | |||
reference | reference | |||
"RFC5036: Sec. 1.5."; | "RFC 5036: LDP Specification, Sec. 1.5."; | |||
} | } | |||
container graceful-restart { | container graceful-restart { | |||
description | description | |||
"Attributes for graceful restart."; | "Attributes for graceful restart."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"Enable or disable graceful restart."; | "Enable or disable graceful restart."; | |||
} | } | |||
leaf reconnect-time { | leaf reconnect-time { | |||
type uint16 { | type uint16 { | |||
range 10..1800; | range "10..1800"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
default 120; | default "120"; | |||
description | description | |||
"Specifies the time interval that the remote LDP peer | "Specifies the time interval that the remote LDP peer | |||
must wait for the local LDP peer to reconnect after | must wait for the local LDP peer to reconnect after | |||
the remote peer detects the LDP communication | the remote peer detects the LDP communication | |||
failure."; | failure."; | |||
} | } | |||
leaf recovery-time { | leaf recovery-time { | |||
type uint16 { | type uint16 { | |||
range 30..3600; | range "30..3600"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
default 120; | default "120"; | |||
description | description | |||
"Specifies the time interval, in seconds, that the | "Specifies the time interval, in seconds, that the | |||
remote LDP peer preserves its MPLS forwarding state | remote LDP peer preserves its MPLS forwarding state | |||
after receiving the Initialization message from the | after receiving the Initialization message from the | |||
restarted local LDP peer."; | restarted local LDP peer."; | |||
} | } | |||
leaf forwarding-holdtime { | leaf forwarding-holdtime { | |||
type uint16 { | type uint16 { | |||
range 30..3600; | range "30..3600"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
default 180; | default "180"; | |||
description | description | |||
"Specifies the time interval, in seconds, before the | "Specifies the time interval, in seconds, before the | |||
termination of the recovery phase."; | termination of the recovery phase."; | |||
} | } | |||
} // graceful-restart | } // graceful-restart | |||
leaf lsr-id { | leaf lsr-id { | |||
type rt-types:router-id; | type rt-types:router-id; | |||
description | description | |||
"Specify the value to act as the LDP LSR ID. | "Specifies the value to act as the LDP LSR Id. | |||
If this attribute is not specified, LDP uses the router | If this attribute is not specified, LDP uses the router | |||
ID as determined by the system."; | ID as determined by the system."; | |||
} | } | |||
container address-families { | container address-families { | |||
description | description | |||
"Per address family confgiration and operational state. | "Per-address-family configuration and operational state. | |||
The address family can be either IPv4 or IPv6."; | The address family can be either IPv4 or IPv6."; | |||
container ipv4 { | container ipv4 { | |||
presence | presence "Present if IPv4 is enabled, unless the | |||
"Present if IPv4 is enabled, unless the 'enabled' | 'enabled' leaf is set to 'false'."; | |||
leaf is set to 'false'"; | ||||
description | description | |||
"Containing data related to the IPv4 address family."; | "Containing data related to the IPv4 address family."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"'false' to disable the address family."; | "'false' to disable the address family."; | |||
} | } | |||
leaf label-distribution-control-mode { | leaf label-distribution-control-mode { | |||
type enumeration { | type enumeration { | |||
enum independent { | enum independent { | |||
description | description | |||
"Independent label distribution control."; | "Independent label distribution control."; | |||
} | } | |||
enum ordered { | enum ordered { | |||
description | description | |||
"Ordered label distribution control."; | "Ordered label distribution control."; | |||
} | } | |||
} | } | |||
config false; | config false; | |||
description | description | |||
"Label distribution control mode."; | "Label distribution control mode."; | |||
reference | reference | |||
"RFC5036: LDP Specification. Sec 2.6."; | "RFC 5036: LDP Specification, Sec. 2.6."; | |||
} | } | |||
// ipv4 bindings | // ipv4 bindings | |||
container bindings { | container bindings { | |||
config false; | config false; | |||
description | description | |||
"LDP address and label binding information."; | "LDP address and label binding information."; | |||
list address { | list address { | |||
key "address"; | key "address"; | |||
description | description | |||
"List of address bindings learned by LDP."; | "List of address bindings learned by LDP."; | |||
leaf address { | leaf address { | |||
skipping to change at page 48, line 50 ¶ | skipping to change at line 2231 ¶ | |||
description | description | |||
"List of address bindings learned by LDP."; | "List of address bindings learned by LDP."; | |||
leaf address { | leaf address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"The IPv4 address learned from an Address | "The IPv4 address learned from an Address | |||
message received from or advertised to a peer."; | message received from or advertised to a peer."; | |||
} | } | |||
uses binding-address-state-attributes; | uses binding-address-state-attributes; | |||
} | } | |||
list fec-label { | list fec-label { | |||
key "fec"; | key "fec"; | |||
description | description | |||
"List of FEC-label bindings learned by LDP."; | "List of FEC-label bindings learned by LDP."; | |||
leaf fec { | leaf fec { | |||
type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
description | description | |||
"The prefix FEC value in the FEC-label binding, | "The prefix FEC value in the FEC-Label binding, | |||
learned in a Label Mapping message received from | learned in a Label Mapping message received from | |||
or advertised to a peer."; | or advertised to a peer."; | |||
} | } | |||
uses binding-label-state-attributes; | uses binding-label-state-attributes; | |||
} | } | |||
} // bindings | } // bindings | |||
} // ipv4 | } // ipv4 | |||
} // address-families | } // address-families | |||
} // global | } // global | |||
container discovery { | container discovery { | |||
description | description | |||
"Neighbor discovery configuration and operational state."; | "Neighbor-discovery configuration and operational state."; | |||
container interfaces { | container interfaces { | |||
description | description | |||
"A list of interfaces for LDP Basic Discovery."; | "A list of interfaces for LDP Basic Discovery."; | |||
reference | reference | |||
"RFC5036: LDP Specification. Sec 2.4.1."; | "RFC 5036: LDP Specification, Sec. 2.4.1."; | |||
uses basic-discovery-timers { | uses basic-discovery-timers { | |||
refine "hello-holdtime" { | refine "hello-holdtime" { | |||
default 15; | default "15"; | |||
} | } | |||
refine "hello-interval" { | refine "hello-interval" { | |||
default 5; | default "5"; | |||
} | } | |||
} | } | |||
list interface { | list interface { | |||
key "name"; | key "name"; | |||
description | description | |||
"List of LDP interfaces used for LDP Basic Discovery."; | "List of LDP interfaces used for LDP Basic Discovery."; | |||
uses ldp-interface-ref; | uses ldp-interface-ref; | |||
leaf next-hello { | leaf next-hello { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
config false; | config false; | |||
description "Time to send the next Hello message."; | description | |||
"Time to send the next Hello message."; | ||||
} | } | |||
container address-families { | container address-families { | |||
description | description | |||
"Container for address families."; | "Container for address families."; | |||
container ipv4 { | container ipv4 { | |||
presence | presence "Present if IPv4 is enabled, unless the | |||
"Present if IPv4 is enabled, unless the 'enabled' | 'enabled' leaf is set to 'false'."; | |||
leaf is set to 'false'"; | ||||
description | description | |||
"IPv4 address family."; | "IPv4 address family."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"Set to false to disable the address family on | "Set to false to disable the address family on | |||
the interface."; | the interface."; | |||
} | } | |||
container hello-adjacencies { | container hello-adjacencies { | |||
config false; | config false; | |||
description | description | |||
"Containing a list of Hello adjacencies."; | "Containing a list of Hello adjacencies."; | |||
list hello-adjacency { | list hello-adjacency { | |||
key "adjacent-address"; | key "adjacent-address"; | |||
config false; | config false; | |||
description "List of Hello adjacencies."; | description | |||
"List of Hello adjacencies."; | ||||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
uses adjacency-state-attributes; | uses adjacency-state-attributes; | |||
uses ldp-peer-ref-from-interface; | uses ldp-peer-ref-from-interface; | |||
} | } | |||
} | } | |||
} // ipv4 | } // ipv4 | |||
} // address-families | } // address-families | |||
} // interface | } // interface | |||
} // interfaces | } // interfaces | |||
container targeted { | ||||
container targeted | ||||
{ | ||||
description | description | |||
"A list of targeted neighbors for extended discovery."; | "A list of targeted neighbors for extended discovery."; | |||
leaf hello-holdtime { | leaf hello-holdtime { | |||
type uint16 { | type uint16 { | |||
range 15..3600; | range "15..3600"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
default 45; | default "45"; | |||
description | description | |||
"The time interval for which LDP targeted Hello | "The time interval for which an LDP targeted Hello | |||
adjacency is maintained in the absence of targeted | adjacency is maintained in the absence of targeted | |||
Hello messages from an LDP neighbor."; | Hello messages from an LDP neighbor."; | |||
} | } | |||
leaf hello-interval { | leaf hello-interval { | |||
type uint16 { | type uint16 { | |||
range 5..3600; | range "5..3600"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
default 15; | default "15"; | |||
description | description | |||
"The interval between consecutive LDP targeted Hello | "The interval between consecutive LDP targeted Hello | |||
messages used in extended LDP discovery."; | messages used in extended LDP discovery."; | |||
} | } | |||
container hello-accept { | container hello-accept { | |||
description | description | |||
"LDP policy to control the acceptance of extended | "LDP policy to control the acceptance of extended | |||
neighbor discovery Hello messages."; | neighbor-discovery Hello messages."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' to accept; 'false' to deny."; | "'true' to accept; 'false' to deny."; | |||
} | } | |||
} | } | |||
container address-families { | container address-families { | |||
description | description | |||
"Container for address families."; | "Container for address families."; | |||
container ipv4 { | container ipv4 { | |||
presence | presence "Present if IPv4 is enabled."; | |||
"Present if IPv4 is enabled."; | ||||
description | description | |||
"IPv4 address family."; | "IPv4 address family."; | |||
container hello-adjacencies { | container hello-adjacencies { | |||
config false; | config false; | |||
description | description | |||
"Containing a list of Hello adjacencies."; | "Containing a list of Hello adjacencies."; | |||
list hello-adjacency { | list hello-adjacency { | |||
key "local-address adjacent-address"; | key "local-address adjacent-address"; | |||
description "List of Hello adjacencies."; | description | |||
"List of Hello adjacencies."; | ||||
leaf local-address { | leaf local-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
skipping to change at page 52, line 19 ¶ | skipping to change at line 2373 ¶ | |||
leaf local-address { | leaf local-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
uses adjacency-state-attributes; | uses adjacency-state-attributes; | |||
uses ldp-peer-ref-from-target; | uses ldp-peer-ref-from-target; | |||
} | } | |||
} | } | |||
list target { | list target { | |||
key "adjacent-address"; | key "adjacent-address"; | |||
description | description | |||
"Targeted discovery params."; | "Targeted discovery params."; | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Configures a remote LDP neighbor for the | "Configures a remote LDP neighbor for the | |||
extended LDP discovery."; | extended LDP discovery."; | |||
} | } | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"'true' to enable the target."; | "'true' to enable the target."; | |||
} | } | |||
leaf local-address { | leaf local-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"The local address used as the source address to | "The local address used as the source address to | |||
send targeted Hello messages. | send targeted Hello messages. | |||
If the value is not specified, the | If the value is not specified, the | |||
transport-address is used as the source | transport address is used as the source | |||
address."; | address."; | |||
} | } | |||
} // target | } // target | |||
} // ipv4 | } // ipv4 | |||
} // address-families | } // address-families | |||
} // targeted | } // targeted | |||
} // discovery | } // discovery | |||
container peers { | container peers { | |||
description | description | |||
"Peers configuration attributes."; | "Peers configuration attributes."; | |||
uses peer-authentication; | uses peer-authentication; | |||
uses peer-attributes { | uses peer-attributes { | |||
refine session-ka-holdtime { | refine "session-ka-holdtime" { | |||
default 180; | default "180"; | |||
} | } | |||
refine session-ka-interval { | refine "session-ka-interval" { | |||
default 60; | default "60"; | |||
} | } | |||
} | } | |||
list peer { | list peer { | |||
key "lsr-id label-space-id"; | key "lsr-id label-space-id"; | |||
description | description | |||
"List of peers."; | "List of peers."; | |||
leaf lsr-id { | leaf lsr-id { | |||
type rt-types:router-id; | type rt-types:router-id; | |||
description | description | |||
"The LSR ID of the peer, to identify the globally | "The LSR Id of the peer, used to identify the globally | |||
unique LSR. This is the first four octets of the LDP | unique LSR. This is the first four octets of the LDP | |||
ID. This leaf is used together with the leaf | ID. This leaf is used together with the leaf | |||
'label-space-id' to form the LDP ID."; | 'label-space-id' to form the LDP ID."; | |||
reference | reference | |||
"RFC5036. Sec 2.2.2."; | "RFC 5036: LDP Specification, Sec. 2.2.2."; | |||
} | } | |||
leaf label-space-id { | leaf label-space-id { | |||
type uint16; | type uint16; | |||
description | description | |||
"The Label Space ID of the peer, to identify a specific | "The label space Id of the peer, used to identify a | |||
label space within the LSR. This is the last two | specific label space within the LSR. This is the last | |||
octets of the LDP ID. This leaf is used together with | two octets of the LDP ID. This leaf is used together | |||
the leaf 'lsr-id' to form the LDP ID."; | with the leaf 'lsr-id' to form the LDP ID."; | |||
reference | reference | |||
"RFC5036. Sec 2.2.2."; | "RFC 5036: LDP Specification, Sec. 2.2.2."; | |||
} | } | |||
uses peer-authentication; | uses peer-authentication; | |||
container address-families { | container address-families { | |||
description | description | |||
"Per-vrf per-af params."; | "Per-vrf per-af params."; | |||
container ipv4 { | container ipv4 { | |||
presence | presence "Present if IPv4 is enabled."; | |||
"Present if IPv4 is enabled."; | ||||
description | description | |||
"IPv4 address family."; | "IPv4 address family."; | |||
container hello-adjacencies { | container hello-adjacencies { | |||
config false; | config false; | |||
description | description | |||
"Containing a list of Hello adjacencies."; | "Containing a list of Hello adjacencies."; | |||
list hello-adjacency { | list hello-adjacency { | |||
key "local-address adjacent-address"; | key "local-address adjacent-address"; | |||
description "List of Hello adjacencies."; | description | |||
"List of Hello adjacencies."; | ||||
leaf local-address { | leaf local-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
skipping to change at page 54, line 31 ¶ | skipping to change at line 2469 ¶ | |||
leaf local-address { | leaf local-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
uses adjacency-state-attributes; | uses adjacency-state-attributes; | |||
leaf interface { | leaf interface { | |||
type if:interface-ref; | type if:interface-ref; | |||
description "Interface for this adjacency."; | description | |||
"Interface for this adjacency."; | ||||
} | } | |||
} | } | |||
} | } | |||
} // ipv4 | } // ipv4 | |||
} // address-families | } // address-families | |||
uses peer-state-derived; | uses peer-state-derived; | |||
} // list peer | } // list peer | |||
} // peers | } // peers | |||
} // container mpls-ldp | } // container mpls-ldp | |||
} | } | |||
/* | /* | |||
* RPCs | * RPCs | |||
*/ | */ | |||
rpc mpls-ldp-clear-peer { | rpc mpls-ldp-clear-peer { | |||
description | description | |||
"Clears the session to the peer."; | "Clears the session to the peer."; | |||
input { | input { | |||
uses ldp-peer-ref-absolute { | uses ldp-peer-ref-absolute { | |||
description | description | |||
"The LDP peer to be cleared. If this is not provided | "The LDP peer to be cleared. If this is not provided, | |||
then all peers are cleared. | then all peers are cleared. | |||
The peer is identified by its LDP ID, which consists of | The peer is identified by its LDP ID, which consists of | |||
the LSR ID and the Label Space ID."; | the LSR Id and the label space Id."; | |||
} | } | |||
} | } | |||
} | } | |||
rpc mpls-ldp-clear-hello-adjacency { | rpc mpls-ldp-clear-hello-adjacency { | |||
description | description | |||
"Clears the hello adjacency"; | "Clears the Hello adjacency."; | |||
input { | input { | |||
container hello-adjacency { | container hello-adjacency { | |||
description | description | |||
"Link adjacency or targettted adjacency. If this is not | "Link adjacency or targeted adjacency. If this is not | |||
provided then all Hello adjacencies are cleared"; | provided, then all Hello adjacencies are cleared."; | |||
leaf protocol-name { | leaf protocol-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/rt:name"; | + "rt:control-plane-protocol/rt:name"; | |||
} | } | |||
description | description | |||
"The name of the LDP protocol instance."; | "The name of the LDP protocol instance."; | |||
} | } | |||
choice hello-adjacency-type { | choice hello-adjacency-type { | |||
description "Adjacency type."; | description | |||
"Adjacency type."; | ||||
case targeted { | case targeted { | |||
container targeted { | container targeted { | |||
presence "Present to clear targeted adjacencies."; | presence "Present to clear targeted adjacencies."; | |||
description | description | |||
"Clear targeted adjacencies."; | "Clear targeted adjacencies."; | |||
leaf target-address { | leaf target-address { | |||
type inet:ip-address; | type inet:ip-address; | |||
description | description | |||
"The target address. If this is not provided then | "The target address. If this is not provided, then | |||
all targeted adjacencies are cleared"; | all targeted adjacencies are cleared."; | |||
} | } | |||
} | } | |||
} | } | |||
case link { | case link { | |||
container link { | container link { | |||
presence "Present to clear link adjacencies."; | presence "Present to clear link adjacencies."; | |||
description | description | |||
"Clear link adjacencies."; | "Clear link adjacencies."; | |||
leaf next-hop-interface { | leaf next-hop-interface { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/mpls-ldp/discovery/" | + "rt:control-plane-protocol/mpls-ldp/" | |||
+ "interfaces/interface/name"; | + "discovery/interfaces/interface/name"; | |||
} | } | |||
description | description | |||
"Interface connecting to next-hop. If this is not | "Interface connecting to a next hop. If this is | |||
provided then all link adjacencies are cleared."; | not provided, then all link adjacencies are | |||
cleared."; | ||||
} | } | |||
leaf next-hop-address { | leaf next-hop-address { | |||
type inet:ip-address; | type inet:ip-address; | |||
must "../next-hop-interface" { | must '../next-hop-interface' { | |||
description | description | |||
"Applicable when interface is specified."; | "Applicable when an interface is specified."; | |||
} | } | |||
description | description | |||
"IP address of next-hop. If this is not provided | "IP address of a next hop. If this is not | |||
then adjacencies to all next-hops on the given | provided, then adjacencies to all next hops on the | |||
interface are cleared."; | given interface are cleared."; | |||
} | } | |||
} | } | |||
} | } | |||
} // hello-adjacency-type | } // hello-adjacency-type | |||
} // hello-adjacency | } // hello-adjacency | |||
} // input | } // input | |||
} // mpls-ldp-clear-hello-adjacency | } // mpls-ldp-clear-hello-adjacency | |||
rpc mpls-ldp-clear-peer-statistics { | rpc mpls-ldp-clear-peer-statistics { | |||
description | description | |||
"Clears protocol statistics (e.g. sent and received | "Clears protocol statistics (e.g., sent and received | |||
counters)."; | counters)."; | |||
input { | input { | |||
uses ldp-peer-ref-absolute { | uses ldp-peer-ref-absolute { | |||
description | description | |||
"The LDP peer whose statistics are to be cleared. | "The LDP peer whose statistics are to be cleared. | |||
If this is not provided then all peers' statistics are | If this is not provided, then all peers' statistics are | |||
cleared. | cleared. | |||
The peer is identified by its LDP ID, which consists of | The peer is identified by its LDP ID, which consists of | |||
the LSR ID and the Label Space ID."; | the LSR Id and the label space Id."; | |||
} | } | |||
} | } | |||
} | } | |||
/* | /* | |||
* Notifications | * Notifications | |||
*/ | */ | |||
notification mpls-ldp-peer-event { | ||||
notification mpls-ldp-peer-event { | ||||
description | description | |||
"Notification event for a change of LDP peer operational | "Notification event for a change of LDP peer operational | |||
status."; | status."; | |||
leaf event-type { | leaf event-type { | |||
type oper-status-event-type; | type oper-status-event-type; | |||
description "Event type."; | description | |||
"Event type."; | ||||
} | } | |||
container peer { | container peer { | |||
description | description | |||
"Reference to an LDP peer, by the LDP ID, which consists of | "Reference to an LDP peer, by the LDP ID, which consists of | |||
the LSR ID and the Label Space ID."; | the LSR Id and the label space Id."; | |||
uses ldp-peer-ref-absolute; | uses ldp-peer-ref-absolute; | |||
} | } | |||
} | } | |||
notification mpls-ldp-hello-adjacency-event { | notification mpls-ldp-hello-adjacency-event { | |||
description | description | |||
"Notification event for a change of LDP adjacency operational | "Notification event for a change of LDP adjacency operational | |||
status."; | status."; | |||
leaf event-type { | leaf event-type { | |||
type oper-status-event-type; | type oper-status-event-type; | |||
description "Event type."; | description | |||
"Event type."; | ||||
} | } | |||
leaf protocol-name { | leaf protocol-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/rt:name"; | + "rt:control-plane-protocol/rt:name"; | |||
} | } | |||
description | description | |||
"The name of the LDP protocol instance."; | "The name of the LDP protocol instance."; | |||
} | } | |||
choice hello-adjacency-type { | choice hello-adjacency-type { | |||
description | description | |||
"Interface or targeted adjacency."; | "Interface or targeted adjacency."; | |||
case targeted { | case targeted { | |||
container targeted { | container targeted { | |||
description | description | |||
"Targeted adjacency through LDP extended discovery."; | "Targeted adjacency through LDP extended discovery."; | |||
leaf target-address { | leaf target-address { | |||
type inet:ip-address; | type inet:ip-address; | |||
description | description | |||
"The target adjacent address learned."; | "The target adjacent-address learned."; | |||
} | } | |||
} | } | |||
} | } | |||
case link { | case link { | |||
container link { | container link { | |||
description | description | |||
"Link adjacency through LDP basic discovery."; | "Link adjacency through LDP basic discovery."; | |||
leaf next-hop-interface { | leaf next-hop-interface { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"The interface connecting to the adjacent next hop."; | "The interface connecting to the adjacent next hop."; | |||
} | } | |||
leaf next-hop-address { | leaf next-hop-address { | |||
type inet:ip-address; | type inet:ip-address; | |||
must "../next-hop-interface" { | must '../next-hop-interface' { | |||
description | description | |||
"Applicable when interface is specified."; | "Applicable when an interface is specified."; | |||
} | } | |||
description | description | |||
"IP address of the next hop. This can be IPv4 or IPv6 | "IP address of the next hop. This can be IPv4 or IPv6 | |||
address."; | address."; | |||
} | } | |||
} | } | |||
} | } | |||
} // hello-adjacency-type | } // hello-adjacency-type | |||
} // mpls-ldp-hello-adjacency-event | } // mpls-ldp-hello-adjacency-event | |||
notification mpls-ldp-fec-event { | notification mpls-ldp-fec-event { | |||
description | description | |||
"Notification event for a change of FEC status."; | "Notification event for a change of FEC status."; | |||
leaf event-type { | leaf event-type { | |||
type oper-status-event-type; | type oper-status-event-type; | |||
description "Event type."; | description | |||
"Event type."; | ||||
} | } | |||
leaf protocol-name { | leaf protocol-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/rt:name"; | + "rt:control-plane-protocol/rt:name"; | |||
} | } | |||
description | description | |||
"The name of the LDP protocol instance."; | "The name of the LDP protocol instance."; | |||
} | } | |||
leaf fec { | leaf fec { | |||
type inet:ip-prefix; | type inet:ip-prefix; | |||
description | description | |||
"The address prefix element of the FEC whose status | "The address prefix element of the FEC whose status | |||
has changed."; | has changed."; | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Figure 10: LDP base module | Figure 10: LDP Base Module | |||
9.2. Extended | 9.2. Extended | |||
This YANG module imports types defined in [RFC6991], [RFC8349], | This YANG module imports types defined in [RFC5036], [RFC6991], | |||
[RFC8177], and [RFC8343]. | [RFC8349], [RFC8177], [RFC8343], and [RFC9067]. | |||
<CODE BEGINS> file "ietf-mpls-ldp-extended@2020-02-25.yang" | ||||
// RFC Editor: replace the above date 2020-02-25 with the date of | ||||
// publication and remove this note. | ||||
<CODE BEGINS> file "ietf-mpls-ldp-extended@2022-03-07.yang" | ||||
module ietf-mpls-ldp-extended { | module ietf-mpls-ldp-extended { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended"; | namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended"; | |||
prefix "ldp-ext"; | prefix ldp-ext; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix inet; | |||
reference "RFC 6991: Common YANG Data Types"; | reference | |||
"RFC 6991: Common YANG Data Types"; | ||||
} | } | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
version)"; | version)"; | |||
} | } | |||
import ietf-key-chain { | import ietf-key-chain { | |||
prefix "key-chain"; | prefix key-chain; | |||
reference "RFC 8177: YANG Data Model for Key Chains"; | reference | |||
"RFC 8177: YANG Data Model for Key Chains"; | ||||
} | } | |||
import ietf-mpls-ldp { | import ietf-mpls-ldp { | |||
prefix "ldp"; | prefix ldp; | |||
reference "RFC XXXX: YANG Data Model for MPLS LDP"; | reference | |||
// RFC Editor: replace XXXX with actual RFC number and remove | "RFC 9070: YANG Data Model for MPLS LDP"; | |||
// this note | ||||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix if; | |||
reference "RFC 8343: A YANG Data Model for Interface Management"; | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | ||||
} | } | |||
import ietf-routing-policy { | import ietf-routing-policy { | |||
prefix rt-pol; | prefix rt-pol; | |||
reference | reference | |||
"I-D.ietf-rtgwg-policy-model: A YANG Data Model for Routing | "RFC 9067: A YANG Data Model for Routing Policy"; | |||
Policy Management"; | ||||
} | } | |||
organization | organization | |||
"IETF MPLS Working Group"; | "IETF MPLS Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/mpls/> | "WG Web: <https://datatracker.ietf.org/wg/mpls/> | |||
WG List: <mailto:mpls@ietf.org> | WG List: <mailto:mpls@ietf.org> | |||
Editor: Kamran Raza | Editor: Kamran Raza | |||
<mailto:skraza@cisco.com> | <mailto:skraza@cisco.com> | |||
Editor: Rajiv Asati | Author: Rajiv Asati | |||
<mailto:rajiva@cisco.com> | <mailto:rajiva@cisco.com> | |||
Editor: Xufeng Liu | Author: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Santosh Esale | Author: Santosh Easale | |||
<mailto:sesale@juniper.net> | <mailto:santosh_easale@berkeley.edu> | |||
Editor: Xia Chen | Author: Xia Chen | |||
<mailto:jescia.chenxia@huawei.com> | <mailto:jescia.chenxia@huawei.com> | |||
Editor: Himanshu Shah | Author: Himanshu Shah | |||
<mailto:hshah@ciena.com>"; | <mailto:hshah@ciena.com>"; | |||
description | description | |||
"This YANG module defines the extended components for the | "This YANG module defines the extended components for the | |||
management of Multi-Protocol Label Switching (MPLS) Label | management of Multiprotocol Label Switching (MPLS) Label | |||
Distribution Protocol (LDP). It is also the model to | Distribution Protocol (LDP). It is also the model to | |||
be augmented for extended Multipoint LDP (mLDP). | be augmented for extended Multipoint LDP (mLDP). | |||
Copyright (c) 2020 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC 9070; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
// RFC Editor: replace XXXX with actual RFC number and remove | revision 2022-03-07 { | |||
// this note | ||||
revision 2020-02-25 { | ||||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: YANG Data Model for MPLS LDP."; | "RFC 9070: YANG Data Model for MPLS LDP"; | |||
// RFC Editor: replace XXXX with actual RFC number and remove | ||||
// this note | ||||
} | } | |||
/* | /* | |||
* Features | * Features | |||
*/ | */ | |||
feature capability-end-of-lib { | feature capability-end-of-lib { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
LDP end-of-lib capability."; | configuration of LDP end-of-lib capability."; | |||
} | } | |||
feature capability-typed-wildcard-fec { | feature capability-typed-wildcard-fec { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
LDP typed-wildcard-fec capability."; | configuration of LDP typed-wildcard-fec capability."; | |||
} | } | |||
feature capability-upstream-label-assignment { | feature capability-upstream-label-assignment { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
LDP upstream label assignment capability."; | configuration of LDP upstream label assignment capability."; | |||
} | } | |||
feature forwarding-nexthop-config { | feature forwarding-nexthop-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for controlling | |||
forwarding nexthop on interfaces."; | MPLS forwarding on an LDP interface."; | |||
} | } | |||
feature graceful-restart-helper-mode { | feature graceful-restart-helper-mode { | |||
description | description | |||
"This feature indicates that the system supports graceful | "This feature indicates that the system supports graceful | |||
restart helper mode. We call an LSR to be operating in GR | restart helper mode. We call an LSR to be operating in GR | |||
helper mode when it advertises 0 as its FT Reconnect Timeout | helper mode when it advertises 0 as its FT Reconnect Timeout | |||
in the FT Session TLV. | in the FT Session TLV. | |||
Please refer RFC3478 section 2 for details."; | Please refer to Section 2 of RFC 3478 for details."; | |||
} | } | |||
feature key-chain { | feature key-chain { | |||
description | description | |||
"This feature indicates that the system supports keychain for | "This feature indicates that the system supports key-chain for | |||
authentication."; | authentication."; | |||
} | } | |||
feature peers-dual-stack-transport-preference { | feature peers-dual-stack-transport-preference { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
the transport connection preference in a dual-stack setup | configuration of the transport connection preference in a | |||
for peers."; | dual-stack setup for peers."; | |||
} | } | |||
feature per-interface-timer-config { | feature per-interface-timer-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
interface Hello timers at the per-interface level."; | configuration of interface Hello timers at the per-interface | |||
level."; | ||||
} | } | |||
feature per-peer-admin-down { | feature per-peer-admin-down { | |||
description | description | |||
"This feature indicates that the system allows to | "This feature indicates that the system allows for the | |||
administratively disable a peer."; | administrative disabling of a peer."; | |||
} | } | |||
feature per-peer-graceful-restart-config { | feature per-peer-graceful-restart-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
graceful restart at the per-peer level."; | configuration of graceful restart at the per-peer level."; | |||
} | } | |||
feature per-peer-session-attributes-config { | feature per-peer-session-attributes-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
session attributes at the per-peer level."; | configuration of session attributes at the per-peer level."; | |||
} | } | |||
feature policy-label-assignment-config { | feature policy-label-assignment-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
policies to assign labels according to certain prefixes."; | configuration of policies to assign labels according to | |||
certain prefixes."; | ||||
} | } | |||
feature policy-ordered-label-config { | feature policy-ordered-label-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
ordered label policies."; | configuration of ordered label policies."; | |||
} | } | |||
feature policy-targeted-discovery-config { | feature policy-targeted-discovery-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
policies to control the acceptance of targeted neighbor | configuration of policies to control the acceptance of | |||
discovery Hello messages."; | targeted neighbor-discovery Hello messages."; | |||
} | } | |||
feature session-downstream-on-demand-config { | feature session-downstream-on-demand-config { | |||
description | description | |||
"This feature indicates that the system allows to configure | "This feature indicates that the system allows for the | |||
session downstream-on-demand"; | configuration of session downstream on demand."; | |||
} | } | |||
/* | /* | |||
* Typedefs | * Typedefs | |||
*/ | */ | |||
typedef neighbor-list-ref { | typedef neighbor-list-ref { | |||
type leafref { | type leafref { | |||
path "/rt-pol:routing-policy/rt-pol:defined-sets/" | path "/rt-pol:routing-policy/rt-pol:defined-sets/" | |||
+ "rt-pol:neighbor-sets/rt-pol:neighbor-set/rt-pol:name"; | + "rt-pol:neighbor-sets/rt-pol:neighbor-set/rt-pol:name"; | |||
} | } | |||
description | description | |||
"A type for a reference to a neighbor address list. | "A type for a reference to a neighbor address list. | |||
The string value is the name identifier for uniquely | The string value is the name identifier for uniquely | |||
identifying the referenced address list, which contains a list | identifying the referenced address list, which contains a list | |||
of addresses that a routing policy can applied."; | of addresses that a routing policy can applied."; | |||
reference | reference | |||
"I-D.ietf-rtgwg-policy-model: A YANG Data Model for Routing | "RFC 9067: A YANG Data Model for Routing Policy"; | |||
Policy Management"; | ||||
} | } | |||
typedef prefix-list-ref { | typedef prefix-list-ref { | |||
type leafref { | type leafref { | |||
path "/rt-pol:routing-policy/rt-pol:defined-sets/" | path "/rt-pol:routing-policy/rt-pol:defined-sets/" | |||
+ "rt-pol:prefix-sets/rt-pol:prefix-set/rt-pol:name"; | + "rt-pol:prefix-sets/rt-pol:prefix-set/rt-pol:name"; | |||
} | } | |||
description | description | |||
"A type for a reference to a prefix list. | "A type for a reference to a prefix list. | |||
The string value is the name identifier for uniquely | The string value is the name identifier for uniquely | |||
identifying the referenced prefix set, which contains a list | identifying the referenced prefix set, which contains a list | |||
of prefixes that a routing policy can applied."; | of prefixes that a routing policy can applied."; | |||
reference | reference | |||
"I-D.ietf-rtgwg-policy-model: A YANG Data Model for Routing | "RFC 9067: A YANG Data Model for Routing Policy"; | |||
Policy Management"; | ||||
} | } | |||
typedef peer-list-ref { | typedef peer-list-ref { | |||
type leafref { | type leafref { | |||
path "/rt-pol:routing-policy/rt-pol:defined-sets/" | path "/rt-pol:routing-policy/rt-pol:defined-sets/" | |||
+ "rt-pol:neighbor-sets/rt-pol:neighbor-set/rt-pol:name"; | + "rt-pol:neighbor-sets/rt-pol:neighbor-set/rt-pol:name"; | |||
} | } | |||
description | description | |||
"A type for a reference to a peer address list. | "A type for a reference to a peer address list. | |||
The string value is the name identifier for uniquely | The string value is the name identifier for uniquely | |||
identifying the referenced address list, which contains a list | identifying the referenced address list, which contains a list | |||
of addresses that a routing policy can applied."; | of addresses that a routing policy can applied."; | |||
reference | reference | |||
"I-D.ietf-rtgwg-policy-model: A YANG Data Model for Routing | "RFC 9067: A YANG Data Model for Routing Policy"; | |||
Policy Management"; | ||||
} | } | |||
/* | /* | |||
* Identities | * Identities | |||
*/ | */ | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping address-family-ipv4-augment { | ||||
description "Augmentation to address family IPv4."; | ||||
grouping address-family-ipv4-augment { | ||||
description | ||||
"Augmentation to address family IPv4."; | ||||
uses policy-container; | uses policy-container; | |||
leaf transport-address { | leaf transport-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"The transport address advertised in LDP Hello messages. | "The transport address advertised in LDP Hello messages. | |||
If this value is not specified, the LDP LSR ID is used as | If this value is not specified, the LDP LSR Id is used as | |||
the transport address."; | the transport address."; | |||
reference | reference | |||
"RFC5036. Sec. 3.5.2."; | "RFC 5036: LDP Specification, Sec. 3.5.2."; | |||
} | } | |||
} | } | |||
grouping authentication-keychain-augment { | grouping authentication-keychain-augment { | |||
description "Augmentation to authentication to add keychain."; | description | |||
"Augmentation to authentication to add key-chain."; | ||||
leaf key-chain { | leaf key-chain { | |||
type key-chain:key-chain-ref; | type key-chain:key-chain-ref; | |||
description | description | |||
"key-chain name. | "key-chain name. | |||
If not specified, no key chain is used."; | If not specified, no key chain is used."; | |||
} | } | |||
} | } | |||
grouping capability-augment { | grouping capability-augment { | |||
description "Augmentation to capability."; | description | |||
"Augmentation to capability."; | ||||
container end-of-lib { | container end-of-lib { | |||
if-feature capability-end-of-lib; | if-feature "capability-end-of-lib"; | |||
description | description | |||
"Configure end-of-lib capability."; | "Configure end-of-lib capability."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' to enable end-of-lib capability."; | "'true' to enable end-of-lib capability."; | |||
} | } | |||
} | } | |||
container typed-wildcard-fec { | container typed-wildcard-fec { | |||
if-feature capability-typed-wildcard-fec; | if-feature "capability-typed-wildcard-fec"; | |||
description | description | |||
"Configure typed-wildcard-fec capability."; | "Configure typed-wildcard-fec capability."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' to enable typed-wildcard-fec capability."; | "'true' to enable typed-wildcard-fec capability."; | |||
} | } | |||
} | } | |||
container upstream-label-assignment { | container upstream-label-assignment { | |||
if-feature capability-upstream-label-assignment; | if-feature "capability-upstream-label-assignment"; | |||
description | description | |||
"Configure upstream label assignment capability."; | "Configure upstream label assignment capability."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' to enable upstream label assignment."; | "'true' to enable upstream label assignment."; | |||
} | } | |||
} | } | |||
} // capability-augment | } // capability-augment | |||
grouping global-augment { | grouping global-augment { | |||
description "Augmentation to global attributes."; | description | |||
"Augmentation to global attributes."; | ||||
leaf igp-synchronization-delay { | leaf igp-synchronization-delay { | |||
type uint16 { | type uint16 { | |||
range "0 | 3..300"; | range "0 | 3..300"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
default 0; | default "0"; | |||
description | description | |||
"Sets the interval that the LDP waits before notifying the | "Sets the interval that the LDP waits before notifying the | |||
Interior Gateway Protocol (IGP) that label exchange is | Interior Gateway Protocol (IGP) that label exchange is | |||
completed so that IGP can start advertising the normal | completed so that IGP can start advertising the normal | |||
metric for the link. | metric for the link. | |||
If the value is not specified, there is no delay."; | If the value is not specified, there is no delay."; | |||
} | } | |||
} | } | |||
grouping global-forwarding-nexthop-augment { | grouping global-forwarding-nexthop-augment { | |||
description | description | |||
"Augmentation to global forwarding nexthop interfaces."; | "Augmentation at the global level for controlling MPLS | |||
forwarding on LDP interfaces."; | ||||
container forwarding-nexthop { | container forwarding-nexthop { | |||
if-feature forwarding-nexthop-config; | if-feature "forwarding-nexthop-config"; | |||
description | description | |||
"Configuration for forwarding nexthop."; | "Configuration for controlling MPLS forwarding on LDP | |||
interfaces."; | ||||
container interfaces { | container interfaces { | |||
description | description | |||
"Containing a list of interfaces on which forwarding can be | "Containing a list of interfaces on which forwarding can be | |||
disabled."; | disabled."; | |||
list interface { | list interface { | |||
key "name"; | key "name"; | |||
description | description | |||
"List of LDP interfaces on which forwarding can be | "List of LDP interfaces on which forwarding can be | |||
disabled."; | disabled."; | |||
uses ldp:ldp-interface-ref; | uses ldp:ldp-interface-ref; | |||
list address-family { | list address-family { | |||
key "afi"; | key "afi"; | |||
description | description | |||
"Per-vrf per-af params."; | "Per-vrf per-af params."; | |||
leaf afi { | leaf afi { | |||
type identityref { | type identityref { | |||
base rt:address-family; | base rt:address-family; | |||
} | } | |||
description | description | |||
"Address family type value."; | "Address family type value."; | |||
} | } | |||
leaf ldp-disable { | leaf ldp-disable { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' to disable LDP forwarding on the interface."; | "'true' to disable LDP forwarding on the interface."; | |||
} | } | |||
} | } | |||
} // interface | } // interface | |||
} // interfaces | } // interfaces | |||
} // forwarding-nexthop | } // forwarding-nexthop | |||
} // global-forwarding-nexthop-augment | } // global-forwarding-nexthop-augment | |||
grouping graceful-restart-augment { | grouping graceful-restart-augment { | |||
description "Augmentation to graceful restart."; | description | |||
"Augmentation to graceful restart."; | ||||
leaf helper-enabled { | leaf helper-enabled { | |||
if-feature graceful-restart-helper-mode; | if-feature "graceful-restart-helper-mode"; | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"Enable or disable graceful restart helper mode."; | "Enable or disable graceful restart helper mode."; | |||
} | } | |||
} | } | |||
grouping interface-address-family-ipv4-augment { | grouping interface-address-family-ipv4-augment { | |||
description "Augmentation to interface address family IPv4."; | description | |||
"Augmentation to interface address family IPv4."; | ||||
leaf transport-address { | leaf transport-address { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
enum "use-global-transport-address" { | enum use-global-transport-address { | |||
description | description | |||
"Use the transport address set at the global level | "Use the transport address set at the global level | |||
common for all interfaces for this address family."; | common for all interfaces for this address family."; | |||
} | } | |||
enum "use-interface-address" { | enum use-interface-address { | |||
description | description | |||
"Use interface address as the transport address."; | "Use interface address as the transport address."; | |||
} | } | |||
} | } | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
} | } | |||
default "use-global-transport-address"; | default "use-global-transport-address"; | |||
description | description | |||
"IP address to be advertised as the LDP transport address."; | "IP address to be advertised as the LDP transport address."; | |||
} | } | |||
} | } | |||
grouping interface-address-family-ipv6-augment { | grouping interface-address-family-ipv6-augment { | |||
description "Augmentation to interface address family IPv6."; | description | |||
"Augmentation to interface address family IPv6."; | ||||
leaf transport-address { | leaf transport-address { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
enum "use-global-transport-address" { | enum use-global-transport-address { | |||
description | description | |||
"Use the transport address set at the global level | "Use the transport address set at the global level | |||
common for all interfaces for this address family."; | common for all interfaces for this address family."; | |||
} | } | |||
enum "use-interface-address" { | enum use-interface-address { | |||
description | description | |||
"Use interface address as the transport address."; | "Use interface address as the transport address."; | |||
} | } | |||
} | } | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
} | } | |||
default "use-global-transport-address"; | default "use-global-transport-address"; | |||
description | description | |||
"IP address to be advertised as the LDP transport address."; | "IP address to be advertised as the LDP transport address."; | |||
} | } | |||
} | } | |||
grouping interface-augment { | grouping interface-augment { | |||
description "Augmentation to interface."; | description | |||
"Augmentation to interface."; | ||||
uses ldp:basic-discovery-timers { | uses ldp:basic-discovery-timers { | |||
if-feature per-interface-timer-config; | if-feature "per-interface-timer-config"; | |||
} | } | |||
leaf igp-synchronization-delay { | leaf igp-synchronization-delay { | |||
if-feature per-interface-timer-config; | if-feature "per-interface-timer-config"; | |||
type uint16 { | type uint16 { | |||
range "0 | 3..300"; | range "0 | 3..300"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"Sets the interval that the LDP waits before notifying the | "Sets the interval that the LDP waits before notifying the | |||
Interior Gateway Protocol (IGP) that label exchange is | Interior Gateway Protocol (IGP) that label exchange is | |||
completed so that IGP can start advertising the normal | completed so that IGP can start advertising the normal | |||
metric for the link. | metric for the link. | |||
This leaf may be configured at the per-interface level or | This leaf may be configured at the per-interface level or | |||
the global level, with precedence given to the value at the | the global level, with precedence given to the value at the | |||
per-interface level. If the leaf is not configured at | per-interface level. If the leaf is not configured at | |||
either level, the default value at the global level is | either level, the default value at the global level is | |||
used."; | used."; | |||
} | } | |||
} | } | |||
grouping peer-af-policy-container { | grouping peer-af-policy-container { | |||
description | description | |||
"LDP policy attribute container under peer address-family."; | "LDP policy attribute container under peer address family."; | |||
container label-policy { | container label-policy { | |||
description | description | |||
"Label policy attributes."; | "Label policy attributes."; | |||
container advertise { | container advertise { | |||
description | description | |||
"Label advertising policies."; | "Label advertising policies."; | |||
leaf prefix-list { | leaf prefix-list { | |||
type prefix-list-ref; | type prefix-list-ref; | |||
description | description | |||
"Applies the prefix list to filter outgoing label | "Applies the prefix list to filter outgoing label | |||
advertisements. | advertisements. | |||
If the value is not specified, no prefix filter | If the value is not specified, no prefix filter | |||
is applied."; | is applied."; | |||
} | } | |||
} | } | |||
container accept { | container accept { | |||
description | description | |||
"Label advertisement acceptance policies."; | "Label advertisement acceptance policies."; | |||
leaf prefix-list { | leaf prefix-list { | |||
type prefix-list-ref; | type prefix-list-ref; | |||
description | description | |||
"Applies the prefix list to filer incoming label | "Applies the prefix list to filer incoming label | |||
advertisements. | advertisements. | |||
If the value is not specified, no prefix filter | If the value is not specified, no prefix filter | |||
is applied."; | is applied."; | |||
} | } | |||
} | } | |||
} | } | |||
} // peer-af-policy-container | } // peer-af-policy-container | |||
grouping peer-augment { | grouping peer-augment { | |||
description "Augmentation to each peer list entry."; | description | |||
"Augmentation to each peer list entry."; | ||||
leaf admin-down { | leaf admin-down { | |||
if-feature per-peer-admin-down; | if-feature "per-peer-admin-down"; | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' to disable the peer."; | "'true' to disable the peer."; | |||
} | } | |||
uses ldp:graceful-restart-attributes-per-peer { | uses ldp:graceful-restart-attributes-per-peer { | |||
if-feature per-peer-graceful-restart-config; | if-feature "per-peer-graceful-restart-config"; | |||
} | } | |||
uses ldp:peer-attributes { | uses ldp:peer-attributes { | |||
if-feature per-peer-session-attributes-config; | if-feature "per-peer-session-attributes-config"; | |||
} | } | |||
} | } | |||
grouping peers-augment { | grouping peers-augment { | |||
description "Augmentation to peers container."; | description | |||
"Augmentation to peers container."; | ||||
container session-downstream-on-demand { | container session-downstream-on-demand { | |||
if-feature session-downstream-on-demand-config; | if-feature "session-downstream-on-demand-config"; | |||
description | description | |||
"Session downstream-on-demand attributes."; | "Session downstream-on-demand attributes."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' if session downstream-on-demand is enabled."; | "'true' if session downstream on demand is enabled."; | |||
} | } | |||
leaf peer-list { | leaf peer-list { | |||
type peer-list-ref; | type peer-list-ref; | |||
description | description | |||
"The name of a peer ACL, to be applied to the | "The name of a peer ACL, to be applied to the | |||
downstream-on-demand sessions. | downstream-on-demand sessions. | |||
If this value is not specified, no filter is applied to | If this value is not specified, no filter is applied to | |||
any downstream-on-demand sessions."; | any downstream-on-demand sessions."; | |||
} | } | |||
} | } | |||
container dual-stack-transport-preference { | container dual-stack-transport-preference { | |||
if-feature peers-dual-stack-transport-preference; | if-feature "peers-dual-stack-transport-preference"; | |||
description | description | |||
"The settings of peers to establish TCP connection in a | "The settings of peers to establish TCP connection in a | |||
dual-stack setup."; | dual-stack setup."; | |||
leaf max-wait { | leaf max-wait { | |||
type uint16 { | type uint16 { | |||
range "0..60"; | range "0..60"; | |||
} | } | |||
default 30; | default "30"; | |||
description | description | |||
"The maximum wait time in seconds for preferred transport | "The maximum wait time in seconds for preferred transport | |||
connection establishment. 0 indicates no preference."; | connection establishment. 0 indicates no preference."; | |||
} | } | |||
container prefer-ipv4 { | container prefer-ipv4 { | |||
presence | presence "Present if IPv4 is preferred for transport | |||
"Present if IPv4 is prefered for transport connection | connection establishment, subject to the | |||
establishment, subject to the 'peer-list' in this | 'peer-list' in this container."; | |||
container."; | ||||
description | description | |||
"Uses IPv4 as the prefered address family for transport | "Uses IPv4 as the preferred address family for transport | |||
connection establishment, subject to the 'peer-list' in | connection establishment, subject to the 'peer-list' in | |||
this container. | this container. | |||
If this container is not present, as a default, IPv6 is | If this container is not present, as a default, IPv6 is | |||
the prefered address family for transport connection | the preferred address family for transport connection | |||
establishment."; | establishment."; | |||
leaf peer-list { | leaf peer-list { | |||
type peer-list-ref; | type peer-list-ref; | |||
description | description | |||
"The name of a peer ACL, to be applied to the IPv4 | "The name of a peer ACL, to be applied to the IPv4 | |||
transport connections. | transport connections. | |||
If this value is not specified, no filter is applied, | If this value is not specified, no filter is applied, | |||
and the IPv4 is prefered for all peers."; | and the IPv4 is preferred for all peers."; | |||
} | } | |||
} | } | |||
} | } | |||
} // peers-augment | } // peers-augment | |||
grouping policy-container { | grouping policy-container { | |||
description | description | |||
"LDP policy attributes."; | "LDP policy attributes."; | |||
container label-policy { | container label-policy { | |||
description | description | |||
skipping to change at page 71, line 37 ¶ | skipping to change at line 3271 ¶ | |||
description | description | |||
"Label advertising policies."; | "Label advertising policies."; | |||
container egress-explicit-null { | container egress-explicit-null { | |||
description | description | |||
"Enables an egress router to advertise an | "Enables an egress router to advertise an | |||
explicit null label (value 0) in place of an | explicit null label (value 0) in place of an | |||
implicit null label (value 3) to the | implicit null label (value 3) to the | |||
penultimate hop router."; | penultimate hop router."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"'true' to enable explicit null."; | "'true' to enable explicit null."; | |||
} | } | |||
} | } | |||
leaf prefix-list { | leaf prefix-list { | |||
type prefix-list-ref; | type prefix-list-ref; | |||
description | description | |||
"Applies the prefix list to filter outgoing label | "Applies the prefix list to filter outgoing label | |||
advertisements. | advertisements. | |||
If the value is not specified, no prefix filter | If the value is not specified, no prefix filter | |||
skipping to change at page 72, line 15 ¶ | skipping to change at line 3298 ¶ | |||
leaf prefix-list { | leaf prefix-list { | |||
type prefix-list-ref; | type prefix-list-ref; | |||
description | description | |||
"Applies the prefix list to filter incoming label | "Applies the prefix list to filter incoming label | |||
advertisements. | advertisements. | |||
If the value is not specified, no prefix filter | If the value is not specified, no prefix filter | |||
is applied."; | is applied."; | |||
} | } | |||
} | } | |||
container assign { | container assign { | |||
if-feature policy-label-assignment-config; | if-feature "policy-label-assignment-config"; | |||
description | description | |||
"Label assignment policies"; | "Label assignment policies."; | |||
container independent-mode { | container independent-mode { | |||
description | description | |||
"Independent label policy attributes."; | "Independent label policy attributes."; | |||
leaf prefix-list { | leaf prefix-list { | |||
type prefix-list-ref; | type prefix-list-ref; | |||
description | description | |||
"Assign labels according to certain prefixes. | "Assign labels according to certain prefixes. | |||
If the value is not specified, no prefix filter | If the value is not specified, no prefix filter | |||
is applied (labels are assigned to all learned | is applied (labels are assigned to all learned | |||
routes)."; | routes)."; | |||
skipping to change at page 72, line 28 ¶ | skipping to change at line 3311 ¶ | |||
container independent-mode { | container independent-mode { | |||
description | description | |||
"Independent label policy attributes."; | "Independent label policy attributes."; | |||
leaf prefix-list { | leaf prefix-list { | |||
type prefix-list-ref; | type prefix-list-ref; | |||
description | description | |||
"Assign labels according to certain prefixes. | "Assign labels according to certain prefixes. | |||
If the value is not specified, no prefix filter | If the value is not specified, no prefix filter | |||
is applied (labels are assigned to all learned | is applied (labels are assigned to all learned | |||
routes)."; | routes)."; | |||
} | } | |||
} | } | |||
container ordered-mode { | container ordered-mode { | |||
if-feature policy-ordered-label-config; | if-feature "policy-ordered-label-config"; | |||
description | description | |||
"Ordered label policy attributes."; | "Ordered label policy attributes."; | |||
leaf egress-prefix-list { | leaf egress-prefix-list { | |||
type prefix-list-ref; | type prefix-list-ref; | |||
description | description | |||
"Assign labels according to certain prefixes for | "Assign labels according to certain prefixes for | |||
egress LSR."; | egress LSR."; | |||
} | } | |||
} | } | |||
} // assign | } // assign | |||
skipping to change at page 72, line 50 ¶ | skipping to change at line 3332 ¶ | |||
} | } | |||
} | } | |||
} // assign | } // assign | |||
} // label-policy | } // label-policy | |||
} // policy-container | } // policy-container | |||
/* | /* | |||
* Configuration and state data nodes | * Configuration and state data nodes | |||
*/ | */ | |||
// Forwarding nexthop augmentation to the global tree | // Forwarding nexthop augmentation to the global tree | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global" { | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global" { | |||
description "Forwarding nexthop augmentation."; | description | |||
"Forwarding nexthop augmentation."; | ||||
uses global-forwarding-nexthop-augment; | uses global-forwarding-nexthop-augment; | |||
} | } | |||
// global/address-families/ipv6 | // global/address-families/ipv6 | |||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | ||||
+ "ldp:address-families" { | ||||
description "Global IPv6 augmentation."; | ||||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | ||||
+ "ldp:address-families" { | ||||
description | ||||
"Global IPv6 augmentation."; | ||||
container ipv6 { | container ipv6 { | |||
presence | presence "Present if IPv6 is enabled, unless the 'enabled' | |||
"Present if IPv6 is enabled, unless the 'enabled' | leaf is set to 'false'."; | |||
leaf is set to 'false'"; | ||||
description | description | |||
"Containing data related to the IPv6 address family."; | "Containing data related to the IPv6 address family."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"'false' to disable the address family."; | "'false' to disable the address family."; | |||
} | } | |||
uses policy-container; | uses policy-container; | |||
leaf transport-address { | leaf transport-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The transport address advertised in LDP Hello messages."; | "The transport address advertised in LDP Hello messages."; | |||
} | } | |||
leaf label-distribution-control-mode { | leaf label-distribution-control-mode { | |||
type enumeration { | type enumeration { | |||
enum independent { | enum independent { | |||
description | description | |||
"Independent label distribution control."; | "Independent label distribution control."; | |||
} | } | |||
enum ordered { | enum ordered { | |||
description | description | |||
"Ordered label distribution control."; | "Ordered label distribution control."; | |||
} | } | |||
} | } | |||
config false; | config false; | |||
description | description | |||
"Label distribution control mode."; | "Label distribution control mode."; | |||
reference | reference | |||
"RFC5036: LDP Specification. Sec 2.6."; | "RFC 5036: LDP Specification, Sec. 2.6."; | |||
} | } | |||
// ipv6 bindings | // ipv6 bindings | |||
container bindings { | container bindings { | |||
config false; | config false; | |||
description | description | |||
"LDP address and label binding information."; | "LDP address and label binding information."; | |||
list address { | list address { | |||
key "address"; | key "address"; | |||
description | description | |||
"List of address bindings learned by LDP."; | "List of address bindings learned by LDP."; | |||
leaf address { | leaf address { | |||
skipping to change at page 74, line 24 ¶ | skipping to change at line 3399 ¶ | |||
description | description | |||
"List of address bindings learned by LDP."; | "List of address bindings learned by LDP."; | |||
leaf address { | leaf address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"The IPv6 address learned from an Address | "The IPv6 address learned from an Address | |||
message received from or advertised to a peer."; | message received from or advertised to a peer."; | |||
} | } | |||
uses ldp:binding-address-state-attributes; | uses ldp:binding-address-state-attributes; | |||
} | } | |||
list fec-label { | list fec-label { | |||
key "fec"; | key "fec"; | |||
description | description | |||
"List of FEC-label bindings learned by LDP."; | "List of FEC-label bindings learned by LDP."; | |||
leaf fec { | leaf fec { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
description | description | |||
"The prefix FEC value in the FEC-label binding, | "The prefix FEC value in the FEC-Label binding, | |||
learned in a Label Mapping message received from | learned in a Label Mapping message received from | |||
or advertised to a peer."; | or advertised to a peer."; | |||
} | } | |||
uses ldp:binding-label-state-attributes; | uses ldp:binding-label-state-attributes; | |||
} | } | |||
} // bindings | } // bindings | |||
} // ipv6 | } // ipv6 | |||
} | } | |||
// discovery/interfaces/interface/address-families/ipv6 | // discovery/interfaces/interface/address-families/ipv6 | |||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | ||||
+ "ldp:interfaces/ldp:interface/" | ||||
+ "ldp:address-families" { | ||||
description "Interface IPv6 augmentation."; | ||||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | ||||
+ "ldp:interfaces/ldp:interface/" | ||||
+ "ldp:address-families" { | ||||
description | ||||
"Interface IPv6 augmentation."; | ||||
container ipv6 { | container ipv6 { | |||
presence | presence "Present if IPv6 is enabled, unless the 'enabled' | |||
"Present if IPv6 is enabled, unless the 'enabled' | leaf is set to 'false'."; | |||
leaf is set to 'false'"; | ||||
description | description | |||
"IPv6 address family."; | "IPv6 address family."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"'false' to disable the address family on the interface."; | "'false' to disable the address family on the interface."; | |||
} | } | |||
container hello-adjacencies { | container hello-adjacencies { | |||
config false; | config false; | |||
description | description | |||
"Containing a list of Hello adjacencies."; | "Containing a list of Hello adjacencies."; | |||
list hello-adjacency { | list hello-adjacency { | |||
key "adjacent-address"; | key "adjacent-address"; | |||
config false; | config false; | |||
description "List of Hello adjacencies."; | description | |||
"List of Hello adjacencies."; | ||||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
uses ldp:adjacency-state-attributes; | uses ldp:adjacency-state-attributes; | |||
uses ldp:ldp-peer-ref-from-interface; | uses ldp:ldp-peer-ref-from-interface; | |||
} | } | |||
} | } | |||
} // ipv6 | } // ipv6 | |||
} | } | |||
// discovery/targeted/address-families/ipv6 | // discovery/targeted/address-families/ipv6 | |||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | ||||
+ "ldp:targeted/ldp:address-families" { | ||||
description "Targeted discovery IPv6 augmentation."; | ||||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | ||||
+ "ldp:targeted/ldp:address-families" { | ||||
description | ||||
"Targeted discovery IPv6 augmentation."; | ||||
container ipv6 { | container ipv6 { | |||
presence | presence "Present if IPv6 is enabled."; | |||
"Present if IPv6 is enabled."; | ||||
description | description | |||
"IPv6 address family."; | "IPv6 address family."; | |||
container hello-adjacencies { | container hello-adjacencies { | |||
config false; | config false; | |||
description | description | |||
"Containing a list of Hello adjacencies."; | "Containing a list of Hello adjacencies."; | |||
list hello-adjacency { | list hello-adjacency { | |||
key "local-address adjacent-address"; | key "local-address adjacent-address"; | |||
config false; | config false; | |||
description "List of Hello adjacencies."; | description | |||
"List of Hello adjacencies."; | ||||
leaf local-address { | leaf local-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
skipping to change at page 76, line 22 ¶ | skipping to change at line 3486 ¶ | |||
leaf local-address { | leaf local-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
uses ldp:adjacency-state-attributes; | uses ldp:adjacency-state-attributes; | |||
uses ldp:ldp-peer-ref-from-target; | uses ldp:ldp-peer-ref-from-target; | |||
} | } | |||
} | } | |||
list target { | list target { | |||
key "adjacent-address"; | key "adjacent-address"; | |||
description | description | |||
"Targeted discovery params."; | "Targeted discovery params."; | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Configures a remote LDP neighbor for the | "Configures a remote LDP neighbor for the | |||
extended LDP discovery."; | extended LDP discovery."; | |||
} | } | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"'true' to enable the target."; | "'true' to enable the target."; | |||
} | } | |||
leaf local-address { | leaf local-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"The local address used as the source address to send | "The local address used as the source address to send | |||
targeted Hello messages. | targeted Hello messages. | |||
If the value is not specified, the transport-address | If the value is not specified, the transport address | |||
is used as the source address."; | is used as the source address."; | |||
} | } | |||
} // target | } // target | |||
} // ipv6 | } // ipv6 | |||
} | } | |||
// /peers/peer/state/address-families/ipv6 | // /peers/peer/state/address-families/ipv6 | |||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | ||||
+ "ldp:peer/ldp:address-families" { | ||||
description "Peer state IPv6 augmentation."; | ||||
augment "/rt:routing/rt:control-plane-protocols/" | ||||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | ||||
+ "ldp:peer/ldp:address-families" { | ||||
description | ||||
"Peer state IPv6 augmentation."; | ||||
container ipv6 { | container ipv6 { | |||
presence | presence "Present if IPv6 is enabled."; | |||
"Present if IPv6 is enabled."; | ||||
description | description | |||
"IPv6 address family."; | "IPv6 address family."; | |||
container hello-adjacencies { | container hello-adjacencies { | |||
config false; | config false; | |||
description | description | |||
"Containing a list of Hello adjacencies."; | "Containing a list of Hello adjacencies."; | |||
list hello-adjacency { | list hello-adjacency { | |||
key "local-address adjacent-address"; | key "local-address adjacent-address"; | |||
description "List of Hello adjacencies."; | description | |||
"List of Hello adjacencies."; | ||||
leaf local-address { | leaf local-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
skipping to change at page 77, line 41 ¶ | skipping to change at line 3547 ¶ | |||
leaf local-address { | leaf local-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Local address of the Hello adjacency."; | "Local address of the Hello adjacency."; | |||
} | } | |||
leaf adjacent-address { | leaf adjacent-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Neighbor address of the Hello adjacency."; | "Neighbor address of the Hello adjacency."; | |||
} | } | |||
uses ldp:adjacency-state-attributes; | uses ldp:adjacency-state-attributes; | |||
leaf interface { | leaf interface { | |||
type if:interface-ref; | type if:interface-ref; | |||
description "Interface for this adjacency."; | description | |||
"Interface for this adjacency."; | ||||
} | } | |||
} | } | |||
} | } | |||
} // ipv6 | } // ipv6 | |||
} | } | |||
/* | /* | |||
* Configuration data and operational state data nodes | * Configuration data and operational state data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global" { | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global" { | |||
description "Graceful restart augmentation."; | description | |||
"Graceful restart augmentation."; | ||||
uses global-augment; | uses global-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | |||
+ "ldp:capability" { | + "ldp:capability" { | |||
description "Capability augmentation."; | description | |||
"Capability augmentation."; | ||||
uses capability-augment; | uses capability-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | |||
+ "ldp:graceful-restart" { | + "ldp:graceful-restart" { | |||
description "Graceful restart augmentation."; | description | |||
"Graceful restart augmentation."; | ||||
uses graceful-restart-augment; | uses graceful-restart-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:global/" | |||
+ "ldp:address-families/ldp:ipv4" { | + "ldp:address-families/ldp:ipv4" { | |||
description "Address family IPv4 augmentation."; | description | |||
"Address family IPv4 augmentation."; | ||||
uses address-family-ipv4-augment; | uses address-family-ipv4-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | |||
+ "ldp:interfaces/ldp:interface" { | + "ldp:interfaces/ldp:interface" { | |||
description "Interface augmentation."; | description | |||
"Interface augmentation."; | ||||
uses interface-augment; | uses interface-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | |||
+ "ldp:interfaces/ldp:interface/ldp:address-families/" | + "ldp:interfaces/ldp:interface/ldp:address-families/" | |||
+ "ldp:ipv4" { | + "ldp:ipv4" { | |||
description "Interface address family IPv4 augmentation."; | description | |||
"Interface address family IPv4 augmentation."; | ||||
uses interface-address-family-ipv4-augment; | uses interface-address-family-ipv4-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | |||
+ "ldp:interfaces/ldp:interface/ldp:address-families/" | + "ldp:interfaces/ldp:interface/ldp:address-families/" | |||
+ "ldp-ext:ipv6" { | + "ldp-ext:ipv6" { | |||
description "Interface address family IPv6 augmentation."; | description | |||
"Interface address family IPv6 augmentation."; | ||||
uses interface-address-family-ipv6-augment; | uses interface-address-family-ipv6-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:discovery/" | |||
+ "ldp:targeted/ldp:hello-accept" { | + "ldp:targeted/ldp:hello-accept" { | |||
description "Targeted discovery augmentation."; | description | |||
"Targeted discovery augmentation."; | ||||
leaf neighbor-list { | leaf neighbor-list { | |||
if-feature policy-targeted-discovery-config; | if-feature "policy-targeted-discovery-config"; | |||
type neighbor-list-ref; | type neighbor-list-ref; | |||
description | description | |||
"The name of a neighbor ACL, to accept Hello messages from | "The name of a neighbor ACL, used to accept Hello messages | |||
LDP peers as permitted by the neighbor-list policy. | from LDP peers as permitted by the neighbor-list policy. | |||
If this value is not specified, targeted Hello messages from | If this value is not specified, targeted Hello messages | |||
any source are accepted."; | from any source are accepted."; | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers" { | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers" { | |||
description "Peers augmentation."; | description | |||
"Peers augmentation."; | ||||
uses peers-augment; | uses peers-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | |||
+ "ldp:authentication/ldp:authentication-type" { | + "ldp:authentication/ldp:authentication-type" { | |||
if-feature key-chain; | if-feature "key-chain"; | |||
description "Peers authentication augmentation."; | description | |||
"Peers authentication augmentation."; | ||||
case key-chain { | case key-chain { | |||
uses authentication-keychain-augment; | uses authentication-keychain-augment; | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer" { | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | |||
description "Peer list entry augmentation."; | + "ldp:peer" { | |||
description | ||||
"Peer list entry augmentation."; | ||||
uses peer-augment; | uses peer-augment; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | |||
+ "ldp:authentication/ldp:authentication-type" { | + "ldp:peer/ldp:authentication/ldp:authentication-type" { | |||
if-feature key-chain; | if-feature "key-chain"; | |||
description "Peer list entry authentication augmentation."; | description | |||
"Peer list entry authentication augmentation."; | ||||
case key-chain { | case key-chain { | |||
uses authentication-keychain-augment; | uses authentication-keychain-augment; | |||
} | } | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | |||
+ "ldp:address-families/ldp:ipv4" { | + "ldp:peer/ldp:address-families/ldp:ipv4" { | |||
description | description | |||
"Peer list entry IPv4 augmentation."; | "Peer list entry IPv4 augmentation."; | |||
uses peer-af-policy-container; | uses peer-af-policy-container; | |||
} | } | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/ldp:peer/" | + "rt:control-plane-protocol/ldp:mpls-ldp/ldp:peers/" | |||
+ "ldp:address-families/ldp-ext:ipv6" { | + "ldp:peer/ldp:address-families/ldp-ext:ipv6" { | |||
description | description | |||
"Peer list entry IPv6 augmentation."; | "Peer list entry IPv6 augmentation."; | |||
uses peer-af-policy-container; | uses peer-af-policy-container; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Figure 11: LDP extended module | Figure 11: LDP Extended Module | |||
10. Security Considerations | 10. Security Considerations | |||
This specification inherits the security considerations captured in | This specification inherits the security considerations captured in | |||
[RFC5920] and the LDP protocol specification documents, namely base | [RFC5920] and the LDP protocol specification documents, namely base | |||
LDP [RFC5036], LDP IPv6 [RFC7552], LDP Capabilities [RFC5561], Typed | LDP [RFC5036], LDP IPv6 [RFC7552], LDP Capabilities [RFC5561], Typed | |||
Wildcard FEC [RFC5918], LDP End-of-LIB [RFC5919], and LDP Upstream | Wildcard FEC [RFC5918], LDP End-of-LIB [RFC5919], and LDP Upstream | |||
Label Assignment [RFC6389]. | Label Assignment [RFC6389]. | |||
10.1. YANG model | 10.1. YANG Data Model | |||
The YANG modules specified in this document defines a schema for data | The YANG modules specified in this document define a schema for data | |||
that is designed to be accessed via network management protocols such | that is designed to be accessed via network management protocols such | |||
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
is the secure transport layer, and the mandatory-to-implement secure | is the secure transport layer, and the mandatory-to-implement secure | |||
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
is HTTPS, and the mandatory-to-implement secure transport is TLS | is HTTPS, and the mandatory-to-implement secure transport is TLS | |||
[RFC8446]. | [RFC8446]. | |||
The Network Configuration Access Control Model (NACM) [RFC8341] | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
provides the means to restrict access for particular NETCONF or | provides the means to restrict access for particular NETCONF or | |||
RESTCONF users to a preconfigured subset of all available NETCONF or | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
RESTCONF protocol operations and content. | RESTCONF protocol operations and content. | |||
10.1.1. Writable nodes | 10.1.1. Writable Nodes | |||
There are a number of data nodes defined in this YANG module that are | There are a number of data nodes defined in these YANG modules that | |||
writable/creatable/deletable (i.e., config true, which is the | are writable/creatable/deletable (i.e., config true, which is the | |||
default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
in some network environments. Write operations (e.g., edit-config) | in some network environments. Write operations (e.g., edit-config) | |||
to these data nodes without proper protection can have a negative | to these data nodes without proper protection can have a negative | |||
effect on network operations. | effect on network operations. | |||
For LDP, the ability to modify MPLS LDP configuration may allow the | For LDP, the ability to modify MPLS LDP configuration may allow the | |||
entire MPLS LDP domain to be compromised including forming LDP | entire MPLS LDP domain to be compromised including forming LDP | |||
adjacencies and/or peer sessions with unauthorized routers to mount a | adjacencies and/or peer sessions with unauthorized routers to mount a | |||
massive Denial-of-Service (DoS) attack. In particular, folling are | massive Denial-of-Service (DoS) attack. In particular, the following | |||
the subtrees and data nodes that are sensitivite and vulnerable: | are the subtrees and data nodes that are sensitive and vulnerable: | |||
* /mpls-ldp/discovery/interfaces/interface: Adding LDP on any | /mpls-ldp/discovery/interfaces/interface: Adding LDP on any | |||
unprotected interface could allow an LDP hello adjacency to be | unprotected interface could allow an LDP Hello adjacency to be | |||
formed with an unauthorized and malicious neighbor. Once an hello | formed with an unauthorized and malicious neighbor. Once a Hello | |||
adjacency is formed, a peer session could progress with this | adjacency is formed, a peer session could progress with this | |||
neighbor. | neighbor. | |||
* /mpls-ldp/discovery/targeted/hello-accept: Allowing acceptance of | /mpls-ldp/discovery/targeted/hello-accept: Allowing acceptance of | |||
targeted-hellos could open LDP to DoS attacks related to incoming | targeted-hellos could open LDP to DoS attacks related to incoming | |||
targeted hellos from malicious sources. | targeted hellos from malicious sources. | |||
* /mpls-ldp/peers/authentication: Allowing a peer session | /mpls-ldp/peers/authentication: Allowing a peer session | |||
establishement is typically controlled via LDP authentication | establishment is typically controlled via LDP authentication where | |||
where a proper and secure authentication password/key management | a proper and secure authentication password/key management is | |||
is warranted. | warranted. | |||
* /mpls-ldp/peers/peer/authentication: Same as above. | /mpls-ldp/peers/peer/authentication: Same as above. | |||
10.1.2. Readable nodes | 10.1.2. Readable Nodes | |||
Some of the readable data nodes in this YANG module may be considered | Some of the readable data nodes in these YANG modules may be | |||
sensitive or vulnerable in some network environments. It is thus | considered sensitive or vulnerable in some network environments. It | |||
important to control read access (e.g., via get, get-config, or | is thus important to control read access (e.g., via get, get-config, | |||
notification) to these data nodes. These are the subtrees and data | or notification) to these data nodes. These are the subtrees and | |||
nodes and their sensitivity/vulnerability: | data nodes and their sensitivity/vulnerability: | |||
The exposure of LDP databases (such as hello adjacencies, peers, | The exposure of LDP databases (such as Hello adjacencies, peers, | |||
address bindings, and fec-label bindings) beyond the scope of the LDP | address bindings, and FEC-Label bindings) beyond the scope of the LDP | |||
admin domain may be undesirable. The relevant subtrees and data | admin domain may be undesirable. The relevant subtrees and data | |||
nodes are as follows: | nodes are as follows: | |||
* /mpls-ldp/global/address-families/ipv4/bindings/address | * /mpls-ldp/global/address-families/ipv4/bindings/address | |||
* /mpls-ldp/global/address-families/ipv6/bindings/address | * /mpls-ldp/global/address-families/ipv6/bindings/address | |||
* /mpls-ldp/global/address-families/ipv4/bindings/fec-label | * /mpls-ldp/global/address-families/ipv4/bindings/fec-label | |||
* /mpls-ldp/global/address-families/ipv6/bindings/fec-label | * /mpls-ldp/global/address-families/ipv6/bindings/fec-label | |||
skipping to change at page 82, line 28 ¶ | skipping to change at line 3783 ¶ | |||
* /mpls-ldp/discovery/targeted/address-families/ipv4/hello- | * /mpls-ldp/discovery/targeted/address-families/ipv4/hello- | |||
adjacencies | adjacencies | |||
* /mpls-ldp/discovery/targeted/address-families/ipv6/hello- | * /mpls-ldp/discovery/targeted/address-families/ipv6/hello- | |||
adjacencies | adjacencies | |||
* /mpls-ldp/peers | * /mpls-ldp/peers | |||
The configuration for LDP peer authentication is supported via the | The configuration for LDP peer authentication is supported via the | |||
specification of key-chain [RFC8040], or via direct specification of | key-chain specification [RFC8177] or via direct specification of a | |||
a key associated with a crypto algorithm (such as MD5). The relevant | key associated with a crypto algorithm (such as MD5). The relevant | |||
subtrees and data nodes are as follows: | subtrees and data nodes are as follows: | |||
* /mpls-ldp/peers/authentication | * /mpls-ldp/peers/authentication | |||
* /mpls-ldp/peers/peer/authentication | * /mpls-ldp/peers/peer/authentication | |||
The actual authentication key data (whether locally specified or part | The actual authentication key data (whether locally specified or part | |||
of a key-chain) is sensitive and needs to be kept secret from | of a key-chain) is sensitive and needs to be kept secret from | |||
unauthorized parties. For key-chain based authentication, this model | unauthorized parties. For key-chain-based authentication, this model | |||
inherits the security considerations of [RFC8040] (that includes the | inherits the security considerations of [RFC8040] (that includes the | |||
considerations with respect to the local storage and handling of | considerations with respect to the local storage and handling of | |||
authentication keys). A similar procedure for storage and access to | authentication keys). A similar procedure for storage and access to | |||
direct key is warranted. | direct keys is warranted. | |||
10.1.3. RPC operations | 10.1.3. RPC Operations | |||
Some of the RPC operations in this YANG module may be considered | Some of the RPC operations in these YANG modules may be considered | |||
sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
important to control access to these operations otherwise control | important to control access to these operations; otherwise, control | |||
plane flaps, network outages, and DoS attacks are possible. The RPC | plane flaps, network outages, and DoS attacks are possible. The RPC | |||
operations are: | operations are: | |||
* mpls-ldp-clear-peer | * mpls-ldp-clear-peer | |||
* mpls-ldp-clear-hello-adjacency | * mpls-ldp-clear-hello-adjacency | |||
10.1.4. Notifications | 10.1.4. Notifications | |||
The model describes several notifications. The implementations must | The model describes several notifications. The implementations must | |||
rate-limit the generation of these notifications to avoid creating | rate-limit the generation of these notifications to avoid creating | |||
significant notification load and possible side effects on the system | significant notification load and possible side effects on the system | |||
stability. | stability. | |||
11. IANA Considerations | 11. IANA Considerations | |||
This document requests the registration of the following URIs in the | Per this document, the following URIs have been registered in the | |||
IETF "XML registry" [RFC3688]: | IETF "XML Registry" [RFC3688]: | |||
+----------------------------------------------------+----------+---+ | ||||
| URI |Registrant|XML| | ||||
+====================================================+==========+===+ | ||||
| urn:ietf:params:xml:ns:yang:ietf-mpls-ldp | The IESG |N/A| | ||||
+----------------------------------------------------+----------+---+ | ||||
| urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended | The IESG |N/A| | ||||
+----------------------------------------------------+----------+---+ | ||||
Table 1: URIs | ||||
This document requests the registration of the following YANG modules | ||||
in the "YANG Module Names" registry [RFC6020]: | ||||
+----------------------+---------------------------+------+---------+ | ||||
| Name | Namespace |Prefix|Reference| | ||||
+======================+===========================+======+=========+ | ||||
|ietf-mpls-ldp |urn:ietf:params:xml:ns:yang| ldp | This | | ||||
| |:ietf-mpls-ldp | | document| | ||||
+----------------------+---------------------------+------+---------+ | ||||
|ietf-mpls-ldp-extended|urn:ietf:params:xml:ns:yang| ldp- | This | | ||||
| |:ietf-mpls-ldp-extended | ext | document| | ||||
+----------------------+---------------------------+------+---------+ | ||||
Table 2: YANG Modules | ||||
-- RFC Editor: Replace "this document" with the document RFC number | ||||
at time of publication, and remove this note. | ||||
12. Acknowledgments | ||||
The authors would like to acknowledge Eddie Chami, Nagendra Kumar, | ||||
Mannan Venkatesan, and Pavan Beeram for their contribution to this | ||||
document. | ||||
We also acknowledge Ladislav Lhotka, Jan Lindblad, Tom Petch, | ||||
Yingzhen Qu, and Benjamin Kaduk for their detailed review of the | ||||
model during WG and IESG. | ||||
13. Contributors | ||||
Danial Johari | ||||
Cisco Systems | ||||
Email: dajohari@cisco.com | ||||
Loa Andersson | ||||
Huawei Technologies | ||||
Email: loa@pi.nu | ||||
Jeff Tantsura | URI: urn:ietf:params:xml:ns:yang:ietf-mpls-ldp | |||
Apstra | Registrant: The IESG | |||
Email: jefftant.ietf@gmail.com | XML: N/A | |||
Matthew Bocci | URI: urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended | |||
Nokia | Registrant: The IESG | |||
Email: matthew.bocci@nokia.com | XML: N/A | |||
Reshad Rahman | Per this document, the following YANG modules have been registered in | |||
Cisco Systems | the "YANG Module Names" registry [RFC6020]: | |||
Email: rrahman@cisco.com | ||||
Stephane Litkowski | Name: ietf-mpls-ldp | |||
Cisco Systems | Namespace: urn:ietf:params:xml:ns:yang:ietf-mpls-ldp | |||
Email: slitkows@cisco.com | Prefix: ldp | |||
Reference: RFC 9070 | ||||
14. Normative References | Name: ietf-mpls-ldp-extended | |||
Namespace: urn:ietf:params:xml:ns:yang:ietf-mpls-ldp-extended | ||||
Prefix: ldp-ext | ||||
Reference: RFC 9070 | ||||
[I-D.ietf-rtgwg-policy-model] | 12. Normative References | |||
Qu, Y., Tantsura, J., Lindem, A., and X. Liu, "A YANG Data | ||||
Model for Routing Policy Management", Work in Progress, | ||||
Internet-Draft, draft-ietf-rtgwg-policy-model-09, 4 March | ||||
2020, <https://tools.ietf.org/html/draft-ietf-rtgwg- | ||||
policy-model-09>. | ||||
[RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful | [RFC3478] Leelanivas, M., Rekhter, Y., and R. Aggarwal, "Graceful | |||
Restart Mechanism for Label Distribution Protocol", | Restart Mechanism for Label Distribution Protocol", | |||
RFC 3478, DOI 10.17487/RFC3478, February 2003, | RFC 3478, DOI 10.17487/RFC3478, February 2003, | |||
<https://www.rfc-editor.org/info/rfc3478>. | <https://www.rfc-editor.org/info/rfc3478>. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
skipping to change at page 86, line 13 ¶ | skipping to change at line 3909 ¶ | |||
<https://www.rfc-editor.org/info/rfc6242>. | <https://www.rfc-editor.org/info/rfc6242>. | |||
[RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label | [RFC6389] Aggarwal, R. and JL. Le Roux, "MPLS Upstream Label | |||
Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, | Assignment for LDP", RFC 6389, DOI 10.17487/RFC6389, | |||
November 2011, <https://www.rfc-editor.org/info/rfc6389>. | November 2011, <https://www.rfc-editor.org/info/rfc6389>. | |||
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
<https://www.rfc-editor.org/info/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
[RFC7277] Bjorklund, M., "A YANG Data Model for IP Management", | ||||
RFC 7277, DOI 10.17487/RFC7277, June 2014, | ||||
<https://www.rfc-editor.org/info/rfc7277>. | ||||
[RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. | [RFC7552] Asati, R., Pignataro, C., Raza, K., Manral, V., and R. | |||
Papneja, "Updates to LDP for IPv6", RFC 7552, | Papneja, "Updates to LDP for IPv6", RFC 7552, | |||
DOI 10.17487/RFC7552, June 2015, | DOI 10.17487/RFC7552, June 2015, | |||
<https://www.rfc-editor.org/info/rfc7552>. | <https://www.rfc-editor.org/info/rfc7552>. | |||
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
<https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
skipping to change at page 87, line 28 ¶ | skipping to change at line 3969 ¶ | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
[RFC8529] Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. | [RFC8529] Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. | |||
Liu, "YANG Data Model for Network Instances", RFC 8529, | Liu, "YANG Data Model for Network Instances", RFC 8529, | |||
DOI 10.17487/RFC8529, March 2019, | DOI 10.17487/RFC8529, March 2019, | |||
<https://www.rfc-editor.org/info/rfc8529>. | <https://www.rfc-editor.org/info/rfc8529>. | |||
15. Informative References | [RFC9067] Qu, Y., Tantsura, J., Lindem, A., and X. Liu, "A YANG Data | |||
Model for Routing Policy", RFC 9067, DOI 10.17487/RFC9067, | ||||
October 2021, <https://www.rfc-editor.org/info/rfc9067>. | ||||
[I-D.ietf-mpls-mldp-yang] | 13. Informative References | |||
Raza, K., Liu, X., Esale, S., Andersson, L., Tantsura, J., | ||||
and S. Krishnaswamy, "YANG Data Model for MPLS mLDP", Work | [MPLS-MLDP-YANG] | |||
in Progress, Internet-Draft, draft-ietf-mpls-mldp-yang-06, | Raza, K., Ed., Liu, X., Esale, S., Andersson, L., | |||
31 May 2019, <https://tools.ietf.org/html/draft-ietf-mpls- | Tantsura, J., and S. Krishnaswamy, "YANG Data Model for | |||
mldp-yang-06>. | MPLS mLDP", Work in Progress, Internet-Draft, draft-ietf- | |||
mpls-mldp-yang-10, 11 November 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-mpls- | ||||
mldp-yang-10>. | ||||
[RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private | [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private | |||
Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February | Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February | |||
2006, <https://www.rfc-editor.org/info/rfc4364>. | 2006, <https://www.rfc-editor.org/info/rfc4364>. | |||
[RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. | [RFC7307] Zhao, Q., Raza, K., Zhou, C., Fang, L., Li, L., and D. | |||
King, "LDP Extensions for Multi-Topology", RFC 7307, | King, "LDP Extensions for Multi-Topology", RFC 7307, | |||
DOI 10.17487/RFC7307, July 2014, | DOI 10.17487/RFC7307, July 2014, | |||
<https://www.rfc-editor.org/info/rfc7307>. | <https://www.rfc-editor.org/info/rfc7307>. | |||
skipping to change at page 88, line 26 ¶ | skipping to change at line 4021 ¶ | |||
|2001:db8:0:1::1/64 | |2001:db8:0:1::1/64 | |||
| | | | |||
| | | | |||
|2001:db8:0:1::2/64 | |2001:db8:0:1::2/64 | |||
+----------+----------+ | +----------+----------+ | |||
| | | | | | | | |||
| Another Router +---------| 2001:db8:0:2::/64 | | Another Router +---------| 2001:db8:0:2::/64 | |||
| | | | | | | | |||
+---------------------+ | +---------------------+ | |||
Figure 12: Example topology | Figure 12: Example Topology | |||
The configuration instance data tree for Router 203.0.113.1 in the | The configuration instance data tree for Router 203.0.113.1 in | |||
above figure could be as follows: | Figure 12 could be as follows: | |||
{ | { | |||
"ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
"interface": [ | "interface": [ | |||
{ | { | |||
"name": "eth1", | "name": "eth1", | |||
"description": "An interface with LDP enabled.", | "description": "An interface with LDP enabled.", | |||
"type": "iana-if-type:ethernetCsmacd", | "type": "iana-if-type:ethernetCsmacd", | |||
"ietf-ip:ipv6": { | "ietf-ip:ipv6": { | |||
"address": [ | "address": [ | |||
skipping to change at page 89, line 38 ¶ | skipping to change at line 4082 ¶ | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
Figure 13: Example Configuration data in JSON | Figure 13: Example Configuration Data in JSON | |||
The corresponding operational state data for Router 203.0.113.1 could | The corresponding operational state data for Router 203.0.113.1 could | |||
be as follows: | be as follows: | |||
{ | { | |||
"ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
"interface": [ | "interface": [ | |||
{ | { | |||
"name": "eth1", | "name": "eth1", | |||
"description": "An interface with LDP enabled.", | "description": "An interface with LDP enabled.", | |||
skipping to change at page 92, line 45 ¶ | skipping to change at line 4231 ¶ | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
Figure 14: Example Operational data in JSON | Figure 14: Example Operational Data in JSON | |||
Acknowledgments | ||||
The authors would like to acknowledge Eddie Chami, Nagendra Kumar, | ||||
Mannan Venkatesan, and Pavan Beeram for their contribution to this | ||||
document. | ||||
We also acknowledge Ladislav Lhotka, Jan Lindblad, Tom Petch, | ||||
Yingzhen Qu, and Benjamin Kaduk for their detailed review of the | ||||
model during WG and IESG processes. | ||||
Contributors | ||||
Danial Johari | ||||
Cisco Systems | ||||
Email: dajohari@cisco.com | ||||
Loa Andersson | ||||
Huawei Technologies | ||||
Email: loa@pi.nu | ||||
Jeff Tantsura | ||||
Apstra | ||||
Email: jefftant.ietf@gmail.com | ||||
Matthew Bocci | ||||
Nokia | ||||
Email: matthew.bocci@nokia.com | ||||
Reshad Rahman | ||||
Email: reshad@yahoo.com | ||||
Stephane Litkowski | ||||
Cisco Systems | ||||
Email: slitkows@cisco.com | ||||
Authors' Addresses | Authors' Addresses | |||
Kamran Raza (editor) | Kamran Raza (editor) | |||
Cisco Systems | Cisco Systems | |||
Canada | Canada | |||
Email: skraza@cisco.com | Email: skraza@cisco.com | |||
Rajiv Asati | Rajiv Asati | |||
Cisco Systems | Cisco Systems | |||
United States of America | United States of America | |||
Email: rajiva@cisco.com | Email: rajiva@cisco.com | |||
Xufeng Liu | Xufeng Liu | |||
Volta Networks | IBM Corporation | |||
United States of America | United States of America | |||
Email: xufeng.liu.ietf@gmail.com | Email: xufeng.liu.ietf@gmail.com | |||
Santosh Esale | Santosh Easale | |||
Juniper Networks | Juniper Networks | |||
United States of America | United States of America | |||
Email: sesale@juniper.net | Email: santosh_easale@berkeley.edu | |||
Xia Chen | Xia Chen | |||
Huawei Technologies | Huawei Technologies | |||
China | China | |||
Email: jescia.chenxia@huawei.com | Email: jescia.chenxia@huawei.com | |||
Himanshu Shah | Himanshu Shah | |||
Ciena Corporation | Ciena Corporation | |||
United States of America | United States of America | |||
Email: hshah@ciena.com | Email: hshah@ciena.com | |||
End of changes. 582 change blocks. | ||||
1169 lines changed or deleted | 1080 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |