| < draft-ietf-teas-yang-te-27.txt | draft-ietf-teas-yang-te-28.txt > | |||
|---|---|---|---|---|
| TEAS Working Group T. Saad | TEAS Working Group T. Saad | |||
| Internet-Draft Juniper Networks | Internet-Draft Juniper Networks | |||
| Intended status: Standards Track R. Gandhi | Intended status: Standards Track R. Gandhi | |||
| Expires: January 9, 2022 Cisco Systems Inc | Expires: 28 April 2022 Cisco Systems Inc | |||
| X. Liu | X. Liu | |||
| Volta Networks | Volta Networks | |||
| V. Beeram | V.P. Beeram | |||
| Juniper Networks | Juniper Networks | |||
| I. Bryskin | I. Bryskin | |||
| Individual | Individual | |||
| O. Gonzalez de Dios | O. Gonzalez de Dios | |||
| Telefonica | Telefonica | |||
| July 08, 2021 | 25 October 2021 | |||
| A YANG Data Model for Traffic Engineering Tunnels, Label Switched Paths | A YANG Data Model for Traffic Engineering Tunnels, Label Switched Paths | |||
| and Interfaces | and Interfaces | |||
| draft-ietf-teas-yang-te-27 | draft-ietf-teas-yang-te-28 | |||
| Abstract | Abstract | |||
| This document defines a YANG data model for the provisioning and | This document defines a YANG data model for the provisioning and | |||
| management of Traffic Engineering (TE) tunnels, Label Switched Paths | management of Traffic Engineering (TE) tunnels, Label Switched Paths | |||
| (LSPs), and interfaces. The model is divided into YANG modules that | (LSPs), and interfaces. The model is divided into YANG modules that | |||
| classify data into generic, device-specific, technology agnostic, and | classify data into generic, device-specific, technology agnostic, and | |||
| technology-specific elements. | technology-specific elements. | |||
| This model covers data for configuration, operational state, remote | This model covers data for configuration, operational state, remote | |||
| skipping to change at page 1, line 47 ¶ | skipping to change at page 1, line 47 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 9, 2022. | This Internet-Draft will expire on 28 April 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
| publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
| carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
| to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
| include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
| the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
| described in the Simplified BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3 | 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Prefixes in Data Node Names . . . . . . . . . . . . . . . 4 | 2.1. Prefixes in Data Node Names . . . . . . . . . . . . . . . 4 | |||
| 2.2. Model Tree Diagrams . . . . . . . . . . . . . . . . . . . 4 | 2.2. Model Tree Diagrams . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Design Considerations . . . . . . . . . . . . . . . . . . . . 4 | 3. Design Considerations . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. State Data Organization . . . . . . . . . . . . . . . . . 5 | 3.1. State Data Organization . . . . . . . . . . . . . . . . . 5 | |||
| 4. Model Overview . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Model Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.1. Module Relationship . . . . . . . . . . . . . . . . . . . 6 | 4.1. Module Relationship . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. TE YANG Model . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. TE YANG Model . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1. Module Structure . . . . . . . . . . . . . . . . . . . . 7 | 5.1. Module Structure . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1.1. TE Globals . . . . . . . . . . . . . . . . . . . . . 9 | 5.1.1. TE Globals . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1.2. TE Tunnels . . . . . . . . . . . . . . . . . . . . . 12 | 5.1.2. TE Tunnels . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.1.3. TE LSPs . . . . . . . . . . . . . . . . . . . . . . . 19 | 5.1.3. TE LSPs . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 5.2. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 20 | 5.2. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 5.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 60 | 5.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 60 | |||
| 6. TE Device YANG Model . . . . . . . . . . . . . . . . . . . . 98 | 6. TE Device YANG Model . . . . . . . . . . . . . . . . . . . . 98 | |||
| 6.1. Module Structure . . . . . . . . . . . . . . . . . . . . 99 | 6.1. Module Structure . . . . . . . . . . . . . . . . . . . . 99 | |||
| 6.1.1. TE Interfaces . . . . . . . . . . . . . . . . . . . . 99 | 6.1.1. TE Interfaces . . . . . . . . . . . . . . . . . . . . 99 | |||
| 6.2. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 100 | 6.2. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 100 | |||
| 6.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 102 | 6.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 102 | |||
| 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 116 | 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 116 | |||
| 8. TE Generic and Helper YANG Modules . . . . . . . . . . . . . 117 | 8. TE Generic and Helper YANG Modules . . . . . . . . . . . . . 117 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 117 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 117 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 117 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 117 | |||
| 11. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 119 | 11. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 119 | |||
| 12. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 119 | 12. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 119 | |||
| 13. Appendix A: Examples . . . . . . . . . . . . . . . . . . . . 120 | 13. Appendix A: Examples . . . . . . . . . . . . . . . . . . . . 119 | |||
| 13.1. Basic Tunnel Setup . . . . . . . . . . . . . . . . . . . 120 | 13.1. Basic Tunnel Setup . . . . . . . . . . . . . . . . . . . 120 | |||
| 13.2. Global Named Path Constraints . . . . . . . . . . . . . 121 | 13.2. Global Named Path Constraints . . . . . . . . . . . . . 121 | |||
| 13.3. Tunnel with Global Path Constraint . . . . . . . . . . . 121 | 13.3. Tunnel with Global Path Constraint . . . . . . . . . . . 121 | |||
| 13.4. Tunnel with Per-tunnel Path Constraint . . . . . . . . . 122 | 13.4. Tunnel with Per-tunnel Path Constraint . . . . . . . . . 122 | |||
| 13.5. Tunnel State . . . . . . . . . . . . . . . . . . . . . . 123 | 13.5. Tunnel State . . . . . . . . . . . . . . . . . . . . . . 123 | |||
| 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 125 | ||||
| 14.1. Normative References . . . . . . . . . . . . . . . . . . 125 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 124 | |||
| 14.1. Normative References . . . . . . . . . . . . . . . . . . 124 | ||||
| 14.2. Informative References . . . . . . . . . . . . . . . . . 128 | 14.2. Informative References . . . . . . . . . . . . . . . . . 128 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 128 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 128 | |||
| 1. Introduction | 1. Introduction | |||
| YANG [RFC6020] and [RFC7950] is a data modeling language that was | YANG [RFC6020] and [RFC7950] is a data modeling language that was | |||
| introduced to define the contents of a conceptual data store that | introduced to define the contents of a conceptual data store that | |||
| allows networked devices to be managed using NETCONF [RFC6241]. YANG | allows networked devices to be managed using NETCONF [RFC6241]. YANG | |||
| has proved relevant beyond its initial confines, as bindings to other | has proved relevant beyond its initial confines, as bindings to other | |||
| interfaces (e.g. RESTCONF [RFC8040]) and encoding other than XML | interfaces (e.g. RESTCONF [RFC8040]) and encoding other than XML | |||
| skipping to change at page 3, line 49 ¶ | skipping to change at page 3, line 49 ¶ | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| The following terms are defined in [RFC6241] and are used in this | The following terms are defined in [RFC6241] and are used in this | |||
| specification: | specification: | |||
| o client | * client | |||
| o configuration data | * configuration data | |||
| o state data | * state data | |||
| This document also makes use of the following terminology introduced | This document also makes use of the following terminology introduced | |||
| in the YANG Data Modeling Language [RFC7950]: | in the YANG Data Modeling Language [RFC7950]: | |||
| o augment | * augment | |||
| o data model | * data model | |||
| o data node | * data node | |||
| 2.1. Prefixes in Data Node Names | 2.1. Prefixes in Data Node Names | |||
| In this document, names of data nodes and other data model objects | In this document, names of data nodes and other data model objects | |||
| are prefixed using the standard prefix associated with the | are prefixed using the standard prefix associated with the | |||
| corresponding YANG imported modules, as shown in Table 1. | corresponding YANG imported modules, as shown in Table 1. | |||
| +-----------------+----------------------+---------------+ | +=================+======================+===============+ | |||
| | Prefix | YANG module | Reference | | | Prefix | YANG module | Reference | | |||
| +-----------------+----------------------+---------------+ | +=================+======================+===============+ | |||
| | yang | ietf-yang-types | [RFC6991] | | | yang | ietf-yang-types | [RFC6991] | | |||
| | | | | | +-----------------+----------------------+---------------+ | |||
| | inet | ietf-inet-types | [RFC6991] | | | inet | ietf-inet-types | [RFC6991] | | |||
| | | | | | +-----------------+----------------------+---------------+ | |||
| | rt-types | ietf-routing-types | [RFC8294] | | | rt-types | ietf-routing-types | [RFC8294] | | |||
| | | | | | +-----------------+----------------------+---------------+ | |||
| | te-types | ietf-te-types | [RFC8776] | | | te-types | ietf-te-types | [RFC8776] | | |||
| | | | | | +-----------------+----------------------+---------------+ | |||
| | te-packet-types | ietf-te-packet-types | [RFC8776] | | | te-packet-types | ietf-te-packet-types | [RFC8776] | | |||
| | | | | | +-----------------+----------------------+---------------+ | |||
| | te | ietf-te | this document | | | te | ietf-te | this document | | |||
| | | | | | +-----------------+----------------------+---------------+ | |||
| | te-dev | ietf-te-device | this document | | | te-dev | ietf-te-device | this document | | |||
| +-----------------+----------------------+---------------+ | +-----------------+----------------------+---------------+ | |||
| Table 1 | ||||
| Table 1: Prefixes and corresponding YANG modules | Table 1: Prefixes and corresponding YANG modules | |||
| 2.2. Model Tree Diagrams | 2.2. Model Tree Diagrams | |||
| The tree diagrams extracted from the module(s) defined in this | The tree diagrams extracted from the module(s) defined in this | |||
| document are given in subsequent sections as per the syntax defined | document are given in subsequent sections as per the syntax defined | |||
| in [RFC8340]. | in [RFC8340]. | |||
| 3. Design Considerations | 3. Design Considerations | |||
| skipping to change at page 5, line 20 ¶ | skipping to change at page 5, line 26 ¶ | |||
| the technology associated with a TE Tunnel or LSP. | the technology associated with a TE Tunnel or LSP. | |||
| Also, the generic TE YANG data model does not cover signaling | Also, the generic TE YANG data model does not cover signaling | |||
| protocol data. The signaling protocol used to instantiate TE LSPs | protocol data. The signaling protocol used to instantiate TE LSPs | |||
| are outside the scope of this document and expected to be covered by | are outside the scope of this document and expected to be covered by | |||
| augmentations defined in other document(s). | augmentations defined in other document(s). | |||
| The following other design considerations are taken into account with | The following other design considerations are taken into account with | |||
| respect data organization: | respect data organization: | |||
| o The generic TE YANG data model 'ietf-te' contains device | * The generic TE YANG data model 'ietf-te' contains device | |||
| independent data and can be used to model data off a device (e.g. | independent data and can be used to model data off a device (e.g. | |||
| on a TE controller). The device-specific TE data is defined in | on a TE controller). The device-specific TE data is defined in | |||
| module 'ietf-te-device' as shown in Figure 1, | module 'ietf-te-device' as shown in Figure 1, | |||
| o In general, minimal elements in the model are designated as | * In general, minimal elements in the model are designated as | |||
| "mandatory" to allow freedom to vendors to adapt the data model to | "mandatory" to allow freedom to vendors to adapt the data model to | |||
| their specific product implementation. | their specific product implementation. | |||
| o Suitable defaults are specified for all configurable elements. | * Suitable defaults are specified for all configurable elements. | |||
| o The model declares a number of TE functions as features that can | * The model declares a number of TE functions as features that can | |||
| be optionally supported. | be optionally supported. | |||
| 3.1. State Data Organization | 3.1. State Data Organization | |||
| The Network Management Datastore Architecture (NMDA) [RFC8342] | The Network Management Datastore Architecture (NMDA) [RFC8342] | |||
| addresses modeling state data for ephemeral objects. This document | addresses modeling state data for ephemeral objects. This document | |||
| adopts the NMDA model for configuration and state data representation | adopts the NMDA model for configuration and state data representation | |||
| as per IETF guidelines for new IETF YANG models. | as per IETF guidelines for new IETF YANG models. | |||
| 4. Model Overview | 4. Model Overview | |||
| skipping to change at page 7, line 34 ¶ | skipping to change at page 7, line 34 ¶ | |||
| | \ | | \ | |||
| o +-------------------+ | o +-------------------+ | |||
| +-----------+ | ietf-rsvp-otn-te^ | | +-----------+ | ietf-rsvp-otn-te^ | | |||
| RSVP module | ietf-rsvp | +-------------------+ | RSVP module | ietf-rsvp | +-------------------+ | |||
| +-----------+ RSVP-TE with OTN | +-----------+ RSVP-TE with OTN | |||
| extensions | extensions | |||
| ^ shown for illustration | ^ shown for illustration | |||
| (not in this document) | (not in this document) | |||
| Figure 1: Relationship of TE module(s) with signaling protocol | Figure 1: Relationship of TE module(s) with signaling protocol | |||
| modules | modules | |||
| 5. TE YANG Model | 5. TE YANG Model | |||
| The generic TE YANG module ('ietf-te') is meant to manage and operate | The generic TE YANG module ('ietf-te') is meant to manage and operate | |||
| a TE network. This includes creating, modifying and retrieving TE | a TE network. This includes creating, modifying and retrieving TE | |||
| Tunnels, LSPs, and interfaces and their associated attributes (e.g. | Tunnels, LSPs, and interfaces and their associated attributes (e.g. | |||
| Administrative-Groups, SRLGs, etc.). | Administrative-Groups, SRLGs, etc.). | |||
| The detailed tree structure is provided in Figure 2. | The detailed tree structure is provided in Figure 2. | |||
| skipping to change at page 9, line 40 ¶ | skipping to change at page 9, line 22 ¶ | |||
| | +--rw named-admin-groups | | +--rw named-admin-groups | |||
| | | +--rw named-admin-group* [name] | | | +--rw named-admin-group* [name] | |||
| .. | .. | |||
| | +--rw named-srlgs | | +--rw named-srlgs | |||
| | | +--rw named-srlg* [name] {te-types:named-srlg-groups}? | | | +--rw named-srlg* [name] {te-types:named-srlg-groups}? | |||
| .. | .. | |||
| | +--rw named-path-constraints | | +--rw named-path-constraints | |||
| | | +--rw named-path-constraint* [name] | | | +--rw named-path-constraint* [name] | |||
| .. | .. | |||
| Figure 3: TE globals YANG subtree high-level structure | Figure 3: TE globals YANG subtree high-level structure | |||
| named-admin-groups: | named-admin-groups: | |||
| A YANG container for the list of named (extended) administrative | A YANG container for the list of named (extended) administrative | |||
| groups that may be applied to TE links. | groups that may be applied to TE links. | |||
| named-srlgs: | named-srlgs: | |||
| A YANG container for the list named Shared Risk Link Groups | A YANG container for the list named Shared Risk Link Groups | |||
| (SRLGs) that may be applied to TE links. | (SRLGs) that may be applied to TE links. | |||
| skipping to change at page 10, line 45 ¶ | skipping to change at page 10, line 35 ¶ | |||
| | | te-path-disjointness | | | te-path-disjointness | |||
| // ... | // ... | |||
| | +--rw explicit-route-objects-always | | +--rw explicit-route-objects-always | |||
| // ... | // ... | |||
| | | +--rw route-object-exclude-always* [index] | | | +--rw route-object-exclude-always* [index] | |||
| | | +--rw route-object-include-exclude* [index] | | | +--rw route-object-include-exclude* [index] | |||
| Figure 4: Named path constraints YANG subtree | Figure 4: Named path constraints YANG subtree | |||
| + te-bandwidth: A YANG container that holds the technology | o te-bandwidth: A YANG container that holds the technology | |||
| agnostic TE bandwidth constraint. | agnostic TE bandwidth constraint. | |||
| + link-protection: A YANG leaf that holds the link protection | o link-protection: A YANG leaf that holds the link protection | |||
| type constraint required for the links to be included in the | type constraint required for the links to be included in the | |||
| computed path. | computed path. | |||
| + setup/hold priority: A YANG leaf that holds the LSP setup | o setup/hold priority: A YANG leaf that holds the LSP setup | |||
| and hold admission priority as defined in [RFC3209]. | and hold admission priority as defined in [RFC3209]. | |||
| + signaling-type: A YANG leaf that holds the LSP setup type, | o signaling-type: A YANG leaf that holds the LSP setup type, | |||
| such as RSVP-TE or SR. | such as RSVP-TE or SR. | |||
| + path-metric-bounds: A YANG container that holds the set of | o path-metric-bounds: A YANG container that holds the set of | |||
| metric bounds applicable on the computed TE tunnel path. | metric bounds applicable on the computed TE tunnel path. | |||
| + path-affinities-values: A YANG container that holds the set | o path-affinities-values: A YANG container that holds the set | |||
| of affinity values and mask to be used during path | of affinity values and mask to be used during path | |||
| computation. | computation. | |||
| + path-affinity-names: A YANG container that holds the set of | o path-affinity-names: A YANG container that holds the set of | |||
| named affinity constraints and corresponding inclusion or | named affinity constraints and corresponding inclusion or | |||
| exclusions instruction for each to be used during path | exclusions instruction for each to be used during path | |||
| computation. | computation. | |||
| + path-srlgs-lists: A YANG container that holds the set of | o path-srlgs-lists: A YANG container that holds the set of | |||
| SRLG values and corresponding inclusion or exclusions | SRLG values and corresponding inclusion or exclusions | |||
| instruction to be used during path computation. | instruction to be used during path computation. | |||
| + path-srlgs-names: A YANG container that holds the set of | o path-srlgs-names: A YANG container that holds the set of | |||
| named SRLG constraints and corresponding inclusion or | named SRLG constraints and corresponding inclusion or | |||
| exclusions instruction for each to be used during path | exclusions instruction for each to be used during path | |||
| computation. | computation. | |||
| + disjointness: The level of resource disjointness constraint | o disjointness: The level of resource disjointness constraint | |||
| that the secondary path of a TE tunnel has to adhere to. | that the secondary path of a TE tunnel has to adhere to. | |||
| + explicit-route-objects-always: A YANG container that | o explicit-route-objects-always: A YANG container that | |||
| contains two route objects lists: | contains two route objects lists: | |||
| - 'route-object-exclude-always': a list of route entries to | + 'route-object-exclude-always': a list of route entries to | |||
| always exclude from the path computation. | always exclude from the path computation. | |||
| - 'route-object-include-exclude': a list of route entries | + 'route-object-include-exclude': a list of route entries | |||
| to include or exclude in the path computation. | to include or exclude in the path computation. | |||
| The 'route-object-include-exclude' is used to configure | The 'route-object-include-exclude' is used to configure | |||
| constraints on which route objects (e.g., nodes, links) are | constraints on which route objects (e.g., nodes, links) are | |||
| included or excluded in the path computation. | included or excluded in the path computation. | |||
| The interpretation of an empty 'route-object-include-exclude' | The interpretation of an empty 'route-object-include-exclude' | |||
| list depends on the TE Tunnel (end-to-end or Tunnel Segment) | list depends on the TE Tunnel (end-to-end or Tunnel Segment) | |||
| and on the specific path, according to the following rules: | and on the specific path, according to the following rules: | |||
| skipping to change at page 16, line 20 ¶ | skipping to change at page 16, line 4 ¶ | |||
| | | +--rw encoding? identityref | | | +--rw encoding? identityref | |||
| | | +--rw switching-type? identityref | | | +--rw switching-type? identityref | |||
| | +--rw hierarchical-link | | +--rw hierarchical-link | |||
| | +--rw local-te-node-id? te-types:te-node-id | | +--rw local-te-node-id? te-types:te-node-id | |||
| | +--rw local-te-link-tp-id? te-types:te-tp-id | | +--rw local-te-link-tp-id? te-types:te-tp-id | |||
| | +--rw remote-te-node-id? te-types:te-node-id | | +--rw remote-te-node-id? te-types:te-node-id | |||
| | +--rw te-topology-identifier | | +--rw te-topology-identifier | |||
| | +--rw provider-id? te-global-id | | +--rw provider-id? te-global-id | |||
| | +--rw client-id? te-global-id | | +--rw client-id? te-global-id | |||
| | +--rw topology-id? te-topology-id | | +--rw topology-id? te-topology-id | |||
| Figure 6: TE Tunnel hierarchy YANG subtree | ||||
| Figure 6: TE Tunnel hierarchy YANG subtree | ||||
| hierarchy: | hierarchy: | |||
| A YANG container that holds hierarchy related properties of the TE | A YANG container that holds hierarchy related properties of the TE | |||
| Tunnel (see Figure 6. A TE LSP can be set up in MPLS or | Tunnel (see Figure 6. A TE LSP can be set up in MPLS or | |||
| Generalized MPLS (GMPLS) networks to be used as a TE links to | Generalized MPLS (GMPLS) networks to be used as a TE links to | |||
| carry traffic in other (client) networks [RFC6107]. In this case, | carry traffic in other (client) networks [RFC6107]. In this case, | |||
| the model introduces the TE Tunnel hierarchical link endpoint | the model introduces the TE Tunnel hierarchical link endpoint | |||
| parameters to identify the specific link in the client layer that | parameters to identify the specific link in the client layer that | |||
| the underlying TE Tunnel is associated with. The hierarchy | the underlying TE Tunnel is associated with. The hierarchy | |||
| container includes the following: | container includes the following: | |||
| + dependency-tunnels: A set of hierarchical TE Tunnels | o dependency-tunnels: A set of hierarchical TE Tunnels | |||
| provisioned or to be provisioned in the immediate lower | provisioned or to be provisioned in the immediate lower | |||
| layer that this TE tunnel depends on for multi-layer path | layer that this TE tunnel depends on for multi-layer path | |||
| computation. A dependency TE Tunnel is provisioned if and | computation. A dependency TE Tunnel is provisioned if and | |||
| only if it is used (selected by path computation) at least | only if it is used (selected by path computation) at least | |||
| by one client layer TE Tunnel. The TE link in the client | by one client layer TE Tunnel. The TE link in the client | |||
| layer network topology supported by a dependent TE Tunnel is | layer network topology supported by a dependent TE Tunnel is | |||
| dynamically created only when the dependency TE Tunnel is | dynamically created only when the dependency TE Tunnel is | |||
| actually provisioned. | actually provisioned. | |||
| + hierarchical-link: A YANG container that holds the identity | o hierarchical-link: A YANG container that holds the identity | |||
| of the hierarchical link (in the client layer) that is | of the hierarchical link (in the client layer) that is | |||
| supported by this TE Tunnel. The endpoints of the | supported by this TE Tunnel. The endpoints of the | |||
| hierarchical link are defined by TE tunnel source and | hierarchical link are defined by TE tunnel source and | |||
| destination node endpoints. The hierarchical link can be | destination node endpoints. The hierarchical link can be | |||
| identified by its source and destination link termination | identified by its source and destination link termination | |||
| point identifiers. | point identifiers. | |||
| 5.1.2.1. TE Tunnel Paths | 5.1.2.1. TE Tunnel Paths | |||
| The TE Tunnel can be configured with a set of paths that define the | The TE Tunnel can be configured with a set of paths that define the | |||
| skipping to change at page 18, line 5 ¶ | skipping to change at page 17, line 42 ¶ | |||
| Figure 7: TE Tunnel paths YANG tree structure | Figure 7: TE Tunnel paths YANG tree structure | |||
| primary-paths: | primary-paths: | |||
| A YANG container that holds the list of primary paths. A primary | A YANG container that holds the list of primary paths. A primary | |||
| path is identified by 'name'. A primary path is selected from the | path is identified by 'name'. A primary path is selected from the | |||
| list to instantiate a primary forwarding LSP for the tunnel. The | list to instantiate a primary forwarding LSP for the tunnel. The | |||
| list of primary paths is visited by order of preference. A | list of primary paths is visited by order of preference. A | |||
| primary path has the following attributes: | primary path has the following attributes: | |||
| * primary-reverse-path: A YANG container that holds properties of | - primary-reverse-path: A YANG container that holds properties of | |||
| the primary reverse path. The reverse path is applicable to | the primary reverse path. The reverse path is applicable to | |||
| bidirectional TE Tunnels. | bidirectional TE Tunnels. | |||
| * candidate-secondary-paths: A YANG container that holds a list | - candidate-secondary-paths: A YANG container that holds a list | |||
| of candidate secondary paths which may be used for the primary | of candidate secondary paths which may be used for the primary | |||
| path to support path protection. The candidate secondary | path to support path protection. The candidate secondary | |||
| path(s) reference path(s) from the tunnel secondary paths list. | path(s) reference path(s) from the tunnel secondary paths list. | |||
| The preference of the secondary paths is specified within the | The preference of the secondary paths is specified within the | |||
| list and dictates the order of visiting the secondary path from | list and dictates the order of visiting the secondary path from | |||
| the list. The attributes of a secondary path can be defined | the list. The attributes of a secondary path can be defined | |||
| separately from the primary path. The attributes of a | separately from the primary path. The attributes of a | |||
| secondary path will be inherited from the associated 'active' | secondary path will be inherited from the associated 'active' | |||
| primary when not explicitly defined for the secondary path. | primary when not explicitly defined for the secondary path. | |||
| skipping to change at page 23, line 40 ¶ | skipping to change at page 23, line 30 ¶ | |||
| | | | rt-types:generalized-label | | | | rt-types:generalized-label | |||
| | | +--rw direction? | | | +--rw direction? | |||
| | | te-label-direction | | | te-label-direction | |||
| | +--rw label-step | | +--rw label-step | |||
| | | +--rw (technology)? | | | +--rw (technology)? | |||
| | | +--:(generic) | | | +--:(generic) | |||
| | | +--rw generic? int32 | | | +--rw generic? int32 | |||
| | +--rw range-bitmap? yang:hex-string | | +--rw range-bitmap? yang:hex-string | |||
| +--rw tunnels | +--rw tunnels | |||
| | +--rw tunnel* [name] | | +--rw tunnel* [name] | |||
| | +--ro operational-state? identityref | ||||
| | +--rw name string | | +--rw name string | |||
| | +--rw alias? string | ||||
| | +--rw identifier? uint32 | | +--rw identifier? uint32 | |||
| | +--rw color? uint32 | ||||
| | +--rw description? string | | +--rw description? string | |||
| | +--rw admin-state? identityref | ||||
| | +--ro operational-state? identityref | ||||
| | +--rw encoding? identityref | | +--rw encoding? identityref | |||
| | +--rw switching-type? identityref | | +--rw switching-type? identityref | |||
| | +--rw admin-state? identityref | ||||
| | +--rw reoptimize-timer? uint16 | ||||
| | +--rw source? te-types:te-node-id | | +--rw source? te-types:te-node-id | |||
| | +--rw destination? te-types:te-node-id | | +--rw destination? te-types:te-node-id | |||
| | +--rw controller | ||||
| | | +--rw protocol-origin? identityref | ||||
| | | +--rw controller-entity-id? string | ||||
| | +--rw src-tunnel-tp-id? binary | | +--rw src-tunnel-tp-id? binary | |||
| | +--rw dst-tunnel-tp-id? binary | | +--rw dst-tunnel-tp-id? binary | |||
| | +--rw bidirectional? boolean | | +--rw bidirectional? boolean | |||
| | +--rw controller | ||||
| | | +--rw protocol-origin? identityref | ||||
| | | +--rw controller-entity-id? string | ||||
| | +--rw reoptimize-timer? uint16 | ||||
| | +--rw association-objects | | +--rw association-objects | |||
| | | +--rw association-object* [association-key] | | | +--rw association-object* [association-key] | |||
| | | | +--rw association-key string | | | | +--rw association-key string | |||
| | | | +--rw type? identityref | | | | +--rw type? identityref | |||
| | | | +--rw id? uint16 | | | | +--rw id? uint16 | |||
| | | | +--rw source | | | | +--rw source | |||
| | | | +--rw id? te-gen-node-id | | | | +--rw id? te-gen-node-id | |||
| | | | +--rw type? enumeration | | | | +--rw type? enumeration | |||
| | | +--rw association-object-extended* [association-key] | | | +--rw association-object-extended* [association-key] | |||
| | | +--rw association-key string | | | +--rw association-key string | |||
| skipping to change at page 60, line 42 ¶ | skipping to change at page 60, line 34 ¶ | |||
| | | +--:(all-tunnels) | | | +--:(all-tunnels) | |||
| | | | +---w all empty | | | | +---w all empty | |||
| | | +--:(one-tunnel) | | | +--:(one-tunnel) | |||
| | | +---w tunnel? tunnel-ref | | | +---w tunnel? tunnel-ref | |||
| | +---w action-info | | +---w action-info | |||
| | +---w action? identityref | | +---w action? identityref | |||
| | +---w disruptive? empty | | +---w disruptive? empty | |||
| +--ro output | +--ro output | |||
| +--ro action-result? identityref | +--ro action-result? identityref | |||
| Figure 8: TE Tunnel generic model YANG tree diagram | Figure 8: TE Tunnel generic model YANG tree diagram | |||
| 5.3. YANG Module | 5.3. YANG Module | |||
| The generic TE YANG module 'ietf-te' imports the following modules: | The generic TE YANG module 'ietf-te' imports the following modules: | |||
| o ietf-yang-types and ietf-inet-types defined in [RFC6991] | * ietf-yang-types and ietf-inet-types defined in [RFC6991] | |||
| * ietf-te-types defined in [RFC8776] | ||||
| o ietf-te-types defined in [RFC8776] | ||||
| This module references the following documents: [RFC6991], [RFC4875], | This module references the following documents: [RFC6991], [RFC4875], | |||
| [RFC7551], [RFC4206], [RFC4427], [RFC4872], [RFC3945], [RFC3209], | [RFC7551], [RFC4206], [RFC4427], [RFC4872], [RFC3945], [RFC3209], | |||
| [RFC6780], [RFC8800], and [RFC7308]. | [RFC6780], [RFC8800], and [RFC7308]. | |||
| <CODE BEGINS> file "ietf-te@2021-05-16.yang" | <CODE BEGINS> file "ietf-te@2021-10-22.yang" | |||
| module ietf-te { | module ietf-te { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-te"; | namespace "urn:ietf:params:xml:ns:yang:ietf-te"; | |||
| /* Replace with IANA when assigned */ | /* Replace with IANA when assigned */ | |||
| prefix te; | prefix te; | |||
| /* Import TE generic types */ | /* Import TE generic types */ | |||
| import ietf-te-types { | import ietf-te-types { | |||
| prefix te-types; | prefix te-types; | |||
| reference | reference | |||
| "RFC8776: Common YANG Data Types for Traffic Engineering."; | "RFC8776: Common YANG Data Types for Traffic Engineering."; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix inet; | prefix inet; | |||
| reference | reference | |||
| "RFC6991: Common YANG Data Types."; | "RFC6991: Common YANG Data Types."; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| reference | reference | |||
| "RFC6991: Common YANG Data Types."; | "RFC6991: Common YANG Data Types."; | |||
| } | } | |||
| organization | organization | |||
| "IETF Traffic Engineering Architecture and Signaling (TEAS) | "IETF Traffic Engineering Architecture and Signaling (TEAS) | |||
| Working Group."; | Working Group."; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/teas/> | "WG Web: <http://tools.ietf.org/wg/teas/> | |||
| WG List: <mailto:teas@ietf.org> | WG List: <mailto:teas@ietf.org> | |||
| Editor: Tarek Saad | Editor: Tarek Saad | |||
| <mailto:tsaad@juniper.net> | <mailto:tsaad@juniper.net> | |||
| Editor: Rakesh Gandhi | Editor: Rakesh Gandhi | |||
| <mailto:rgandhi@cisco.com> | <mailto:rgandhi@cisco.com> | |||
| Editor: Vishnu Pavan Beeram | Editor: Vishnu Pavan Beeram | |||
| <mailto:vbeeram@juniper.net> | <mailto:vbeeram@juniper.net> | |||
| Editor: Himanshu Shah | Editor: Himanshu Shah | |||
| <mailto:hshah@ciena.com> | <mailto:hshah@ciena.com> | |||
| Editor: Xufeng Liu | Editor: Xufeng Liu | |||
| <mailto: xufeng.liu.ietf@gmail.com> | <mailto: xufeng.liu.ietf@gmail.com> | |||
| Editor: Igor Bryskin | Editor: Igor Bryskin | |||
| <mailto:i_bryskin@yahoo.com>"; | <mailto:i_bryskin@yahoo.com>"; | |||
| description | description | |||
| "YANG data module for TE configuration, state, and RPCs. | "YANG data module for TE configuration, state, and RPCs. | |||
| The model fully conforms to the Network Management | The model fully conforms to the Network Management | |||
| Datastore Architecture (NMDA). | Datastore Architecture (NMDA). | |||
| Copyright (c) 2019 IETF Trust and the persons | Copyright (c) 2019 IETF Trust and the persons | |||
| identified as authors of the code. All rights reserved. | identified as 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 | without modification, is permitted pursuant to, and subject | |||
| to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Simplified BSD License | |||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC XXXX; see | |||
| the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
| // RFC Ed.: replace XXXX with actual RFC number and remove this | // RFC Ed.: replace XXXX with actual RFC number and remove this | |||
| // note. | // note. | |||
| // RFC Ed.: update the date below with the date of RFC publication | // RFC Ed.: update the date below with the date of RFC publication | |||
| // and remove this note. | // and remove this note. | |||
| revision 2021-05-16 { | revision 2021-10-22 { | |||
| description | description | |||
| "Latest update to TE generic YANG module."; | "Latest update to TE generic YANG module."; | |||
| reference | reference | |||
| "RFCXXXX: A YANG Data Model for Traffic Engineering Tunnels | "RFCXXXX: A YANG Data Model for Traffic Engineering Tunnels | |||
| and Interfaces."; | and Interfaces."; | |||
| } | } | |||
| identity path-computation-error-reason { | identity path-computation-error-reason { | |||
| description | description | |||
| "Base identity for path computation error reasons."; | "Base identity for path computation error reasons."; | |||
| } | } | |||
| identity path-computation-error-no-topology { | identity path-computation-error-no-topology { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because there is no topology | "Path computation has failed because there is no topology | |||
| with the provided topology-identifier."; | with the provided topology-identifier."; | |||
| } | } | |||
| identity path-computation-error-no-dependent-server { | ||||
| base path-computation-error-reason; | ||||
| description | ||||
| "Path computation has failed because one or more dependent | ||||
| path computation servers are unavailable. | ||||
| The dependent path computation server could be | ||||
| a Backward-Recursive Path Computation (BRPC) downstream | ||||
| PCE or a child PCE."; | ||||
| reference | ||||
| "RFC5441, RFC8685"; | ||||
| } | ||||
| identity path-computation-error-pce-unavailable { | identity path-computation-error-no-dependent-server { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because PCE is not available."; | "Path computation has failed because one or more dependent | |||
| reference | path computation servers are unavailable. | |||
| "RFC5440"; | The dependent path computation server could be | |||
| } | a Backward-Recursive Path Computation (BRPC) downstream | |||
| PCE or a child PCE."; | ||||
| reference | ||||
| "RFC5441, RFC8685"; | ||||
| } | ||||
| identity path-computation-error-no-inclusion-hop { | identity path-computation-error-pce-unavailable { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because there is no | "Path computation has failed because PCE is not available."; | |||
| node or link provided by one or more inclusion hops."; | reference | |||
| reference | "RFC5440"; | |||
| "RFC8685"; | } | |||
| } | ||||
| identity path-computation-error-destination-unknown-in-domain { | identity path-computation-error-no-inclusion-hop { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because the destination node is | "Path computation has failed because there is no | |||
| unknown in indicated destination domain."; | node or link provided by one or more inclusion hops."; | |||
| reference | reference | |||
| "RFC8685"; | "RFC8685"; | |||
| } | } | |||
| identity path-computation-error-no-resource { | identity path-computation-error-destination-unknown-in-domain { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because there is no | "Path computation has failed because the destination node is | |||
| available resource in one or more domains."; | unknown in indicated destination domain."; | |||
| reference | reference | |||
| "RFC8685"; | "RFC8685"; | |||
| } | } | |||
| identity path-computation-error-child-pce-unresponsive { | identity path-computation-error-no-resource { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because child PCE is not | "Path computation has failed because there is no | |||
| responsive."; | available resource in one or more domains."; | |||
| reference | reference | |||
| "RFC8685"; | "RFC8685"; | |||
| } | } | |||
| identity path-computation-error-destination-domain-unknown { | identity path-computation-error-child-pce-unresponsive { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because the destination domain | "Path computation has failed because child PCE is not | |||
| was unknown."; | responsive."; | |||
| reference | ||||
| "RFC8685"; | ||||
| } | ||||
| identity path-computation-error-p2mp { | reference | |||
| base path-computation-error-reason; | "RFC8685"; | |||
| description | } | |||
| "Path computation has failed because of P2MP reachability | ||||
| problem."; | ||||
| reference | ||||
| "RFC8306"; | ||||
| } | ||||
| identity path-computation-error-no-gco-migration { | identity path-computation-error-destination-domain-unknown { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because of no Global Concurrent | "Path computation has failed because the destination domain | |||
| Optimization (GCO) migration path found."; | was unknown."; | |||
| reference | reference | |||
| "RFC5557"; | "RFC8685"; | |||
| } | } | |||
| identity path-computation-error-no-gco-solution { | identity path-computation-error-p2mp { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because of no GCO solution | "Path computation has failed because of P2MP reachability | |||
| found."; | problem."; | |||
| reference | reference | |||
| "RFC5557"; | "RFC8306"; | |||
| } | } | |||
| identity path-computation-error-path-not-found { | identity path-computation-error-no-gco-migration { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation no path found error reason."; | "Path computation has failed because of no Global Concurrent | |||
| Optimization (GCO) migration path found."; | ||||
| reference | ||||
| "RFC5557"; | ||||
| } | ||||
| reference | identity path-computation-error-no-gco-solution { | |||
| "RFC5440"; | base path-computation-error-reason; | |||
| } | description | |||
| "Path computation has failed because of no GCO solution | ||||
| found."; | ||||
| reference | ||||
| "RFC5557"; | ||||
| } | ||||
| identity path-computation-error-pks-expansion { | identity path-computation-error-path-not-found { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because of Path-Key Subobject | "Path computation no path found error reason."; | |||
| (PKS) expansion failure."; | reference | |||
| reference | "RFC5440"; | |||
| "RFC5520"; | } | |||
| } | identity path-computation-error-pks-expansion { | |||
| base path-computation-error-reason; | ||||
| description | ||||
| "Path computation has failed because of Path-Key Subobject | ||||
| (PKS) expansion failure."; | ||||
| reference | ||||
| "RFC5520"; | ||||
| } | ||||
| identity path-computation-error-brpc-chain-unavailable { | identity path-computation-error-brpc-chain-unavailable { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because PCE BRPC chain | "Path computation has failed because PCE BRPC chain | |||
| unavailable."; | unavailable."; | |||
| reference | reference | |||
| "RFC5441"; | "RFC5441"; | |||
| } | } | |||
| identity path-computation-error-source-unknown { | identity path-computation-error-source-unknown { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because source node is unknown."; | "Path computation has failed because source node is unknown."; | |||
| reference | reference | |||
| "RFC5440"; | "RFC5440"; | |||
| } | } | |||
| identity path-computation-error-destination-unknown { | identity path-computation-error-destination-unknown { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because destination node is | "Path computation has failed because destination node is | |||
| unknown."; | unknown."; | |||
| reference | reference | |||
| "RFC5440"; | "RFC5440"; | |||
| } | } | |||
| identity path-computation-error-no-server { | identity path-computation-error-no-server { | |||
| base path-computation-error-reason; | base path-computation-error-reason; | |||
| description | description | |||
| "Path computation has failed because path computation | "Path computation has failed because path computation | |||
| server is unavailable."; | server is unavailable."; | |||
| reference | reference | |||
| "RFC5440"; | "RFC5440"; | |||
| } | } | |||
| identity tunnel-actions-type { | ||||
| description | ||||
| "TE tunnel actions type."; | ||||
| } | ||||
| identity tunnel-action-reoptimize { | identity tunnel-actions-type { | |||
| base tunnel-actions-type; | description | |||
| description | "TE tunnel actions type."; | |||
| "Reoptimize tunnel action type."; | } | |||
| } | identity tunnel-action-reoptimize { | |||
| base tunnel-actions-type; | ||||
| description | ||||
| "Reoptimize tunnel action type."; | ||||
| } | ||||
| identity tunnel-admin-auto { | identity tunnel-admin-auto { | |||
| base te-types:tunnel-admin-state-type; | base te-types:tunnel-admin-state-type; | |||
| description | description | |||
| "Tunnel administrative auto state. The administrative status in | "Tunnel administrative auto state. The administrative status | |||
| state datastore transitions to 'tunnel-admin-up' when the tunnel | in state datastore transitions to 'tunnel-admin-up' when the | |||
| used by the client layer, and to 'tunnel-admin-down' when it is | tunnel used by the client layer, and to 'tunnel-admin-down' | |||
| not used by the client layer."; | when it is not used by the client layer."; | |||
| } | } | |||
| identity association-type-diversity { | identity association-type-diversity { | |||
| base te-types:association-type; | base te-types:association-type; | |||
| description | description | |||
| "Association Type diversity used to associate LSPs whose paths | "Association Type diversity used to associate LSPs whose paths | |||
| are to be diverse from each other."; | are to be diverse from each other."; | |||
| reference | reference | |||
| "RFC8800"; | "RFC8800"; | |||
| } | } | |||
| identity protocol-origin-type { | identity protocol-origin-type { | |||
| description | description | |||
| "Base identity for protocol origin type."; | "Base identity for protocol origin type."; | |||
| } | } | |||
| identity protocol-origin-api { | identity protocol-origin-api { | |||
| base protocol-origin-type; | base protocol-origin-type; | |||
| description | description | |||
| "Protocol origin is via Application Programmable Interface | "Protocol origin is via Application Programmable Interface | |||
| (API)."; | (API)."; | |||
| } | } | |||
| identity protocol-origin-pcep { | identity protocol-origin-pcep { | |||
| base protocol-origin-type; | base protocol-origin-type; | |||
| description | description | |||
| "Protocol origin is Path Computation Engine Protocol (PCEP)."; | "Protocol origin is Path Computation Engine Protocol (PCEP)."; | |||
| reference "RFC5440"; | reference "RFC5440"; | |||
| } | } | |||
| identity protocol-origin-bgp { | identity protocol-origin-bgp { | |||
| base protocol-origin-type; | base protocol-origin-type; | |||
| description | description | |||
| "Protocol origin is Border Gateway Protocol (BGP)."; | "Protocol origin is Border Gateway Protocol (BGP)."; | |||
| reference "RFC5512"; | reference "RFC5512"; | |||
| } | } | |||
| typedef tunnel-ref { | typedef tunnel-ref { | |||
| type leafref { | type leafref { | |||
| path "/te:te/te:tunnels/te:tunnel/te:name"; | path "/te:te/te:tunnels/te:tunnel/te:name"; | |||
| } | } | |||
| description | description | |||
| "This type is used by data models that need to reference | "This type is used by data models that need to reference | |||
| configured TE tunnel."; | configured TE tunnel."; | |||
| } | } | |||
| typedef path-ref { | typedef path-ref { | |||
| type union { | type union { | |||
| type leafref { | type leafref { | |||
| path "/te:te/te:tunnels/te:tunnel/" | path "/te:te/te:tunnels/te:tunnel/" | |||
| + "te:primary-paths/te:primary-path/te:name"; | + "te:primary-paths/te:primary-path/te:name"; | |||
| } | } | |||
| type leafref { | type leafref { | |||
| path "/te:te/te:tunnels/te:tunnel/" | path "/te:te/te:tunnels/te:tunnel/" | |||
| + "te:secondary-paths/te:secondary-path/te:name"; | + "te:secondary-paths/te:secondary-path/te:name"; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "This type is used by data models that need to reference | "This type is used by data models that need to reference | |||
| configured primary or secondary path of a TE tunnel."; | configured primary or secondary path of a TE tunnel."; | |||
| } | } | |||
| typedef te-gen-node-id { | typedef te-gen-node-id { | |||
| type union { | type union { | |||
| type te-types:te-node-id; | type te-types:te-node-id; | |||
| type inet:ip-address; | type inet:ip-address; | |||
| } | } | |||
| description | description | |||
| "Generic type that identifies a node in a TE topology."; | "Generic type that identifies a node in a TE topology."; | |||
| } | } | |||
| /** | /** | |||
| * TE tunnel generic groupings | * TE tunnel generic groupings | |||
| */ | */ | |||
| grouping te-generic-node-id { | grouping te-generic-node-id { | |||
| description | description | |||
| "A reusable grouping for a TE generic node identifier."; | "A reusable grouping for a TE generic node identifier."; | |||
| leaf id { | leaf id { | |||
| type te-gen-node-id; | type te-gen-node-id; | |||
| description | description | |||
| "The identifier of the node. Can be represented as IP | "The identifier of the node. Can be represented as IP | |||
| address or dotted quad address."; | address or dotted quad address."; | |||
| } | } | |||
| leaf type { | leaf type { | |||
| type enumeration { | type enumeration { | |||
| enum ip { | enum ip { | |||
| description | description | |||
| "IP address representation of the node identifier."; | "IP address representation of the node identifier."; | |||
| } | } | |||
| enum dotted-quad { | enum dotted-quad { | |||
| description | description | |||
| "Dotted quad address representation of the node | "Dotted quad address representation of the node | |||
| identifier."; | identifier."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "Type of node identifier representation."; | "Type of node identifier representation."; | |||
| } | } | |||
| } | } | |||
| grouping primary-path { | grouping primary-path { | |||
| description | description | |||
| "The tunnel primary path properties."; | "The tunnel primary path properties."; | |||
| uses path-common-properties; | uses path-common-properties; | |||
| uses path-preference; | uses path-preference; | |||
| uses k-requested-paths; | uses k-requested-paths; | |||
| uses path-compute-info; | uses path-compute-info; | |||
| uses path-state; | uses path-state; | |||
| } | } | |||
| grouping primary-reverse-path { | grouping primary-reverse-path { | |||
| description | description | |||
| "The tunnel primary reverse path properties."; | "The tunnel primary reverse path properties."; | |||
| reference | reference | |||
| "RFC7551"; | "RFC7551"; | |||
| uses path-common-properties; | uses path-common-properties; | |||
| uses path-compute-info; | uses path-compute-info; | |||
| uses path-state; | uses path-state; | |||
| } | } | |||
| grouping secondary-path { | grouping secondary-path { | |||
| description | description | |||
| "The tunnel secondary path properties."; | "The tunnel secondary path properties."; | |||
| uses path-common-properties; | uses path-common-properties; | |||
| uses path-preference; | uses path-preference; | |||
| uses path-compute-info; | uses path-compute-info; | |||
| uses protection-restoration-properties; | uses protection-restoration-properties; | |||
| uses path-state; | uses path-state; | |||
| } | ||||
| } | grouping secondary-reverse-path { | |||
| description | ||||
| "The tunnel secondary reverse path properties."; | ||||
| grouping secondary-reverse-path { | uses path-common-properties; | |||
| description | uses path-preference; | |||
| "The tunnel secondary reverse path properties."; | uses path-compute-info; | |||
| uses path-common-properties; | uses protection-restoration-properties; | |||
| uses path-preference; | uses path-state; | |||
| uses path-compute-info; | } | |||
| uses protection-restoration-properties; | ||||
| uses path-state; | ||||
| } | ||||
| grouping path-common-properties { | grouping path-common-properties { | |||
| description | description | |||
| "Common path attributes."; | "Common path attributes."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "TE path name."; | "TE path name."; | |||
| } | } | |||
| leaf path-computation-method { | leaf path-computation-method { | |||
| type identityref { | type identityref { | |||
| base te-types:path-computation-method; | base te-types:path-computation-method; | |||
| } | } | |||
| default "te-types:path-locally-computed"; | default "te-types:path-locally-computed"; | |||
| description | description | |||
| "The method used for computing the path, either | "The method used for computing the path, either | |||
| locally computed, queried from a server or not | locally computed, queried from a server or not | |||
| computed at all (explicitly configured)."; | computed at all (explicitly configured)."; | |||
| } | } | |||
| container path-computation-server { | container path-computation-server { | |||
| when "derived-from-or-self(../path-computation-method, " | when "derived-from-or-self(../path-computation-method, " | |||
| + "'te-types:path-externally-queried')" { | + "'te-types:path-externally-queried')" { | |||
| description | description | |||
| "The path-computation server when the path is | "The path-computation server when the path is | |||
| externally queried."; | externally queried."; | |||
| } | } | |||
| uses te-generic-node-id; | uses te-generic-node-id; | |||
| description | description | |||
| "Address of the external path computation | "Address of the external path computation | |||
| server."; | server."; | |||
| } | } | |||
| leaf compute-only { | leaf compute-only { | |||
| type empty; | type empty; | |||
| description | description | |||
| "When set, the path is computed and updated whenever | "When set, the path is computed and updated whenever | |||
| the topology is updated. No resources are committed | the topology is updated. No resources are committed | |||
| or reserved in the network."; | or reserved in the network."; | |||
| } | ||||
| leaf use-path-computation { | ||||
| when "derived-from-or-self(../path-computation-method, " | ||||
| + "'te-types:path-locally-computed')"; | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "When 'true' indicates the path is dynamically computed | ||||
| and/or validated against the Traffic-Engineering Database | ||||
| (TED), and when 'false' indicates no validation against | ||||
| the TED is required."; | ||||
| } | ||||
| leaf lockdown { | ||||
| type empty; | ||||
| description | ||||
| "Indicates no reoptimization to be attempted for this path."; | ||||
| } | ||||
| leaf path-scope { | ||||
| type identityref { | ||||
| base te-types:path-scope-type; | ||||
| } | ||||
| default "te-types:path-scope-end-to-end"; | ||||
| config false; | ||||
| description | ||||
| "Path scope if segment or an end-to-end path."; | ||||
| } | ||||
| } | ||||
| } | /* This grouping will be re-used in path-computation rpc */ | |||
| leaf use-path-computation { | ||||
| when "derived-from-or-self(../path-computation-method, " | ||||
| + "'te-types:path-locally-computed')"; | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "When 'true' indicates the path is dynamically computed and/or | ||||
| validated against the Traffic-Engineering Database (TED), | ||||
| and when 'false' indicates no validation against the TED is | ||||
| required."; | ||||
| } | ||||
| leaf lockdown { | ||||
| type empty; | ||||
| description | ||||
| "Indicates no reoptimization to be attempted for this path."; | ||||
| } | ||||
| leaf path-scope { | ||||
| type identityref { | ||||
| base te-types:path-scope-type; | ||||
| } | ||||
| default "te-types:path-scope-end-to-end"; | ||||
| config false; | ||||
| description | ||||
| "Path scope if segment or an end-to-end path."; | ||||
| } | ||||
| } | ||||
| /* This grouping will be re-used in path-computation rpc */ | grouping path-compute-info { | |||
| description | ||||
| "Attributes used for path computation request."; | ||||
| uses tunnel-associations-properties; | ||||
| uses te-types:generic-path-optimization; | ||||
| leaf named-path-constraint { | ||||
| if-feature "te-types:named-path-constraints"; | ||||
| type leafref { | ||||
| path "/te:te/te:globals/te:named-path-constraints/" | ||||
| + "te:named-path-constraint/te:name"; | ||||
| } | ||||
| description | ||||
| "Reference to a globally defined named path constraint set."; | ||||
| } | ||||
| uses path-constraints-common; | ||||
| } | ||||
| grouping path-compute-info { | /* This grouping will be re-used in path-computation rpc */ | |||
| description | ||||
| "Attributes used for path computation request."; | ||||
| uses tunnel-associations-properties; | ||||
| uses te-types:generic-path-optimization; | ||||
| leaf named-path-constraint { | ||||
| if-feature "te-types:named-path-constraints"; | ||||
| type leafref { | ||||
| path "/te:te/te:globals/te:named-path-constraints/" | ||||
| + "te:named-path-constraint/te:name"; | ||||
| } | ||||
| description | ||||
| "Reference to a globally defined named path constraint set."; | ||||
| } | ||||
| uses path-constraints-common; | ||||
| } | ||||
| /* This grouping will be re-used in path-computation rpc */ | grouping path-preference { | |||
| grouping path-preference { | description | |||
| description | "The path preference."; | |||
| "The path preference."; | leaf preference { | |||
| leaf preference { | type uint8 { | |||
| type uint8 { | range "1..255"; | |||
| range "1..255"; | } | |||
| } | default "1"; | |||
| default "1"; | description | |||
| description | "Specifies a preference for this path. The lower the number | |||
| "Specifies a preference for this path. The lower the number | higher the preference."; | |||
| higher the preference."; | } | |||
| } | } | |||
| } | ||||
| /* This grouping will be re-used in path-computation rpc */ | /* This grouping will be re-used in path-computation rpc */ | |||
| grouping k-requested-paths { | grouping k-requested-paths { | |||
| description | description | |||
| "The k-shortest paths requests."; | "The k-shortest paths requests."; | |||
| leaf k-requested-paths { | leaf k-requested-paths { | |||
| type uint8; | type uint8; | |||
| default "1"; | default "1"; | |||
| description | description | |||
| "The number of k-shortest-paths requested from the path | "The number of k-shortest-paths requested from the path | |||
| computation server and returned sorted by its optimization | computation server and returned sorted by its optimization | |||
| objective. The value 0 all possible paths."; | objective. The value 0 all possible paths."; | |||
| } | } | |||
| } | } | |||
| grouping path-properties { | grouping path-properties { | |||
| description | description | |||
| "TE computed path properties grouping."; | "TE computed path properties grouping."; | |||
| uses te-types:generic-path-properties { | uses te-types:generic-path-properties { | |||
| augment "path-properties" { | augment "path-properties" { | |||
| description | description | |||
| "additional path properties returned by path computation."; | "additional path properties returned by path computation."; | |||
| uses te-types:te-bandwidth; | uses te-types:te-bandwidth; | |||
| leaf disjointness-type { | leaf disjointness-type { | |||
| type te-types:te-path-disjointness; | type te-types:te-path-disjointness; | |||
| config false; | config false; | |||
| description | description | |||
| "The type of resource disjointness. | "The type of resource disjointness. | |||
| When reported for a primary path, it represents the | When reported for a primary path, it represents the | |||
| minimum level of disjointness of all the secondary | minimum level of disjointness of all the secondary | |||
| paths. | paths. | |||
| When reported for a secondary path, it represents the | When reported for a secondary path, it represents the | |||
| disjointness of the secondary path."; | disjointness of the secondary path."; | |||
| } | } | |||
| } | ||||
| } | ||||
| } | ||||
| grouping path-state { | ||||
| description | ||||
| "TE per path state parameters."; | ||||
| uses path-computation-response; | ||||
| uses lsp-provisioning-error-info { | ||||
| augment "lsp-provisioning-error-infos/" | ||||
| + "lsp-provisioning-error-info" { | ||||
| description | ||||
| "Augmentation of LSP provisioning information under a | ||||
| specific path."; | ||||
| leaf lsp-id { | ||||
| type uint16; | ||||
| description | ||||
| "The LSP-ID for which path computation was performed."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container lsps { | ||||
| config false; | ||||
| description | ||||
| "The TE LSPs container."; | ||||
| list lsp { | ||||
| key "node lsp-id"; | ||||
| description | ||||
| "List of LSPs associated with the tunnel."; | ||||
| leaf tunnel-name { | ||||
| type leafref { | ||||
| path "/te:te/te:lsps/te:lsp/te:tunnel-name"; | ||||
| } | ||||
| description "TE tunnel name."; | ||||
| } | ||||
| leaf node { | ||||
| type leafref { | ||||
| path "/te:te/te:lsps/te:lsp/te:node"; | ||||
| } | ||||
| description "The node where the LSP state resides on."; | ||||
| } | ||||
| leaf lsp-id { | ||||
| type leafref { | ||||
| path "/te:te/te:lsps/te:lsp/te:lsp-id"; | ||||
| } | ||||
| description "The TE LSP identifier."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | /* This grouping will be re-used in path-computation rpc */ | |||
| } | grouping path-computation-response { | |||
| } | description | |||
| "Attributes reported by path computation response."; | ||||
| container computed-paths-properties { | ||||
| config false; | ||||
| description | ||||
| "Computed path properties container."; | ||||
| list computed-path-properties { | ||||
| key "k-index"; | ||||
| description | ||||
| "List of computed paths."; | ||||
| leaf k-index { | ||||
| type uint8; | ||||
| description | ||||
| "The k-th path returned from the computation server. | ||||
| A lower k value path is more optimal than higher k | ||||
| value path(s)"; | ||||
| } | ||||
| uses path-properties { | ||||
| description | ||||
| "The TE path computed properties."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container computed-path-error-infos { | ||||
| config false; | ||||
| description | ||||
| "Path computation information container."; | ||||
| list computed-path-error-info { | ||||
| description | ||||
| "List of path computation info entries."; | ||||
| leaf error-description { | ||||
| type string; | ||||
| description | ||||
| "Textual representation of the error occurred during | ||||
| path computation."; | ||||
| } | ||||
| leaf error-timestamp { | ||||
| type yang:date-and-time; | ||||
| description | ||||
| "Timestamp of last path computation attempt."; | ||||
| } | ||||
| leaf error-reason { | ||||
| type identityref { | ||||
| base path-computation-error-reason; | ||||
| } | ||||
| description | ||||
| "Reason for the path computation error."; | ||||
| grouping path-state { | } | |||
| description | } | |||
| "TE per path state parameters."; | } | |||
| uses path-computation-response; | } | |||
| uses lsp-provisioning-error-info { | ||||
| augment "lsp-provisioning-error-infos/" | ||||
| + "lsp-provisioning-error-info" { | ||||
| description | ||||
| "Augmentation of LSP provisioning information under a | ||||
| specific path."; | ||||
| leaf lsp-id { | ||||
| type uint16; | ||||
| description | ||||
| "The LSP-ID for which path computation was performed."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container lsps { | ||||
| config false; | ||||
| description | ||||
| "The TE LSPs container."; | ||||
| list lsp { | ||||
| key "node lsp-id"; | ||||
| description | ||||
| "List of LSPs associated with the tunnel."; | ||||
| leaf tunnel-name { | ||||
| type leafref { | ||||
| path "/te:te/te:lsps/te:lsp/te:tunnel-name"; | ||||
| } | ||||
| description "TE tunnel name."; | ||||
| } | ||||
| leaf node { | ||||
| type leafref { | ||||
| path "/te:te/te:lsps/te:lsp/te:node"; | ||||
| } | ||||
| description "The node where the LSP state resides on."; | ||||
| } | ||||
| leaf lsp-id { | ||||
| type leafref { | ||||
| path "/te:te/te:lsps/te:lsp/te:lsp-id"; | ||||
| } | ||||
| description "The TE LSP identifier."; | ||||
| } | ||||
| } | ||||
| } | grouping lsp-provisioning-error-info { | |||
| } | description | |||
| "Grouping for LSP provisioning error information."; | ||||
| container lsp-provisioning-error-infos { | ||||
| config false; | ||||
| description | ||||
| "LSP provisioning error information."; | ||||
| list lsp-provisioning-error-info { | ||||
| description | ||||
| "List of LSP provisioning error info entries."; | ||||
| leaf error-description { | ||||
| type string; | ||||
| description | ||||
| "Textual representation of the error occurred during | ||||
| path computation."; | ||||
| } | ||||
| leaf error-timestamp { | ||||
| type yang:date-and-time; | ||||
| description | ||||
| "Timestamp of when the reported error occurred."; | ||||
| } | ||||
| leaf error-node-id { | ||||
| type te-types:te-node-id; | ||||
| default "0.0.0.0"; | ||||
| description | ||||
| "Node identifier of node where error occurred."; | ||||
| } | ||||
| leaf error-link-id { | ||||
| type te-types:te-tp-id; | ||||
| default "0"; | ||||
| description | ||||
| "Link ID where the error occurred."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| /* This grouping will be re-used in path-computation rpc */ | grouping protection-restoration-properties-state { | |||
| description | ||||
| "Protection parameters grouping."; | ||||
| leaf lockout-of-normal { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "When set to 'True', it represents a lockout of normal | ||||
| traffic external command. When set to 'False', it | ||||
| represents a clear lockout of normal traffic external | ||||
| command. The lockout of normal traffic command applies | ||||
| to this Tunnel."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf freeze { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "When set to 'True', it represents a freeze external command. | ||||
| When set to 'False', it represents a clear freeze external | ||||
| command. The freeze command applies to all the Tunnels which | ||||
| are sharing the protection resources with this Tunnel."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf lsp-protection-role { | ||||
| type enumeration { | ||||
| enum working { | ||||
| description | ||||
| "A working LSP must be a primary LSP whilst a protecting | ||||
| LSP can be either a primary or a secondary LSP. Also, | ||||
| known as protected LSPs when working LSPs are associated | ||||
| with protecting LSPs."; | ||||
| } | ||||
| enum protecting { | ||||
| description | ||||
| "A secondary LSP is an LSP that has been provisioned | ||||
| in the control plane only; e.g. resource allocation | ||||
| has not been committed at the data plane."; | ||||
| } | ||||
| } | ||||
| default "working"; | ||||
| description | ||||
| "LSP role type."; | ||||
| reference | ||||
| "RFC4872, section 4.2.1"; | ||||
| } | ||||
| leaf lsp-protection-state { | ||||
| type identityref { | ||||
| base te-types:lsp-protection-state; | ||||
| } | ||||
| default "te-types:normal"; | ||||
| description | ||||
| "The state of the APS state machine controlling which | ||||
| tunnels is using the resources of the protecting LSP."; | ||||
| } | ||||
| leaf protection-group-ingress-node-id { | ||||
| type te-types:te-node-id; | ||||
| default "0.0.0.0"; | ||||
| description | ||||
| "Indicates the te-node-id of the protection group | ||||
| ingress node when the APS state represents an external | ||||
| command (LoP, SF, MS) applied to it or a WTR timer | ||||
| running on it. If the external command is not applied to | ||||
| the ingress node or the WTR timer is not running on it, | ||||
| this attribute is not specified. A value 0.0.0.0 is used | ||||
| when the te-node-id of the protection group ingress node is | ||||
| unknown (e.g., because the ingress node is outside the scope | ||||
| of control of the server)"; | ||||
| } | ||||
| leaf protection-group-egress-node-id { | ||||
| type te-types:te-node-id; | ||||
| default "0.0.0.0"; | ||||
| description | ||||
| "Indicates the te-node-id of the protection group egress node | ||||
| when the APS state represents an external command (LoP, SF, | ||||
| MS) applied to it or a WTR timer running on it. If the | ||||
| external command is not applied to the ingress node or | ||||
| the WTR timer is not running on it, this attribute is not | ||||
| specified. A value 0.0.0.0 is used when the te-node-id of | ||||
| the protection group ingress node is unknown (e.g., because | ||||
| the ingress node is outside the scope of control of the | ||||
| server)"; | ||||
| } | ||||
| } | ||||
| grouping path-computation-response { | grouping protection-restoration-properties { | |||
| description | description | |||
| "Attributes reported by path computation response."; | "Protection and restoration parameters."; | |||
| container computed-paths-properties { | container protection { | |||
| config false; | description | |||
| description | "Protection parameters."; | |||
| "Computed path properties container."; | leaf enable { | |||
| list computed-path-properties { | type boolean; | |||
| key "k-index"; | default "false"; | |||
| description | description | |||
| "List of computed paths."; | "A flag to specify if LSP protection is enabled."; | |||
| leaf k-index { | reference | |||
| type uint8; | "RFC4427"; | |||
| description | } | |||
| "The k-th path returned from the computation server. | leaf protection-type { | |||
| A lower k value path is more optimal than higher k | type identityref { | |||
| value path(s)"; | base te-types:lsp-protection-type; | |||
| } | } | |||
| uses path-properties { | default "te-types:lsp-protection-unprotected"; | |||
| description | description | |||
| "The TE path computed properties."; | "LSP protection type."; | |||
| } | } | |||
| } | leaf protection-reversion-disable { | |||
| } | type boolean; | |||
| container computed-path-error-infos { | default "false"; | |||
| config false; | description | |||
| description | "Disable protection reversion to working path."; | |||
| "Path computation information container."; | } | |||
| list computed-path-error-info { | leaf hold-off-time { | |||
| description | type uint32; | |||
| "List of path computation info entries."; | units "milli-seconds"; | |||
| leaf error-description { | default "0"; | |||
| type string; | description | |||
| description | "The time between the declaration of an SF or SD condition | |||
| "Textual representation of the error occurred during | and the initialization of the protection switching | |||
| path computation."; | algorithm."; | |||
| } | reference | |||
| leaf error-timestamp { | "RFC4427"; | |||
| type yang:date-and-time; | } | |||
| description | leaf wait-to-revert { | |||
| "Timestamp of last path computation attempt."; | type uint16; | |||
| } | units "seconds"; | |||
| leaf error-reason { | description | |||
| type identityref { | "Time to wait before attempting LSP reversion."; | |||
| base path-computation-error-reason; | reference | |||
| } | "RFC4427"; | |||
| description | } | |||
| "Reason for the path computation error."; | leaf aps-signal-id { | |||
| } | type uint8 { | |||
| } | range "1..255"; | |||
| } | } | |||
| } | default "1"; | |||
| description | ||||
| "The APS signal number used to reference the traffic of | ||||
| this tunnel. The default value for normal traffic is 1. | ||||
| The default value for extra-traffic is 255. If not | ||||
| specified, non-default values can be assigned by the | ||||
| server, if and only if, the server controls both | ||||
| endpoints."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| } | ||||
| container restoration { | ||||
| description | ||||
| "Restoration parameters."; | ||||
| leaf enable { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "A flag to specify if LSP restoration is enabled."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf restoration-type { | ||||
| type identityref { | ||||
| base te-types:lsp-restoration-type; | ||||
| } | ||||
| default "te-types:lsp-restoration-restore-any"; | ||||
| description | ||||
| "LSP restoration type."; | ||||
| } | ||||
| leaf restoration-scheme { | ||||
| type identityref { | ||||
| base te-types:restoration-scheme-type; | ||||
| } | ||||
| default "te-types:restoration-scheme-preconfigured"; | ||||
| description | ||||
| "LSP restoration scheme."; | ||||
| } | ||||
| leaf restoration-reversion-disable { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "Disable restoration reversion to working path."; | ||||
| } | ||||
| leaf hold-off-time { | ||||
| type uint32; | ||||
| units "milli-seconds"; | ||||
| description | ||||
| "The time between the declaration of an SF or SD condition | ||||
| and the initialization of the protection switching | ||||
| algorithm."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf wait-to-restore { | ||||
| type uint16; | ||||
| units "seconds"; | ||||
| description | ||||
| "Time to wait before attempting LSP restoration."; | ||||
| grouping lsp-provisioning-error-info { | reference | |||
| description | "RFC4427"; | |||
| "Grouping for LSP provisioning error information."; | } | |||
| container lsp-provisioning-error-infos { | leaf wait-to-revert { | |||
| config false; | type uint16; | |||
| description | units "seconds"; | |||
| "LSP provisioning error information."; | description | |||
| list lsp-provisioning-error-info { | "Time to wait before attempting LSP reversion."; | |||
| description | reference | |||
| "List of LSP provisioning error info entries."; | "RFC4427"; | |||
| leaf error-description { | } | |||
| type string; | } | |||
| description | } | |||
| "Textual representation of the error occurred during | ||||
| path computation."; | ||||
| } | ||||
| leaf error-timestamp { | ||||
| type yang:date-and-time; | ||||
| description | ||||
| "Timestamp of when the reported error occurred."; | ||||
| } | ||||
| leaf error-node-id { | ||||
| type te-types:te-node-id; | ||||
| default "0.0.0.0"; | ||||
| description | ||||
| "Node identifier of node where error occurred."; | ||||
| } | ||||
| leaf error-link-id { | ||||
| type te-types:te-tp-id; | ||||
| default "0"; | ||||
| description | ||||
| "Link ID where the error occurred."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping protection-restoration-properties-state { | grouping tunnel-associations-properties { | |||
| description | description | |||
| "Protection parameters grouping."; | "TE tunnel association grouping."; | |||
| leaf lockout-of-normal { | container association-objects { | |||
| type boolean; | description | |||
| default "false"; | "TE tunnel associations."; | |||
| description | list association-object { | |||
| "When set to 'True', it represents a lockout of normal | key "association-key"; | |||
| traffic external command. When set to 'False', it | unique "type id source/id source/type"; | |||
| represents a clear lockout of normal traffic external | description | |||
| command. The lockout of normal traffic command applies | "List of association base objects."; | |||
| to this Tunnel."; | reference | |||
| reference | "RFC4872"; | |||
| "RFC4427"; | leaf association-key { | |||
| } | type string; | |||
| leaf freeze { | description | |||
| type boolean; | "Association key used to identify a specific | |||
| default "false"; | association in the list"; | |||
| description | } | |||
| "When set to 'True', it represents a freeze external command. | leaf type { | |||
| When set to 'False', it represents a clear freeze external | type identityref { | |||
| command. The freeze command applies to all the Tunnels which | base te-types:association-type; | |||
| are sharing the protection resources with this Tunnel."; | } | |||
| reference | description | |||
| "RFC4427"; | "Association type."; | |||
| } | reference | |||
| leaf lsp-protection-role { | "RFC4872"; | |||
| type enumeration { | } | |||
| enum working { | leaf id { | |||
| description | type uint16; | |||
| "A working LSP must be a primary LSP whilst a protecting | description | |||
| LSP can be either a primary or a secondary LSP. Also, | "Association identifier."; | |||
| known as protected LSPs when working LSPs are associated | reference | |||
| with protecting LSPs."; | "RFC4872"; | |||
| } | ||||
| enum protecting { | ||||
| description | ||||
| "A secondary LSP is an LSP that has been provisioned | ||||
| in the control plane only; e.g. resource allocation | ||||
| has not been committed at the data plane."; | ||||
| } | ||||
| } | ||||
| default "working"; | ||||
| description | ||||
| "LSP role type."; | ||||
| reference | ||||
| "RFC4872, section 4.2.1"; | ||||
| } | ||||
| leaf lsp-protection-state { | ||||
| type identityref { | ||||
| base te-types:lsp-protection-state; | ||||
| } | ||||
| default "te-types:normal"; | ||||
| description | ||||
| "The state of the APS state machine controlling which | ||||
| tunnels is using the resources of the protecting LSP."; | ||||
| } | ||||
| leaf protection-group-ingress-node-id { | ||||
| type te-types:te-node-id; | ||||
| default "0.0.0.0"; | ||||
| description | ||||
| "Indicates the te-node-id of the protection group | ||||
| ingress node when the APS state represents an external | ||||
| command (LoP, SF, MS) applied to it or a WTR timer | ||||
| running on it. If the external command is not applied to | ||||
| the ingress node or the WTR timer is not running on it, | ||||
| this attribute is not specified. A value 0.0.0.0 is used | ||||
| when the te-node-id of the protection group ingress node is | ||||
| unknown (e.g., because the ingress node is outside the scope | ||||
| of control of the server)"; | ||||
| } | ||||
| leaf protection-group-egress-node-id { | ||||
| type te-types:te-node-id; | ||||
| default "0.0.0.0"; | ||||
| description | ||||
| "Indicates the te-node-id of the protection group egress node | ||||
| when the APS state represents an external command (LoP, SF, | ||||
| MS) applied to it or a WTR timer running on it. If the | ||||
| external command is not applied to the ingress node or | ||||
| the WTR timer is not running on it, this attribute is not | ||||
| specified. A value 0.0.0.0 is used when the te-node-id of | ||||
| the protection group ingress node is unknown (e.g., because | ||||
| the ingress node is outside the scope of control of the | ||||
| server)"; | ||||
| } | ||||
| } | ||||
| grouping protection-restoration-properties { | } | |||
| description | container source { | |||
| "Protection and restoration parameters."; | uses te-generic-node-id; | |||
| container protection { | description | |||
| description | "Association source."; | |||
| "Protection parameters."; | reference | |||
| leaf enable { | "RFC4872"; | |||
| type boolean; | } | |||
| default "false"; | } | |||
| description | list association-object-extended { | |||
| "A flag to specify if LSP protection is enabled."; | key "association-key"; | |||
| reference | unique | |||
| "RFC4427"; | "type id source/id source/type global-source extended-id"; | |||
| } | description | |||
| leaf protection-type { | "List of extended association objects."; | |||
| type identityref { | reference | |||
| base te-types:lsp-protection-type; | "RFC6780"; | |||
| } | leaf association-key { | |||
| default "te-types:lsp-protection-unprotected"; | type string; | |||
| description | description | |||
| "LSP protection type."; | "Association key used to identify a specific | |||
| } | association in the list"; | |||
| leaf protection-reversion-disable { | } | |||
| type boolean; | leaf type { | |||
| default "false"; | type identityref { | |||
| description | base te-types:association-type; | |||
| "Disable protection reversion to working path."; | } | |||
| } | description | |||
| leaf hold-off-time { | "Association type."; | |||
| type uint32; | reference | |||
| units "milli-seconds"; | "RFC4872, RFC6780"; | |||
| default "0"; | } | |||
| description | leaf id { | |||
| "The time between the declaration of an SF or SD condition | type uint16; | |||
| and the initialization of the protection switching | description | |||
| algorithm."; | "Association identifier."; | |||
| reference | reference | |||
| "RFC4427"; | "RFC4872, RFC6780"; | |||
| } | } | |||
| leaf wait-to-revert { | container source { | |||
| type uint16; | uses te-generic-node-id; | |||
| units "seconds"; | description | |||
| description | "Association source."; | |||
| "Time to wait before attempting LSP reversion."; | reference | |||
| reference | "RFC4872, RFC6780"; | |||
| "RFC4427"; | } | |||
| } | leaf global-source { | |||
| leaf aps-signal-id { | type uint32; | |||
| type uint8 { | description | |||
| range "1..255"; | "Association global source."; | |||
| } | reference | |||
| default "1"; | "RFC6780"; | |||
| description | } | |||
| "The APS signal number used to reference the traffic of this | leaf extended-id { | |||
| tunnel. The default value for normal traffic is 1. | type yang:hex-string; | |||
| The default value for extra-traffic is 255. If not specified, | description | |||
| non-default values can be assigned by the server, | "Association extended identifier."; | |||
| if and only if, the server controls both endpoints."; | reference | |||
| "RFC6780"; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| reference | /* TE tunnel configuration/state grouping */ | |||
| "RFC4427"; | /* These grouping will be re-used in path-computation rpc */ | |||
| } | ||||
| } | ||||
| container restoration { | ||||
| description | ||||
| "Restoration parameters."; | ||||
| leaf enable { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "A flag to specify if LSP restoration is enabled."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf restoration-type { | ||||
| type identityref { | ||||
| base te-types:lsp-restoration-type; | ||||
| } | ||||
| default "te-types:lsp-restoration-restore-any"; | ||||
| description | ||||
| "LSP restoration type."; | ||||
| } | ||||
| leaf restoration-scheme { | ||||
| type identityref { | ||||
| base te-types:restoration-scheme-type; | ||||
| } | ||||
| default "te-types:restoration-scheme-preconfigured"; | ||||
| description | ||||
| "LSP restoration scheme."; | ||||
| } | ||||
| leaf restoration-reversion-disable { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "Disable restoration reversion to working path."; | ||||
| } | ||||
| leaf hold-off-time { | ||||
| type uint32; | ||||
| units "milli-seconds"; | ||||
| description | ||||
| "The time between the declaration of an SF or SD condition | ||||
| and the initialization of the protection switching | ||||
| algorithm."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf wait-to-restore { | ||||
| type uint16; | ||||
| units "seconds"; | ||||
| description | ||||
| "Time to wait before attempting LSP restoration."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf wait-to-revert { | ||||
| type uint16; | ||||
| units "seconds"; | ||||
| description | ||||
| "Time to wait before attempting LSP reversion."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping tunnel-associations-properties { | grouping encoding-and-switching-type { | |||
| description | description | |||
| "TE tunnel association grouping."; | "Common grouping to define the LSP encoding and | |||
| container association-objects { | switching types"; | |||
| description | leaf encoding { | |||
| "TE tunnel associations."; | type identityref { | |||
| list association-object { | base te-types:lsp-encoding-types; | |||
| key "association-key"; | } | |||
| unique "type id source/id source/type"; | description | |||
| description | "LSP encoding type."; | |||
| "List of association base objects."; | reference | |||
| reference | "RFC3945"; | |||
| "RFC4872"; | } | |||
| leaf association-key { | leaf switching-type { | |||
| type string; | type identityref { | |||
| description | base te-types:switching-capabilities; | |||
| "Association key used to identify a specific | } | |||
| association in the list"; | description | |||
| } | "LSP switching type."; | |||
| leaf type { | reference | |||
| type identityref { | "RFC3945"; | |||
| base te-types:association-type; | } | |||
| } | } | |||
| description | ||||
| "Association type."; | ||||
| reference | ||||
| "RFC4872"; | ||||
| } | ||||
| leaf id { | ||||
| type uint16; | ||||
| description | ||||
| "Association identifier."; | ||||
| reference | ||||
| "RFC4872"; | ||||
| } | ||||
| container source { | ||||
| uses te-generic-node-id; | ||||
| description | ||||
| "Association source."; | ||||
| reference | ||||
| "RFC4872"; | ||||
| } | ||||
| } | ||||
| list association-object-extended { | ||||
| key "association-key"; | ||||
| unique | ||||
| "type id source/id source/type global-source extended-id"; | ||||
| description | ||||
| "List of extended association objects."; | ||||
| reference | ||||
| "RFC6780"; | ||||
| leaf association-key { | ||||
| type string; | ||||
| description | ||||
| "Association key used to identify a specific | ||||
| association in the list"; | ||||
| } | ||||
| leaf type { | ||||
| type identityref { | ||||
| base te-types:association-type; | ||||
| } | ||||
| description | ||||
| "Association type."; | ||||
| reference | ||||
| "RFC4872, RFC6780"; | ||||
| } | ||||
| leaf id { | ||||
| type uint16; | ||||
| description | ||||
| "Association identifier."; | ||||
| reference | ||||
| "RFC4872, RFC6780"; | ||||
| } | ||||
| container source { | ||||
| uses te-generic-node-id; | ||||
| description | ||||
| "Association source."; | ||||
| reference | ||||
| "RFC4872, RFC6780"; | ||||
| } | ||||
| leaf global-source { | ||||
| type uint32; | ||||
| description | ||||
| "Association global source."; | ||||
| reference | ||||
| "RFC6780"; | ||||
| } | ||||
| leaf extended-id { | ||||
| type yang:hex-string; | ||||
| description | ||||
| "Association extended identifier."; | ||||
| reference | ||||
| "RFC6780"; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| /* TE tunnel configuration/state grouping */ | grouping tunnel-common-attributes { | |||
| /* This grouping will be re-used in path-computation rpc */ | description | |||
| "Common grouping to define the TE tunnel parameters"; | ||||
| leaf source { | ||||
| type te-types:te-node-id; | ||||
| description | ||||
| "TE tunnel source node ID."; | ||||
| } | ||||
| leaf destination { | ||||
| type te-types:te-node-id; | ||||
| description | ||||
| "TE tunnel destination node identifier."; | ||||
| } | ||||
| leaf src-tunnel-tp-id { | ||||
| type binary; | ||||
| description | ||||
| "TE tunnel source termination point identifier."; | ||||
| } | ||||
| leaf dst-tunnel-tp-id { | ||||
| type binary; | ||||
| description | ||||
| "TE tunnel destination termination point identifier."; | ||||
| } | ||||
| leaf bidirectional { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "Indicates a bidirectional co-routed LSP."; | ||||
| } | ||||
| } | ||||
| grouping tunnel-hierarchy-properties { | grouping tunnel-hierarchy-properties { | |||
| description | description | |||
| "A grouping for TE tunnel hierarchy information."; | "A grouping for TE tunnel hierarchy information."; | |||
| container hierarchy { | container hierarchy { | |||
| description | description | |||
| "Container for TE hierarchy related information."; | "Container for TE hierarchy related information."; | |||
| container dependency-tunnels { | container dependency-tunnels { | |||
| description | description | |||
| "List of tunnels that this tunnel can be potentially | "List of tunnels that this tunnel can be potentially | |||
| dependent on."; | dependent on."; | |||
| list dependency-tunnel { | list dependency-tunnel { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "A tunnel entry that this tunnel can potentially depend | "A tunnel entry that this tunnel can potentially depend | |||
| on."; | on."; | |||
| leaf name { | leaf name { | |||
| type leafref { | type leafref { | |||
| path "/te:te/te:tunnels/te:tunnel/te:name"; | path "/te:te/te:tunnels/te:tunnel/te:name"; | |||
| require-instance false; | require-instance false; | |||
| } | } | |||
| description | description | |||
| "Dependency tunnel name. The tunnel may not have been | "Dependency tunnel name. The tunnel may not have been | |||
| instantiated yet."; | instantiated yet."; | |||
| } | } | |||
| leaf encoding { | uses encoding-and-switching-type; | |||
| type identityref { | } | |||
| base te-types:lsp-encoding-types; | } | |||
| } | container hierarchical-link { | |||
| default "te-types:lsp-encoding-packet"; | description | |||
| description | "Identifies a hierarchical link (in client layer) | |||
| "The LSP encoding type for the dependency tunnel."; | that this tunnel is associated with."; | |||
| reference | reference | |||
| "RFC3945"; | "RFC4206"; | |||
| } | leaf local-te-node-id { | |||
| leaf switching-type { | type te-types:te-node-id; | |||
| type identityref { | default "0.0.0.0"; | |||
| base te-types:switching-capabilities; | description | |||
| } | "The local TE node identifier."; | |||
| default "te-types:switching-psc1"; | } | |||
| description | leaf local-te-link-tp-id { | |||
| "The LSP switching type for the dependency tunnel."; | type te-types:te-tp-id; | |||
| reference | default "0"; | |||
| "RFC3945"; | description | |||
| } | "The local TE link termination point identifier."; | |||
| } | } | |||
| } | leaf remote-te-node-id { | |||
| container hierarchical-link { | type te-types:te-node-id; | |||
| description | default "0.0.0.0"; | |||
| "Identifies a hierarchical link (in client layer) | description | |||
| that this tunnel is associated with."; | "Remote TE node identifier."; | |||
| reference | } | |||
| "RFC4206"; | uses te-types:te-topology-identifier { | |||
| leaf local-te-node-id { | description | |||
| type te-types:te-node-id; | "The topology identifier where the hierarchical link | |||
| default "0.0.0.0"; | supported by this TE tunnel is instantiated."; | |||
| description | } | |||
| "The local TE node identifier."; | } | |||
| } | } | |||
| leaf local-te-link-tp-id { | } | |||
| type te-types:te-tp-id; | ||||
| default "0"; | ||||
| description | ||||
| "The local TE link termination point identifier."; | ||||
| } | ||||
| leaf remote-te-node-id { | ||||
| type te-types:te-node-id; | ||||
| default "0.0.0.0"; | ||||
| description | ||||
| "Remote TE node identifier."; | ||||
| } | ||||
| uses te-types:te-topology-identifier { | ||||
| description | ||||
| "The topology identifier where the hierarchical link | ||||
| supported by this TE tunnel is instantiated."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping tunnel-properties { | grouping tunnel-properties { | |||
| description | description | |||
| "Top level grouping for tunnel properties."; | "Top level grouping for tunnel properties."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "TE tunnel name."; | "TE tunnel name."; | |||
| } | } | |||
| leaf alias { | leaf alias { | |||
| type string; | type string; | |||
| description | description | |||
| "An alternate name of the TE tunnel that can be modified | "An alternate name of the TE tunnel that can be modified | |||
| anytime during its lifetime."; | anytime during its lifetime."; | |||
| } | } | |||
| leaf identifier { | leaf identifier { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "TE tunnel Identifier."; | "TE tunnel Identifier."; | |||
| reference | reference | |||
| "RFC3209"; | "RFC3209"; | |||
| } | } | |||
| leaf color { | leaf color { | |||
| type uint32; | type uint32; | |||
| description "The color associated with the TE tunnel."; | description "The color associated with the TE tunnel."; | |||
| reference "RFC9012"; | reference "RFC9012"; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| default "None"; | default "None"; | |||
| description | description | |||
| "Textual description for this TE tunnel."; | "Textual description for this TE tunnel."; | |||
| } | } | |||
| leaf admin-state { | leaf admin-state { | |||
| type identityref { | type identityref { | |||
| base te-types:tunnel-admin-state-type; | base te-types:tunnel-admin-state-type; | |||
| } | } | |||
| default "te-types:tunnel-admin-state-up"; | default "te-types:tunnel-admin-state-up"; | |||
| description | description | |||
| "TE tunnel administrative state."; | "TE tunnel administrative state."; | |||
| } | } | |||
| leaf operational-state { | leaf operational-state { | |||
| type identityref { | type identityref { | |||
| base te-types:tunnel-state-type; | base te-types:tunnel-state-type; | |||
| } | } | |||
| config false; | config false; | |||
| description | description | |||
| "TE tunnel operational state."; | "TE tunnel operational state."; | |||
| } | } | |||
| leaf encoding { | uses encoding-and-switching-type; | |||
| type identityref { | uses tunnel-common-attributes; | |||
| base te-types:lsp-encoding-types; | container controller { | |||
| } | description | |||
| default "te-types:lsp-encoding-packet"; | "Contains tunnel data relevant to external controller(s). | |||
| description | This target node may be augmented by external module(s), | |||
| "LSP encoding type."; | for example, to add data for PCEP initiated and/or | |||
| reference | delegated tunnels."; | |||
| "RFC3945"; | leaf protocol-origin { | |||
| } | type identityref { | |||
| leaf switching-type { | base protocol-origin-type; | |||
| type identityref { | } | |||
| base te-types:switching-capabilities; | description | |||
| } | "The protocol origin for instantiating the tunnel."; | |||
| default "te-types:switching-psc1"; | } | |||
| description | leaf controller-entity-id { | |||
| "LSP switching type."; | type string; | |||
| reference | description | |||
| "RFC3945"; | "An identifier unique within the scope of visibility that | |||
| } | associated with the entity that controls the tunnel"; | |||
| leaf reoptimize-timer { | reference "RFC8232"; | |||
| type uint16; | } | |||
| units "seconds"; | } | |||
| description | leaf reoptimize-timer { | |||
| "Frequency of reoptimization of a traffic engineered LSP."; | type uint16; | |||
| } | units "seconds"; | |||
| leaf source { | description | |||
| type te-types:te-node-id; | "Frequency of reoptimization of a traffic engineered LSP."; | |||
| description | } | |||
| "TE tunnel source node ID."; | uses tunnel-associations-properties; | |||
| } | uses protection-restoration-properties; | |||
| leaf destination { | uses te-types:tunnel-constraints; | |||
| type te-types:te-node-id; | uses tunnel-hierarchy-properties; | |||
| description | container primary-paths { | |||
| "TE tunnel destination node identifier."; | description | |||
| } | "The set of primary paths."; | |||
| container controller { | list primary-path { | |||
| description | key "name"; | |||
| "Contains tunnel data relevant to external controller(s). | description | |||
| This target node may be augmented by external module(s), | "List of primary paths for this tunnel."; | |||
| for example, to add data for PCEP initiated and/or | uses primary-path; | |||
| delegated tunnels."; | container primary-reverse-path { | |||
| description | ||||
| "The reverse primary path properties."; | ||||
| uses primary-reverse-path; | ||||
| container candidate-secondary-reverse-paths { | ||||
| description | ||||
| "The set of referenced candidate reverse secondary | ||||
| paths from the full set of secondary reverse paths | ||||
| which may be used for this primary path."; | ||||
| list candidate-secondary-reverse-path { | ||||
| key "secondary-path"; | ||||
| ordered-by user; | ||||
| description | ||||
| "List of candidate secondary reverse path(s)"; | ||||
| leaf secondary-path { | ||||
| type leafref { | ||||
| path "../../../../../../" | ||||
| + "te:secondary-reverse-paths/" | ||||
| + "te:secondary-reverse-path/te:name"; | ||||
| } | ||||
| description | ||||
| "A reference to the secondary reverse path that | ||||
| should be utilised when the containing primary | ||||
| reverse path option is in use."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container candidate-secondary-paths { | ||||
| description | ||||
| "The set of candidate secondary paths which may be used | ||||
| for this primary path. When secondary paths are | ||||
| specified in the list the path of the secondary LSP in | ||||
| use must be restricted to those path options referenced. | ||||
| The priority of the secondary paths is specified within | ||||
| the list. Higher priority values are less preferred - | ||||
| that is to say that a path with priority 0 is the most | ||||
| preferred path. In the case that the list is empty, any | ||||
| secondary path option may be utilised when the current | ||||
| primary path is in use."; | ||||
| list candidate-secondary-path { | ||||
| key "secondary-path"; | ||||
| ordered-by user; | ||||
| description | ||||
| "List of candidate secondary paths for this tunnel."; | ||||
| leaf secondary-path { | ||||
| type leafref { | ||||
| path "../../../../../te:secondary-paths/" | ||||
| + "te:secondary-path/te:name"; | ||||
| } | ||||
| description | ||||
| "A reference to the secondary path that should be | ||||
| utilised when the containing primary path option is | ||||
| in use."; | ||||
| } | ||||
| leaf active { | ||||
| type boolean; | ||||
| config false; | ||||
| description | ||||
| "Indicates the current active path option that has | ||||
| been selected of the candidate secondary paths."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| leaf protocol-origin { | } | |||
| type identityref { | container secondary-paths { | |||
| base protocol-origin-type; | description | |||
| } | "The set of secondary paths."; | |||
| description | list secondary-path { | |||
| "The protocol origin for instantiating the tunnel."; | key "name"; | |||
| } | description | |||
| leaf controller-entity-id { | "List of secondary paths for this tunnel."; | |||
| type string; | uses secondary-path; | |||
| description | } | |||
| "An identifier unique within the scope of visibility that | } | |||
| associated with the entity that controls the tunnel"; | container secondary-reverse-paths { | |||
| reference "RFC8232"; | description | |||
| } | "The set of secondary reverse paths."; | |||
| } | list secondary-reverse-path { | |||
| leaf src-tunnel-tp-id { | key "name"; | |||
| type binary; | description | |||
| description | "List of secondary paths for this tunnel."; | |||
| "TE tunnel source termination point identifier."; | uses secondary-reverse-path; | |||
| } | } | |||
| leaf dst-tunnel-tp-id { | } | |||
| type binary; | } | |||
| description | ||||
| "TE tunnel destination termination point identifier."; | ||||
| } | ||||
| leaf bidirectional { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "Indicates a bidirectional co-routed LSP."; | ||||
| } | ||||
| uses tunnel-associations-properties; | ||||
| uses protection-restoration-properties; | ||||
| uses te-types:tunnel-constraints; | ||||
| uses tunnel-hierarchy-properties; | ||||
| container primary-paths { | ||||
| description | ||||
| "The set of primary paths."; | ||||
| list primary-path { | ||||
| key "name"; | ||||
| description | ||||
| "List of primary paths for this tunnel."; | ||||
| uses primary-path; | ||||
| container primary-reverse-path { | ||||
| description | ||||
| "The reverse primary path properties."; | ||||
| uses primary-reverse-path; | ||||
| container candidate-secondary-reverse-paths { | ||||
| description | ||||
| "The set of referenced candidate reverse secondary paths | ||||
| from the full set of secondary reverse paths which may be | ||||
| used for this primary path."; | ||||
| list candidate-secondary-reverse-path { | ||||
| key "secondary-path"; | ||||
| ordered-by user; | ||||
| description | ||||
| "List of candidate secondary reverse path(s)"; | ||||
| leaf secondary-path { | ||||
| type leafref { | ||||
| path "../../../../../../te:secondary-reverse-paths/" | ||||
| + "te:secondary-reverse-path/te:name"; | ||||
| } | ||||
| description | ||||
| "A reference to the secondary reverse path that | ||||
| should be utilised when the containing primary | ||||
| reverse path option is in use."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container candidate-secondary-paths { | ||||
| description | ||||
| "The set of candidate secondary paths which may be used | ||||
| for this primary path. When secondary paths are specified | ||||
| in the list the path of the secondary LSP in use must be | ||||
| restricted to those path options referenced. The | ||||
| priority of the secondary paths is specified within the | ||||
| list. Higher priority values are less preferred - that is | ||||
| to say that a path with priority 0 is the most preferred | ||||
| path. In the case that the list is empty, any secondary | ||||
| path option may be utilised when the current primary path | ||||
| is in use."; | ||||
| list candidate-secondary-path { | ||||
| key "secondary-path"; | ||||
| ordered-by user; | ||||
| description | ||||
| "List of candidate secondary paths for this tunnel."; | ||||
| leaf secondary-path { | ||||
| type leafref { | ||||
| path "../../../../../te:secondary-paths/" | ||||
| + "te:secondary-path/te:name"; | ||||
| } | ||||
| description | ||||
| "A reference to the secondary path that should be | ||||
| utilised when the containing primary path option is | ||||
| in use."; | ||||
| } | grouping tunnel-actions { | |||
| leaf active { | description | |||
| type boolean; | "Tunnel actions."; | |||
| config false; | action tunnel-action { | |||
| description | description | |||
| "Indicates the current active path option that has | "Tunnel action."; | |||
| been selected of the candidate secondary paths."; | input { | |||
| } | leaf action-type { | |||
| } | type identityref { | |||
| } | base tunnel-actions-type; | |||
| } | } | |||
| } | description | |||
| container secondary-paths { | "Tunnel action type."; | |||
| description | } | |||
| "The set of secondary paths."; | } | |||
| list secondary-path { | output { | |||
| key "name"; | leaf action-result { | |||
| description | type identityref { | |||
| "List of secondary paths for this tunnel."; | base te-types:te-action-result; | |||
| uses secondary-path; | } | |||
| } | description | |||
| } | "The result of the tunnel action operation."; | |||
| container secondary-reverse-paths { | } | |||
| description | } | |||
| "The set of secondary reverse paths."; | } | |||
| list secondary-reverse-path { | ||||
| key "name"; | ||||
| description | ||||
| "List of secondary paths for this tunnel."; | ||||
| uses secondary-reverse-path; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping tunnel-actions { | } | |||
| description | ||||
| "Tunnel actions."; | ||||
| action tunnel-action { | ||||
| description | ||||
| "Tunnel action."; | ||||
| input { | ||||
| leaf action-type { | ||||
| type identityref { | ||||
| base tunnel-actions-type; | ||||
| } | ||||
| description | ||||
| "Tunnel action type."; | ||||
| } | ||||
| } | grouping tunnel-protection-actions { | |||
| output { | description | |||
| leaf action-result { | "Protection external command actions."; | |||
| type identityref { | action protection-external-commands { | |||
| base te-types:te-action-result; | input { | |||
| } | leaf protection-external-command { | |||
| description | type identityref { | |||
| "The result of the tunnel action operation."; | base te-types:protection-external-commands; | |||
| } | } | |||
| } | description | |||
| } | "Protection external command."; | |||
| } | } | |||
| leaf protection-group-ingress-node-id { | ||||
| type te-types:te-node-id; | ||||
| description | ||||
| "When specified, indicates whether the action is | ||||
| applied on ingress node. | ||||
| By default, if neither ingress nor egress node-id | ||||
| is set, the action applies to ingress node only."; | ||||
| } | ||||
| leaf protection-group-egress-node-id { | ||||
| type te-types:te-node-id; | ||||
| description | ||||
| "When specified, indicates whether the action is | ||||
| applied on egress node. | ||||
| By default, if neither ingress nor egress node-id | ||||
| is set, the action applies to ingress node only."; | ||||
| } | ||||
| leaf path-ref { | ||||
| type path-ref; | ||||
| description | ||||
| "Indicates to which path the external command applies | ||||
| to."; | ||||
| } | ||||
| leaf traffic-type { | ||||
| type enumeration { | ||||
| enum normal-traffic { | ||||
| description | ||||
| "The manual-switch or forced-switch command applies | ||||
| to the normal traffic (this Tunnel)."; | ||||
| } | ||||
| enum null-traffic { | ||||
| description | ||||
| "The manual-switch or forced-switch command applies | ||||
| to the null traffic."; | ||||
| } | ||||
| enum extra-traffic { | ||||
| description | ||||
| "The manual-switch or forced-switch command applies | ||||
| to the extra traffic (the extra-traffic Tunnel | ||||
| sharing protection bandwidth with this Tunnel)."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Indicates whether the manual-switch or forced-switch | ||||
| commands applies to the normal traffic, the null traffic | ||||
| or the extra-traffic."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf extra-traffic-tunnel-ref { | ||||
| type tunnel-ref; | ||||
| description | ||||
| "In case there are multiple extra-traffic tunnels sharing | ||||
| protection bandwidth with this Tunnel (m:n protection), | ||||
| represents which extra-traffic Tunnel the manual-switch | ||||
| or forced-switch to extra-traffic command applies to."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping tunnel-protection-actions { | /*** End of TE tunnel groupings ***/ | |||
| description | /** | |||
| "Protection external command actions."; | * LSP related generic groupings | |||
| action protection-external-commands { | */ | |||
| input { | ||||
| leaf protection-external-command { | ||||
| type identityref { | ||||
| base te-types:protection-external-commands; | ||||
| } | ||||
| description | ||||
| "Protection external command."; | ||||
| } | ||||
| leaf protection-group-ingress-node-id { | ||||
| type te-types:te-node-id; | ||||
| description | ||||
| "When specified, indicates whether the action is | ||||
| applied on ingress node. | ||||
| By default, if neither ingress nor egress node-id | ||||
| is set, the action applies to ingress node only."; | ||||
| } | ||||
| leaf protection-group-egress-node-id { | ||||
| type te-types:te-node-id; | ||||
| description | ||||
| "When specified, indicates whether the action is | ||||
| applied on egress node. | ||||
| By default, if neither ingress nor egress node-id | ||||
| is set, the action applies to ingress node only."; | ||||
| } | ||||
| leaf path-ref { | ||||
| type path-ref; | ||||
| description | ||||
| "Indicates to which path the external command applies to."; | ||||
| } | ||||
| leaf traffic-type { | ||||
| type enumeration { | ||||
| enum normal-traffic { | ||||
| description | ||||
| "The manual-switch or forced-switch command applies to | ||||
| the normal traffic (this Tunnel)."; | ||||
| } | ||||
| enum null-traffic { | ||||
| description | ||||
| "The manual-switch or forced-switch command applies to | ||||
| the null traffic."; | ||||
| } | ||||
| enum extra-traffic { | ||||
| description | ||||
| "The manual-switch or forced-switch command applies to | ||||
| the extra traffic (the extra-traffic Tunnel sharing | ||||
| protection bandwidth with this Tunnel)."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Indicates whether the manual-switch or forced-switch | ||||
| commands applies to the normal traffic, the null traffic | ||||
| or the extra-traffic."; | ||||
| reference | ||||
| "RFC4427"; | ||||
| } | ||||
| leaf extra-traffic-tunnel-ref { | ||||
| type tunnel-ref; | ||||
| description | ||||
| "In case there are multiple extra-traffic tunnels sharing | ||||
| protection bandwidth with this Tunnel (m:n protection), | ||||
| represents which extra-traffic Tunnel the manual-switch or | ||||
| forced-switch to extra-traffic command applies to."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| /*** End of TE tunnel groupings ***/ | grouping lsp-record-route-information-state { | |||
| /** | description | |||
| * LSP related generic groupings | "LSP Recorded route information grouping."; | |||
| */ | container lsp-record-route-information { | |||
| description | ||||
| "RSVP recorded route object information."; | ||||
| list lsp-record-route-information { | ||||
| when "../../origin-type = 'ingress'" { | ||||
| description | ||||
| "Applicable on ingress LSPs only."; | ||||
| } | ||||
| key "index"; | ||||
| description | ||||
| "Record route list entry."; | ||||
| uses te-types:record-route-state; | ||||
| } | ||||
| } | ||||
| grouping lsp-record-route-information-state { | } | |||
| description | ||||
| "LSP Recorded route information grouping."; | ||||
| container lsp-record-route-information { | ||||
| description | ||||
| "RSVP recorded route object information."; | ||||
| list lsp-record-route-information { | ||||
| when "../../origin-type = 'ingress'" { | ||||
| description | ||||
| "Applicable on ingress LSPs only."; | ||||
| } | ||||
| key "index"; | ||||
| description | ||||
| "Record route list entry."; | ||||
| uses te-types:record-route-state; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping lsps-grouping { | grouping lsps-grouping { | |||
| description | description | |||
| "LSPs state operational data grouping."; | "LSPs state operational data grouping."; | |||
| container lsps { | container lsps { | |||
| config false; | config false; | |||
| description | description | |||
| "TE LSPs state container."; | "TE LSPs state container."; | |||
| list lsp { | list lsp { | |||
| key "tunnel-name lsp-id node"; | key "tunnel-name lsp-id node"; | |||
| unique "source destination tunnel-id lsp-id " | unique "source destination tunnel-id lsp-id " | |||
| + "extended-tunnel-id"; | + "extended-tunnel-id"; | |||
| description | description | |||
| "List of LSPs associated with the tunnel."; | "List of LSPs associated with the tunnel."; | |||
| leaf tunnel-name { | leaf tunnel-name { | |||
| type string; | type string; | |||
| description "The TE tunnel name."; | description "The TE tunnel name."; | |||
| } | } | |||
| leaf lsp-id { | leaf lsp-id { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "Identifier used in the SENDER_TEMPLATE and the FILTER_SPEC | "Identifier used in the SENDER_TEMPLATE and the | |||
| that can be changed to allow a sender to share resources | FILTER_SPEC that can be changed to allow a sender to | |||
| with itself."; | share resources with itself."; | |||
| reference | reference | |||
| "RFC3209"; | "RFC3209"; | |||
| } | } | |||
| leaf node { | leaf node { | |||
| type te-types:te-node-id; | type te-types:te-node-id; | |||
| description | description | |||
| "The node where the TE LSP state resides on."; | "The node where the TE LSP state resides on."; | |||
| } | } | |||
| uses lsp-properties-state; | uses lsp-properties-state; | |||
| uses lsp-record-route-information-state; | uses lsp-record-route-information-state; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /*** End of TE LSP groupings ***/ | ||||
| /** | ||||
| * TE global generic groupings | ||||
| */ | ||||
| /* Global named admin-groups configuration data */ | ||||
| grouping named-admin-groups-properties { | /*** End of TE LSP groupings ***/ | |||
| description | /** | |||
| "Global named administrative groups configuration | * TE global generic groupings | |||
| grouping."; | */ | |||
| leaf name { | /* Global named admin-groups configuration data */ | |||
| type string; | ||||
| description | ||||
| "A string name that uniquely identifies a TE | ||||
| interface named admin-group."; | ||||
| } | ||||
| leaf bit-position { | ||||
| type uint32; | ||||
| description | ||||
| "Bit position representing the administrative group."; | ||||
| reference | ||||
| "RFC3209 and RFC7308"; | ||||
| } | ||||
| } | ||||
| grouping named-admin-groups { | grouping named-admin-groups-properties { | |||
| description | description | |||
| "Global named administrative groups configuration | "Global named administrative groups configuration | |||
| grouping."; | grouping."; | |||
| container named-admin-groups { | leaf name { | |||
| description | type string; | |||
| "TE named admin groups container."; | description | |||
| list named-admin-group { | "A string name that uniquely identifies a TE | |||
| if-feature "te-types:extended-admin-groups"; | interface named admin-group."; | |||
| if-feature "te-types:named-extended-admin-groups"; | } | |||
| key "name"; | leaf bit-position { | |||
| description | type uint32; | |||
| "List of named TE admin-groups."; | description | |||
| uses named-admin-groups-properties; | "Bit position representing the administrative group."; | |||
| } | reference | |||
| } | "RFC3209 and RFC7308"; | |||
| } | } | |||
| } | ||||
| /* Global named admin-srlgs configuration data */ | grouping named-admin-groups { | |||
| description | ||||
| "Global named administrative groups configuration | ||||
| grouping."; | ||||
| container named-admin-groups { | ||||
| description | ||||
| "TE named admin groups container."; | ||||
| list named-admin-group { | ||||
| if-feature "te-types:extended-admin-groups"; | ||||
| if-feature "te-types:named-extended-admin-groups"; | ||||
| key "name"; | ||||
| description | ||||
| "List of named TE admin-groups."; | ||||
| uses named-admin-groups-properties; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping named-srlgs { | /* Global named admin-srlgs configuration data */ | |||
| description | ||||
| "Global named SRLGs configuration grouping."; | ||||
| container named-srlgs { | grouping named-srlgs { | |||
| description | description | |||
| "TE named SRLGs container."; | "Global named SRLGs configuration grouping."; | |||
| list named-srlg { | container named-srlgs { | |||
| if-feature "te-types:named-srlg-groups"; | description | |||
| key "name"; | "TE named SRLGs container."; | |||
| description | list named-srlg { | |||
| "A list of named SRLG groups."; | if-feature "te-types:named-srlg-groups"; | |||
| leaf name { | key "name"; | |||
| type string; | description | |||
| description | "A list of named SRLG groups."; | |||
| "A string name that uniquely identifies a TE | leaf name { | |||
| interface named SRLG."; | type string; | |||
| } | description | |||
| leaf value { | "A string name that uniquely identifies a TE | |||
| type te-types:srlg; | interface named SRLG."; | |||
| description | } | |||
| "An SRLG value."; | leaf value { | |||
| } | type te-types:srlg; | |||
| leaf cost { | description | |||
| type uint32; | "An SRLG value."; | |||
| description | } | |||
| "SRLG associated cost. Used during path to append | leaf cost { | |||
| the path cost when traversing a link with this SRLG."; | type uint32; | |||
| } | description | |||
| } | "SRLG associated cost. Used during path to append | |||
| } | the path cost when traversing a link with this SRLG."; | |||
| } | } | |||
| } | ||||
| } | ||||
| } | ||||
| /* Global named paths constraints configuration data */ | /* Global named paths constraints configuration data */ | |||
| grouping path-constraints-common { | grouping path-constraints-common { | |||
| description | description | |||
| "Global named path constraints configuration | "Global named path constraints configuration | |||
| grouping."; | grouping."; | |||
| uses te-types:common-path-constraints-attributes { | uses te-types:common-path-constraints-attributes { | |||
| description | description | |||
| "The constraints applicable to the path. This includes: | "The constraints applicable to the path. This includes: | |||
| - The path bandwidth constraint | - The path bandwidth constraint | |||
| - The path link protection type constraint | - The path link protection type constraint | |||
| - The path setup/hold priority constraint | - The path setup/hold priority constraint | |||
| - path signaling type constraint | - path signaling type constraint | |||
| - path metric bounds constraint. The unit of path metric | - path metric bounds constraint. The unit of path metric | |||
| bound is interpreted in the context of the metric-type. | bound is interpreted in the context of the metric-type. | |||
| For example for metric-type 'path-metric-loss', the bound | For example for metric-type 'path-metric-loss', the bound | |||
| is multiples of the basic unit 0.000003% as described | is multiples of the basic unit 0.000003% as described | |||
| in RFC7471 for OSPF, and RFC8570 for ISIS. | in RFC7471 for OSPF, and RFC8570 for ISIS. | |||
| - path affinity constraints | - path affinity constraints | |||
| - path SRLG constraints"; | - path SRLG constraints"; | |||
| } | } | |||
| uses te-types:generic-path-disjointness; | uses te-types:generic-path-disjointness; | |||
| uses te-types:path-constraints-route-objects; | uses te-types:path-constraints-route-objects; | |||
| container path-in-segment { | container path-in-segment { | |||
| presence "The end-to-end tunnel starts in a previous domain; | presence "The end-to-end tunnel starts in a previous domain; | |||
| this tunnel is a segment in the current domain."; | this tunnel is a segment in the current domain."; | |||
| description | description | |||
| "If an end-to-end tunnel crosses multiple domains using | "If an end-to-end tunnel crosses multiple domains using | |||
| the same technology, some additional constraints have to be | the same technology, some additional constraints have to be | |||
| taken in consideration in each domain. | taken in consideration in each domain. | |||
| This TE tunnel segment is stitched to the upstream TE tunnel | This TE tunnel segment is stitched to the upstream TE tunnel | |||
| segment."; | segment."; | |||
| uses te-types:label-set-info; | uses te-types:label-set-info; | |||
| } | } | |||
| container path-out-segment { | container path-out-segment { | |||
| presence | presence | |||
| "The end-to-end tunnel is not terminated in this domain; | "The end-to-end tunnel is not terminated in this domain; | |||
| this tunnel is a segment in the current domain."; | this tunnel is a segment in the current domain."; | |||
| description | description | |||
| "If an end-to-end tunnel crosses multiple domains using | "If an end-to-end tunnel crosses multiple domains using | |||
| the same technology, some additional constraints have to be | the same technology, some additional constraints have to be | |||
| taken in consideration in each domain. | taken in consideration in each domain. | |||
| This TE tunnel segment is stitched to the downstream TE | This TE tunnel segment is stitched to the downstream TE | |||
| tunnel segment."; | tunnel segment."; | |||
| uses te-types:label-set-info; | uses te-types:label-set-info; | |||
| } | } | |||
| } | } | |||
| grouping named-path-constraints { | grouping named-path-constraints { | |||
| description | description | |||
| "Global named path constraints configuration | "Global named path constraints configuration | |||
| grouping."; | grouping."; | |||
| container named-path-constraints { | container named-path-constraints { | |||
| description | description | |||
| "TE named path constraints container."; | "TE named path constraints container."; | |||
| list named-path-constraint { | list named-path-constraint { | |||
| if-feature "te-types:named-path-constraints"; | if-feature "te-types:named-path-constraints"; | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "A string name that uniquely identifies a | "A string name that uniquely identifies a | |||
| path constraint set."; | path constraint set."; | |||
| } | } | |||
| uses path-constraints-common; | uses path-constraints-common; | |||
| description | description | |||
| "A list of named path constraints."; | "A list of named path constraints."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* TE globals container data */ | /* TE globals container data */ | |||
| grouping globals-grouping { | grouping globals-grouping { | |||
| description | description | |||
| "Globals TE system-wide configuration data grouping."; | "Globals TE system-wide configuration data grouping."; | |||
| container globals { | container globals { | |||
| description | description | |||
| "Globals TE system-wide configuration data container."; | "Globals TE system-wide configuration data container."; | |||
| uses named-admin-groups; | uses named-admin-groups; | |||
| uses named-srlgs; | uses named-srlgs; | |||
| uses named-path-constraints; | uses named-path-constraints; | |||
| } | } | |||
| } | } | |||
| /* TE tunnels container data */ | /* TE tunnels container data */ | |||
| grouping tunnels-grouping { | grouping tunnels-grouping { | |||
| description | description | |||
| "Tunnels TE configuration data grouping."; | "Tunnels TE configuration data grouping."; | |||
| container tunnels { | container tunnels { | |||
| description | description | |||
| "Tunnels TE configuration data container."; | "Tunnels TE configuration data container."; | |||
| list tunnel { | list tunnel { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "The list of TE tunnels."; | "The list of TE tunnels."; | |||
| uses tunnel-properties; | uses tunnel-properties; | |||
| uses tunnel-actions; | uses tunnel-actions; | |||
| uses tunnel-protection-actions; | uses tunnel-protection-actions; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* TE LSPs ephemeral state container data */ | /* TE LSPs ephemeral state container data */ | |||
| grouping lsp-properties-state { | grouping lsp-properties-state { | |||
| description | description | |||
| "LSPs state operational data grouping."; | "LSPs state operational data grouping."; | |||
| leaf source { | leaf source { | |||
| type te-types:te-node-id; | type te-types:te-node-id; | |||
| description | description | |||
| "Tunnel sender address extracted from | "Tunnel sender address extracted from | |||
| SENDER_TEMPLATE object."; | SENDER_TEMPLATE object."; | |||
| reference | ||||
| "RFC3209"; | ||||
| } | ||||
| leaf destination { | ||||
| type te-types:te-node-id; | ||||
| description | ||||
| "The tunnel endpoint address extracted from SESSION object."; | ||||
| reference | ||||
| "RFC3209"; | ||||
| reference | } | |||
| "RFC3209"; | leaf tunnel-id { | |||
| } | type uint16; | |||
| leaf destination { | description | |||
| type te-types:te-node-id; | "The tunnel identifier used in the SESSION that remains | |||
| description | constant over the life of the tunnel."; | |||
| "The tunnel endpoint address extracted from SESSION object."; | reference | |||
| reference | "RFC3209"; | |||
| "RFC3209"; | } | |||
| } | leaf extended-tunnel-id { | |||
| leaf tunnel-id { | type yang:dotted-quad; | |||
| type uint16; | description | |||
| description | "The LSP Extended Tunnel ID."; | |||
| "The tunnel identifier used in the SESSION that remains constant | reference | |||
| over the life of the tunnel."; | "RFC3209"; | |||
| reference | } | |||
| "RFC3209"; | leaf operational-state { | |||
| } | type identityref { | |||
| leaf extended-tunnel-id { | base te-types:lsp-state-type; | |||
| type yang:dotted-quad; | } | |||
| description | description | |||
| "The LSP Extended Tunnel ID."; | "The LSP operational state."; | |||
| reference | } | |||
| "RFC3209"; | leaf signaling-type { | |||
| } | type identityref { | |||
| leaf operational-state { | base te-types:path-signaling-type; | |||
| type identityref { | } | |||
| base te-types:lsp-state-type; | description | |||
| } | "The signaling protocol used to set up this LSP."; | |||
| description | } | |||
| "The LSP operational state."; | leaf origin-type { | |||
| } | type enumeration { | |||
| leaf signaling-type { | enum ingress { | |||
| type identityref { | description | |||
| base te-types:path-signaling-type; | "Origin ingress."; | |||
| } | } | |||
| description | enum egress { | |||
| "The signaling protocol used to set up this LSP."; | description | |||
| } | "Origin egress."; | |||
| leaf origin-type { | } | |||
| type enumeration { | enum transit { | |||
| enum ingress { | description | |||
| description | "Origin transit."; | |||
| "Origin ingress."; | } | |||
| } | } | |||
| enum egress { | default "ingress"; | |||
| description | description | |||
| "Origin egress."; | "The origin of the LSP relative to the location of the local | |||
| switch in the path."; | ||||
| } | ||||
| leaf lsp-resource-status { | ||||
| type enumeration { | ||||
| enum primary { | ||||
| description | ||||
| "A primary LSP is a fully established LSP for which the | ||||
| resource allocation has been committed at the data | ||||
| plane."; | ||||
| } | ||||
| enum secondary { | ||||
| description | ||||
| "A secondary LSP is an LSP that has been provisioned | ||||
| in the control plane only; e.g. resource allocation | ||||
| has not been committed at the data plane."; | ||||
| } | ||||
| } | ||||
| default "primary"; | ||||
| description | ||||
| "LSP resource allocation state."; | ||||
| reference | ||||
| "RFC4872, section 4.2.1"; | ||||
| } | ||||
| uses protection-restoration-properties-state; | ||||
| } | ||||
| } | /*** End of TE global groupings ***/ | |||
| enum transit { | /** | |||
| description | * TE container | |||
| "Origin transit."; | */ | |||
| } | ||||
| } | ||||
| default "ingress"; | ||||
| description | ||||
| "The origin of the LSP relative to the location of the local | ||||
| switch in the path."; | ||||
| } | ||||
| leaf lsp-resource-status { | ||||
| type enumeration { | ||||
| enum primary { | ||||
| description | ||||
| "A primary LSP is a fully established LSP for which the | ||||
| resource allocation has been committed at the data | ||||
| plane."; | ||||
| } | ||||
| enum secondary { | ||||
| description | ||||
| "A secondary LSP is an LSP that has been provisioned | ||||
| in the control plane only; e.g. resource allocation | ||||
| has not been committed at the data plane."; | ||||
| } | ||||
| } | ||||
| default "primary"; | ||||
| description | ||||
| "LSP resource allocation state."; | ||||
| reference | ||||
| "RFC4872, section 4.2.1"; | ||||
| } | ||||
| uses protection-restoration-properties-state; | ||||
| } | ||||
| /*** End of TE global groupings ***/ | container te { | |||
| /** | presence "Enable TE feature."; | |||
| * TE container | description | |||
| */ | "TE global container."; | |||
| /* TE Global Data */ | ||||
| uses globals-grouping; | ||||
| container te { | /* TE Tunnel Data */ | |||
| presence "Enable TE feature."; | uses tunnels-grouping; | |||
| description | ||||
| "TE global container."; | ||||
| /* TE Global Data */ | ||||
| uses globals-grouping; | ||||
| /* TE Tunnel Data */ | /* TE LSPs Data */ | |||
| uses tunnels-grouping; | uses lsps-grouping; | |||
| } | ||||
| /* TE LSPs Data */ | /* TE Tunnel RPCs/execution Data */ | |||
| uses lsps-grouping; | ||||
| } | ||||
| /* TE Tunnel RPCs/execution Data */ | rpc tunnels-path-compute { | |||
| description | ||||
| "TE tunnels RPC nodes."; | ||||
| input { | ||||
| container path-compute-info { | ||||
| /* | ||||
| * An external path compute module may augment this | ||||
| * target. | ||||
| */ | ||||
| description | ||||
| "RPC input information."; | ||||
| } | ||||
| } | ||||
| output { | ||||
| container path-compute-result { | ||||
| /* | ||||
| * An external path compute module may augment this | ||||
| * target. | ||||
| */ | ||||
| description | ||||
| "RPC output information."; | ||||
| } | ||||
| } | ||||
| } | ||||
| rpc tunnels-path-compute { | rpc tunnels-actions { | |||
| description | description | |||
| "TE tunnels RPC nodes."; | "TE tunnels actions RPC"; | |||
| input { | input { | |||
| container path-compute-info { | container tunnel-info { | |||
| /* An external path compute module may augment this target. */ | description | |||
| description | "TE tunnel information."; | |||
| "RPC input information."; | choice filter-type { | |||
| } | mandatory true; | |||
| } | description | |||
| output { | "Filter choice."; | |||
| container path-compute-result { | case all-tunnels { | |||
| /* An external path compute module may augment this target. */ | leaf all { | |||
| description | type empty; | |||
| "RPC output information."; | mandatory true; | |||
| } | description | |||
| } | "Apply action on all TE tunnels."; | |||
| } | } | |||
| } | ||||
| case one-tunnel { | ||||
| leaf tunnel { | ||||
| type tunnel-ref; | ||||
| description | ||||
| "Apply action on the specific TE tunnel."; | ||||
| rpc tunnels-actions { | } | |||
| description | } | |||
| "TE tunnels actions RPC"; | } | |||
| input { | } | |||
| container tunnel-info { | container action-info { | |||
| description | description | |||
| "TE tunnel information."; | "TE tunnel action information."; | |||
| choice filter-type { | leaf action { | |||
| mandatory true; | type identityref { | |||
| description | base tunnel-actions-type; | |||
| "Filter choice."; | } | |||
| case all-tunnels { | description | |||
| leaf all { | "The action type."; | |||
| type empty; | } | |||
| mandatory true; | leaf disruptive { | |||
| description | when "derived-from-or-self(../action, " | |||
| "Apply action on all TE tunnels."; | + "'te:tunnel-action-reoptimize')"; | |||
| } | type empty; | |||
| } | description | |||
| case one-tunnel { | "Specifies whether or not the reoptimization action | |||
| leaf tunnel { | is allowed to be disruptive."; | |||
| type tunnel-ref; | } | |||
| description | } | |||
| "Apply action on the specific TE tunnel."; | } | |||
| } | output { | |||
| } | leaf action-result { | |||
| } | type identityref { | |||
| } | base te-types:te-action-result; | |||
| container action-info { | } | |||
| description | description | |||
| "TE tunnel action information."; | "The result of the tunnel action operation."; | |||
| leaf action { | } | |||
| type identityref { | } | |||
| base tunnel-actions-type; | } | |||
| } | } | |||
| description | <CODE ENDS> | |||
| "The action type."; | ||||
| } | ||||
| leaf disruptive { | ||||
| when "derived-from-or-self(../action, " | ||||
| + "'te:tunnel-action-reoptimize')"; | ||||
| type empty; | ||||
| description | ||||
| "Specifies whether or not the reoptimization action | ||||
| is allowed to be disruptive."; | ||||
| } | ||||
| } | ||||
| } | ||||
| output { | ||||
| leaf action-result { | ||||
| type identityref { | ||||
| base te-types:te-action-result; | ||||
| } | ||||
| description | ||||
| "The result of the tunnel action operation."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| Figure 9: TE Tunnel data model YANG module | Figure 9: TE Tunnel data model YANG module | |||
| 6. TE Device YANG Model | 6. TE Device YANG Model | |||
| The device TE YANG module ('ietf-te-device') models data that is | The device TE YANG module ('ietf-te-device') models data that is | |||
| specific to managing a TE device. This module augments the generic | specific to managing a TE device. This module augments the generic | |||
| TE YANG module. | TE YANG module. | |||
| 6.1. Module Structure | 6.1. Module Structure | |||
| 6.1.1. TE Interfaces | 6.1.1. TE Interfaces | |||
| This branch of the model manages TE interfaces that are present on a | This branch of the model manages TE interfaces that are present on a | |||
| device. Examples of TE interface properties are: | device. Examples of TE interface properties are: | |||
| o Maximum reservable bandwidth, bandwidth constraints (BC) | * Maximum reservable bandwidth, bandwidth constraints (BC) | |||
| o Flooding parameters | * Flooding parameters | |||
| * Flooding intervals and threshold values | - Flooding intervals and threshold values | |||
| o interface attributes | * interface attributes | |||
| * (Extended) administrative groups | - (Extended) administrative groups | |||
| * SRLG values | - SRLG values | |||
| * TE metric value | - TE metric value | |||
| o Fast reroute backup tunnel properties (such as static, auto- | * Fast reroute backup tunnel properties (such as static, auto- | |||
| tunnel) | tunnel) | |||
| The derived state associated with interfaces is grouped under the | The derived state associated with interfaces is grouped under the | |||
| interface "state" sub-container as shown in Figure 10. This covers | interface "state" sub-container as shown in Figure 10. This covers | |||
| state data such as: | state data such as: | |||
| o Bandwidth information: maximum bandwidth, available bandwidth at | * Bandwidth information: maximum bandwidth, available bandwidth at | |||
| different priorities and for each class-type (CT) | different priorities and for each class-type (CT) | |||
| o List of admitted LSPs | * List of admitted LSPs | |||
| * Name, bandwidth value and pool, time, priority | - Name, bandwidth value and pool, time, priority | |||
| o Statistics: state counters, flooding counters, admission counters | * Statistics: state counters, flooding counters, admission counters | |||
| (accepted/rejected), preemption counters | (accepted/rejected), preemption counters | |||
| o Adjacency information | * Adjacency information | |||
| * Neighbor address | - Neighbor address | |||
| * Metric value | - Metric value | |||
| module: ietf-te-device | module: ietf-te-device | |||
| augment /te:te: | augment /te:te: | |||
| +--rw interfaces | +--rw interfaces | |||
| . | . | |||
| +-- rw te-dev:te-attributes | +-- rw te-dev:te-attributes | |||
| <<intended configuration>> | <<intended configuration>> | |||
| . | . | |||
| +-- ro state | +-- ro state | |||
| <<derived state associated with the TE interface>> | <<derived state associated with the TE interface>> | |||
| Figure 10: TE interface state YANG subtree | Figure 10: TE interface state YANG subtree | |||
| 6.2. Tree Diagram | 6.2. Tree Diagram | |||
| Figure 11 shows the tree diagram of the device TE YANG model defined | Figure 11 shows the tree diagram of the device TE YANG model defined | |||
| in modules 'ietf-te.yang'. | in modules 'ietf-te.yang'. | |||
| module: ietf-te-device | module: ietf-te-device | |||
| augment /te:te: | augment /te:te: | |||
| +--rw interfaces | +--rw interfaces | |||
| | +--rw threshold-type? enumeration | | +--rw threshold-type? enumeration | |||
| skipping to change at page 102, line 20 ¶ | skipping to change at page 102, line 20 ¶ | |||
| rpcs: | rpcs: | |||
| +---x link-state-update | +---x link-state-update | |||
| +---w input | +---w input | |||
| +---w (filter-type) | +---w (filter-type) | |||
| +--:(match-all) | +--:(match-all) | |||
| | +---w all empty | | +---w all empty | |||
| +--:(match-one-interface) | +--:(match-one-interface) | |||
| +---w interface? if:interface-ref | +---w interface? if:interface-ref | |||
| Figure 11: TE Tunnel device model YANG tree diagram | Figure 11: TE Tunnel device model YANG tree diagram | |||
| 6.3. YANG Module | 6.3. YANG Module | |||
| The device TE YANG module 'ietf-te-device' imports the following | The device TE YANG module 'ietf-te-device' imports the following | |||
| module(s): | module(s): | |||
| o ietf-yang-types and ietf-inet-types defined in [RFC6991] | * ietf-yang-types and ietf-inet-types defined in [RFC6991] | |||
| o ietf-interfaces defined in [RFC8343] | ||||
| o ietf-routing-types defined in [RFC8294] | ||||
| o ietf-te-types defined in [RFC8776] | ||||
| o ietf-te defined in this document | * ietf-interfaces defined in [RFC8343] | |||
| <CODE BEGINS> file "ietf-te-device@2021-05-16.yang" | * ietf-routing-types defined in [RFC8294] | |||
| module ietf-te-device { | * ietf-te-types defined in [RFC8776] | |||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-te-device"; | ||||
| /* Replace with IANA when assigned */ | * ietf-te defined in this document | |||
| prefix te-dev; | <CODE BEGINS> file "ietf-te-device@2021-10-22.yang" | |||
| module ietf-te-device { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-te-device"; | ||||
| /* Import TE module */ | /* Replace with IANA when assigned */ | |||
| import ietf-te { | prefix te-dev; | |||
| prefix te; | ||||
| reference | ||||
| "draft-ietf-teas-yang-te: A YANG Data Model for Traffic | ||||
| Engineering Tunnels and Interfaces"; | ||||
| } | ||||
| /* Import TE types */ | /* Import TE module */ | |||
| import ietf-te-types { | import ietf-te { | |||
| prefix te-types; | prefix te; | |||
| reference | reference | |||
| "RFC8776: Common YANG Data Types for Traffic Engineering."; | "draft-ietf-teas-yang-te: A YANG Data Model for Traffic | |||
| } | Engineering Tunnels and Interfaces"; | |||
| import ietf-interfaces { | } | |||
| prefix if; | ||||
| reference | ||||
| "RFC8343: A YANG Data Model for Interface Management"; | ||||
| } | ||||
| import ietf-routing-types { | ||||
| prefix rt-types; | ||||
| reference | ||||
| "RFC8294: Common YANG Data Types for the Routing Area"; | ||||
| } | ||||
| organization | /* Import TE types */ | |||
| "IETF Traffic Engineering Architecture and Signaling (TEAS) | ||||
| Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/teas/> | ||||
| WG List: <mailto:teas@ietf.org> | ||||
| Editor: Tarek Saad | import ietf-te-types { | |||
| <mailto:tsaad@juniper.net> | prefix te-types; | |||
| reference | ||||
| "RFC8776: Common YANG Data Types for Traffic Engineering."; | ||||
| } | ||||
| import ietf-interfaces { | ||||
| prefix if; | ||||
| reference | ||||
| "RFC8343: A YANG Data Model for Interface Management"; | ||||
| } | ||||
| import ietf-routing-types { | ||||
| prefix rt-types; | ||||
| reference | ||||
| "RFC8294: Common YANG Data Types for the Routing Area"; | ||||
| } | ||||
| Editor: Rakesh Gandhi | organization | |||
| <mailto:rgandhi@cisco.com> | "IETF Traffic Engineering Architecture and Signaling (TEAS) | |||
| Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/teas/> | ||||
| WG List: <mailto:teas@ietf.org> | ||||
| Editor: Vishnu Pavan Beeram | Editor: Tarek Saad | |||
| <mailto:vbeeram@juniper.net> | <mailto:tsaad@juniper.net> | |||
| Editor: Himanshu Shah | Editor: Rakesh Gandhi | |||
| <mailto:hshah@ciena.com> | <mailto:rgandhi@cisco.com> | |||
| Editor: Xufeng Liu | Editor: Vishnu Pavan Beeram | |||
| <mailto: xufeng.liu.ietf@gmail.com> | <mailto:vbeeram@juniper.net> | |||
| Editor: Igor Bryskin | Editor: Himanshu Shah | |||
| <mailto:i_bryskin@yahoo.com>"; | <mailto:hshah@ciena.com> | |||
| description | ||||
| "YANG data module for TE device configurations, | ||||
| state, and RPCs. The model fully conforms to the | ||||
| Network Management Datastore Architecture (NMDA). | ||||
| Copyright (c) 2019 IETF Trust and the persons | Editor: Xufeng Liu | |||
| identified as authors of the code. All rights reserved. | <mailto: xufeng.liu.ietf@gmail.com> | |||
| Redistribution and use in source and binary forms, with or | Editor: Igor Bryskin | |||
| without modification, is permitted pursuant to, and subject | <mailto:i_bryskin@yahoo.com>"; | |||
| to the license terms contained in, the Simplified BSD License | description | |||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | "YANG data module for TE device configurations, | |||
| Relating to IETF Documents | state, and RPCs. The model fully conforms to the | |||
| (https://trustee.ietf.org/license-info). | Network Management Datastore Architecture (NMDA). | |||
| This version of this YANG module is part of RFC XXXX; see | ||||
| the RFC itself for full legal notices."; | ||||
| // RFC Ed.: replace XXXX with actual RFC number and remove this | Copyright (c) 2019 IETF Trust and the persons | |||
| // note. | identified as authors of the code. All rights reserved. | |||
| // RFC Ed.: update the date below with the date of RFC publication | ||||
| // and remove this note. | ||||
| revision 2021-05-16 { | Redistribution and use in source and binary forms, with or | |||
| description | without modification, is permitted pursuant to, and subject | |||
| "Latest update to TE device YANG module."; | to the license terms contained in, the Simplified BSD License | |||
| reference | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| "RFCXXXX: A YANG Data Model for Traffic Engineering Tunnels | Relating to IETF Documents | |||
| and Interfaces"; | (https://trustee.ietf.org/license-info). | |||
| } | This version of this YANG module is part of RFC XXXX; see | |||
| the RFC itself for full legal notices."; | ||||
| /** | // RFC Ed.: replace XXXX with actual RFC number and remove this | |||
| * TE LSP device state grouping | // note. | |||
| */ | // RFC Ed.: update the date below with the date of RFC publication | |||
| // and remove this note. | ||||
| grouping lsps-device-info { | revision 2021-10-22 { | |||
| description | ||||
| "TE LSP device state grouping."; | ||||
| container lsp-timers { | ||||
| when "../te:origin-type = 'ingress'" { | ||||
| description | ||||
| "Applicable to ingress LSPs only."; | ||||
| } | ||||
| description | description | |||
| "Ingress LSP timers."; | "Latest update to TE device YANG module."; | |||
| leaf life-time { | reference | |||
| type uint32; | "RFCXXXX: A YANG Data Model for Traffic Engineering Tunnels | |||
| units "seconds"; | and Interfaces"; | |||
| description | ||||
| "TE LSP lifetime."; | ||||
| } | ||||
| leaf time-to-install { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP installation delay time."; | ||||
| } | ||||
| leaf time-to-destroy { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP expiration delay time."; | ||||
| } | ||||
| } | } | |||
| container downstream-info { | ||||
| when "../te:origin-type != 'egress'" { | /** | |||
| description | * TE LSP device state grouping | |||
| "Downstream information of the LSP."; | */ | |||
| } | ||||
| grouping lsps-device-info { | ||||
| description | description | |||
| "downstream information."; | "TE LSP device state grouping."; | |||
| leaf nhop { | container lsp-timers { | |||
| type te-types:te-tp-id; | when "../te:origin-type = 'ingress'" { | |||
| description | description | |||
| "downstream next-hop address."; | "Applicable to ingress LSPs only."; | |||
| } | } | |||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | description | |||
| "downstream interface."; | "Ingress LSP timers."; | |||
| leaf life-time { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP lifetime."; | ||||
| } | ||||
| leaf time-to-install { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP installation delay time."; | ||||
| } | ||||
| leaf time-to-destroy { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP expiration delay time."; | ||||
| } | ||||
| } | } | |||
| container neighbor { | container downstream-info { | |||
| uses te:te-generic-node-id; | when "../te:origin-type != 'egress'" { | |||
| description | ||||
| "Downstream information of the LSP."; | ||||
| } | ||||
| description | description | |||
| "downstream neighbor address."; | "downstream information."; | |||
| leaf nhop { | ||||
| type te-types:te-tp-id; | ||||
| description | ||||
| "downstream next-hop address."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "downstream interface."; | ||||
| } | ||||
| container neighbor { | ||||
| uses te:te-generic-node-id; | ||||
| description | ||||
| "downstream neighbor address."; | ||||
| } | ||||
| leaf label { | ||||
| type rt-types:generalized-label; | ||||
| description | ||||
| "downstream label."; | ||||
| } | ||||
| } | } | |||
| leaf label { | container upstream-info { | |||
| type rt-types:generalized-label; | when "../te:origin-type != 'ingress'" { | |||
| description | ||||
| "Upstream information of the LSP."; | ||||
| } | ||||
| description | description | |||
| "downstream label."; | "upstream information."; | |||
| leaf phop { | ||||
| type te-types:te-tp-id; | ||||
| description | ||||
| "upstream next-hop or previous-hop address."; | ||||
| } | ||||
| container neighbor { | ||||
| uses te:te-generic-node-id; | ||||
| description | ||||
| "upstream neighbor address."; | ||||
| } | ||||
| leaf label { | ||||
| type rt-types:generalized-label; | ||||
| description | ||||
| "upstream label."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| container upstream-info { | ||||
| when "../te:origin-type != 'ingress'" { | /** | |||
| description | * Device general groupings. | |||
| "Upstream information of the LSP."; | */ | |||
| } | ||||
| grouping lsp-device-timers { | ||||
| description | description | |||
| "upstream information."; | "Device TE LSP timers configs."; | |||
| leaf phop { | leaf lsp-install-interval { | |||
| type te-types:te-tp-id; | type uint32; | |||
| units "seconds"; | ||||
| description | description | |||
| "upstream next-hop or previous-hop address."; | "TE LSP installation delay time."; | |||
| } | } | |||
| container neighbor { | leaf lsp-cleanup-interval { | |||
| uses te:te-generic-node-id; | type uint32; | |||
| units "seconds"; | ||||
| description | description | |||
| "upstream neighbor address."; | "TE LSP cleanup delay time."; | |||
| } | } | |||
| leaf label { | leaf lsp-invalidation-interval { | |||
| type rt-types:generalized-label; | type uint32; | |||
| units "seconds"; | ||||
| description | description | |||
| "upstream label."; | "TE LSP path invalidation before taking action delay time."; | |||
| } | } | |||
| } | } | |||
| } | ||||
| /** | /** | |||
| * Device general groupings. | * TE global device groupings | |||
| */ | */ | |||
| /* TE interface container data */ | ||||
| grouping lsp-device-timers { | grouping interfaces-grouping { | |||
| description | ||||
| "Device TE LSP timers configs."; | ||||
| leaf lsp-install-interval { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP installation delay time."; | ||||
| } | ||||
| leaf lsp-cleanup-interval { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP cleanup delay time."; | ||||
| } | ||||
| leaf lsp-invalidation-interval { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "TE LSP path invalidation before taking action delay time."; | ||||
| } | ||||
| } | ||||
| /** | ||||
| * TE global device groupings | ||||
| */ | ||||
| /* TE interface container data */ | ||||
| grouping interfaces-grouping { | ||||
| description | ||||
| "TE interface configuration data grouping."; | ||||
| container interfaces { | ||||
| description | description | |||
| "Configuration data model for TE interfaces."; | "TE interface configuration data grouping."; | |||
| uses te-all-attributes; | container interfaces { | |||
| list interface { | ||||
| key "interface"; | ||||
| description | description | |||
| "TE interfaces."; | "Configuration data model for TE interfaces."; | |||
| leaf interface { | uses te-all-attributes; | |||
| type if:interface-ref; | list interface { | |||
| key "interface"; | ||||
| description | description | |||
| "TE interface name."; | "TE interfaces."; | |||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "TE interface name."; | ||||
| } | ||||
| /* TE interface parameters */ | ||||
| uses te-attributes; | ||||
| } | } | |||
| /* TE interface parameters */ | ||||
| uses te-attributes; | ||||
| } | } | |||
| } | } | |||
| } | ||||
| /** | /** | |||
| * TE interface device groupings | * TE interface device groupings | |||
| */ | */ | |||
| grouping te-admin-groups-config { | grouping te-admin-groups-config { | |||
| description | ||||
| "TE interface affinities grouping."; | ||||
| choice admin-group-type { | ||||
| description | description | |||
| "TE interface administrative groups | "TE interface affinities grouping."; | |||
| representation type."; | choice admin-group-type { | |||
| case value-admin-groups { | description | |||
| choice value-admin-group-type { | "TE interface administrative groups | |||
| description | representation type."; | |||
| "choice of admin-groups."; | case value-admin-groups { | |||
| case admin-groups { | choice value-admin-group-type { | |||
| description | description | |||
| "Administrative group/Resource | "choice of admin-groups."; | |||
| class/Color."; | case admin-groups { | |||
| leaf admin-group { | ||||
| type te-types:admin-group; | ||||
| description | description | |||
| "TE interface administrative group."; | "Administrative group/Resource | |||
| class/Color."; | ||||
| leaf admin-group { | ||||
| type te-types:admin-group; | ||||
| description | ||||
| "TE interface administrative group."; | ||||
| } | ||||
| } | } | |||
| } | case extended-admin-groups { | |||
| case extended-admin-groups { | if-feature "te-types:extended-admin-groups"; | |||
| if-feature "te-types:extended-admin-groups"; | ||||
| description | ||||
| "Extended administrative group/Resource | ||||
| class/Color."; | ||||
| leaf extended-admin-group { | ||||
| type te-types:extended-admin-group; | ||||
| description | description | |||
| "TE interface extended administrative group."; | "Extended administrative group/Resource | |||
| class/Color."; | ||||
| leaf extended-admin-group { | ||||
| type te-types:extended-admin-group; | ||||
| description | ||||
| "TE interface extended administrative group."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | case named-admin-groups { | |||
| case named-admin-groups { | list named-admin-groups { | |||
| list named-admin-groups { | if-feature "te-types:extended-admin-groups"; | |||
| if-feature "te-types:extended-admin-groups"; | if-feature "te-types:named-extended-admin-groups"; | |||
| if-feature "te-types:named-extended-admin-groups"; | key "named-admin-group"; | |||
| key "named-admin-group"; | ||||
| description | ||||
| "A list of named admin-group entries."; | ||||
| leaf named-admin-group { | ||||
| type leafref { | ||||
| path "../../../../te:globals/" | ||||
| + "te:named-admin-groups/te:named-admin-group/" | ||||
| + "te:name"; | ||||
| } | ||||
| description | description | |||
| "A named admin-group entry."; | "A list of named admin-group entries."; | |||
| leaf named-admin-group { | ||||
| type leafref { | ||||
| path "../../../../te:globals/" | ||||
| + "te:named-admin-groups/te:named-admin-group/" | ||||
| + "te:name"; | ||||
| } | ||||
| description | ||||
| "A named admin-group entry."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | ||||
| /* TE interface SRLGs */ | /* TE interface SRLGs */ | |||
| grouping te-srlgs-config { | grouping te-srlgs-config { | |||
| description | ||||
| "TE interface SRLG grouping."; | ||||
| choice srlg-type { | ||||
| description | description | |||
| "Choice of SRLG configuration."; | "TE interface SRLG grouping."; | |||
| case value-srlgs { | choice srlg-type { | |||
| list values { | description | |||
| key "value"; | "Choice of SRLG configuration."; | |||
| description | case value-srlgs { | |||
| "List of SRLG values that | list values { | |||
| this link is part of."; | key "value"; | |||
| leaf value { | ||||
| type uint32 { | ||||
| range "0..4294967295"; | ||||
| } | ||||
| description | description | |||
| "Value of the SRLG"; | "List of SRLG values that | |||
| this link is part of."; | ||||
| leaf value { | ||||
| type uint32 { | ||||
| range "0..4294967295"; | ||||
| } | ||||
| description | ||||
| "Value of the SRLG"; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | case named-srlgs { | |||
| case named-srlgs { | list named-srlgs { | |||
| list named-srlgs { | if-feature "te-types:named-srlg-groups"; | |||
| if-feature "te-types:named-srlg-groups"; | key "named-srlg"; | |||
| key "named-srlg"; | ||||
| description | ||||
| "A list of named SRLG entries."; | ||||
| leaf named-srlg { | ||||
| type leafref { | ||||
| path "../../../../te:globals/" | ||||
| + "te:named-srlgs/te:named-srlg/te:name"; | ||||
| } | ||||
| description | description | |||
| "A named SRLG entry."; | "A list of named SRLG entries."; | |||
| leaf named-srlg { | ||||
| type leafref { | ||||
| path "../../../../te:globals/" | ||||
| + "te:named-srlgs/te:named-srlg/te:name"; | ||||
| } | ||||
| description | ||||
| "A named SRLG entry."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | ||||
| grouping te-igp-flooding-bandwidth-config { | grouping te-igp-flooding-bandwidth-config { | |||
| description | ||||
| "Configurable items for igp flooding bandwidth | ||||
| threshold configuration."; | ||||
| leaf threshold-type { | ||||
| type enumeration { | ||||
| enum delta { | ||||
| description | ||||
| "'delta' indicates that the local | ||||
| system should flood IGP updates when a | ||||
| change in reserved bandwidth >= the specified | ||||
| delta occurs on the interface."; | ||||
| } | ||||
| enum threshold-crossed { | ||||
| description | ||||
| "THRESHOLD-CROSSED indicates that | ||||
| the local system should trigger an update (and | ||||
| hence flood) the reserved bandwidth when the | ||||
| reserved bandwidth changes such that it crosses, | ||||
| or becomes equal to one of the threshold values."; | ||||
| } | ||||
| } | ||||
| description | description | |||
| "The type of threshold that should be used to specify the | "Configurable items for igp flooding bandwidth | |||
| values at which bandwidth is flooded. 'delta' indicates that | threshold configuration."; | |||
| the local system should flood IGP updates when a change in | leaf threshold-type { | |||
| reserved bandwidth >= the specified delta occurs on the | type enumeration { | |||
| interface. Where 'threshold-crossed' is specified, the local | enum delta { | |||
| system should trigger an update (and hence flood) the | description | |||
| reserved bandwidth when the reserved bandwidth changes such | "'delta' indicates that the local | |||
| that it crosses, or becomes equal to one of the threshold | system should flood IGP updates when a | |||
| values."; | change in reserved bandwidth >= the specified | |||
| } | delta occurs on the interface."; | |||
| leaf delta-percentage { | } | |||
| when "../threshold-type = 'delta'" { | enum threshold-crossed { | |||
| description | ||||
| "THRESHOLD-CROSSED indicates that | ||||
| the local system should trigger an update (and | ||||
| hence flood) the reserved bandwidth when the | ||||
| reserved bandwidth changes such that it crosses, | ||||
| or becomes equal to one of the threshold values."; | ||||
| } | ||||
| } | ||||
| description | description | |||
| "The percentage delta can only be specified when the | "The type of threshold that should be used to specify the | |||
| threshold type is specified to be a percentage delta of | values at which bandwidth is flooded. 'delta' indicates that | |||
| the reserved bandwidth."; | the local system should flood IGP updates when a change in | |||
| reserved bandwidth >= the specified delta occurs on the | ||||
| interface. Where 'threshold-crossed' is specified, the local | ||||
| system should trigger an update (and hence flood) the | ||||
| reserved bandwidth when the reserved bandwidth changes such | ||||
| that it crosses, or becomes equal to one of the threshold | ||||
| values."; | ||||
| } | } | |||
| type rt-types:percentage; | leaf delta-percentage { | |||
| description | when "../threshold-type = 'delta'" { | |||
| "The percentage of the maximum-reservable-bandwidth | description | |||
| considered as the delta that results in an IGP update | "The percentage delta can only be specified when the | |||
| being flooded."; | threshold type is specified to be a percentage delta of | |||
| } | the reserved bandwidth."; | |||
| leaf threshold-specification { | } | |||
| when "../threshold-type = 'threshold-crossed'" { | type rt-types:percentage; | |||
| description | description | |||
| "The selection of whether mirrored or separate threshold | "The percentage of the maximum-reservable-bandwidth | |||
| values are to be used requires user specified thresholds to | considered as the delta that results in an IGP update | |||
| be set."; | being flooded."; | |||
| } | } | |||
| type enumeration { | leaf threshold-specification { | |||
| enum mirrored-up-down { | when "../threshold-type = 'threshold-crossed'" { | |||
| description | description | |||
| "mirrored-up-down indicates that a single set of | "The selection of whether mirrored or separate threshold | |||
| threshold values should be used for both increasing | values are to be used requires user specified thresholds | |||
| and decreasing bandwidth when determining whether | to be set."; | |||
| to trigger updated bandwidth values to be flooded | ||||
| in the IGP TE extensions."; | ||||
| } | } | |||
| enum separate-up-down { | type enumeration { | |||
| description | enum mirrored-up-down { | |||
| "separate-up-down indicates that a separate | description | |||
| threshold values should be used for the increasing | "mirrored-up-down indicates that a single set of | |||
| and decreasing bandwidth when determining whether | threshold values should be used for both increasing | |||
| to trigger updated bandwidth values to be flooded | and decreasing bandwidth when determining whether | |||
| in the IGP TE extensions."; | to trigger updated bandwidth values to be flooded | |||
| in the IGP TE extensions."; | ||||
| } | ||||
| enum separate-up-down { | ||||
| description | ||||
| "separate-up-down indicates that a separate | ||||
| threshold values should be used for the increasing | ||||
| and decreasing bandwidth when determining whether | ||||
| to trigger updated bandwidth values to be flooded | ||||
| in the IGP TE extensions."; | ||||
| } | ||||
| } | } | |||
| description | ||||
| "This value specifies whether a single set of threshold | ||||
| values should be used for both increasing and decreasing | ||||
| bandwidth when determining whether to trigger updated | ||||
| bandwidth values to be flooded in the IGP TE extensions. | ||||
| 'mirrored-up-down' indicates that a single value (or set of | ||||
| values) should be used for both increasing and decreasing | ||||
| values, where 'separate-up-down' specifies that the | ||||
| increasing and decreasing values will be separately | ||||
| specified."; | ||||
| } | } | |||
| description | leaf-list up-thresholds { | |||
| "This value specifies whether a single set of threshold | when "../threshold-type = 'threshold-crossed'" | |||
| values should be used for both increasing and decreasing | + "and ../threshold-specification = 'separate-up-down'" { | |||
| bandwidth when determining whether to trigger updated | description | |||
| bandwidth values to be flooded in the IGP TE extensions. | "A list of up-thresholds can only be specified when the | |||
| 'mirrored-up-down' indicates that a single value (or set of | bandwidth update is triggered based on crossing a | |||
| values) should be used for both increasing and decreasing | threshold and separate up and down thresholds are | |||
| values, where 'separate-up-down' specifies that the increasing | required."; | |||
| and decreasing values will be separately specified."; | } | |||
| } | type rt-types:percentage; | |||
| leaf-list up-thresholds { | ||||
| when "../threshold-type = 'threshold-crossed'" | ||||
| + "and ../threshold-specification = 'separate-up-down'" { | ||||
| description | description | |||
| "A list of up-thresholds can only be specified when the | "The thresholds (expressed as a percentage of the maximum | |||
| bandwidth update is triggered based on crossing a | reservable bandwidth) at which bandwidth updates are to be | |||
| threshold and separate up and down thresholds are | triggered when the bandwidth is increasing."; | |||
| required."; | ||||
| } | } | |||
| type rt-types:percentage; | leaf-list down-thresholds { | |||
| description | when "../threshold-type = 'threshold-crossed'" | |||
| "The thresholds (expressed as a percentage of the maximum | + "and ../threshold-specification = 'separate-up-down'" { | |||
| reservable bandwidth) at which bandwidth updates are to be | description | |||
| triggered when the bandwidth is increasing."; | "A list of down-thresholds can only be specified when the | |||
| } | bandwidth update is triggered based on crossing a | |||
| leaf-list down-thresholds { | threshold and separate up and down thresholds are | |||
| when "../threshold-type = 'threshold-crossed'" | required."; | |||
| + "and ../threshold-specification = 'separate-up-down'" { | } | |||
| type rt-types:percentage; | ||||
| description | description | |||
| "A list of down-thresholds can only be specified when the | "The thresholds (expressed as a percentage of the maximum | |||
| bandwidth update is triggered based on crossing a | reservable bandwidth) at which bandwidth updates are to be | |||
| threshold and separate up and down thresholds are | triggered when the bandwidth is decreasing."; | |||
| required."; | ||||
| } | } | |||
| type rt-types:percentage; | leaf-list up-down-thresholds { | |||
| description | when "../threshold-type = 'threshold-crossed'" | |||
| "The thresholds (expressed as a percentage of the maximum | + "and ../threshold-specification = 'mirrored-up-down'" { | |||
| reservable bandwidth) at which bandwidth updates are to be | description | |||
| triggered when the bandwidth is decreasing."; | "A list of thresholds corresponding to both increasing | |||
| } | and decreasing bandwidths can be specified only when an | |||
| leaf-list up-down-thresholds { | update is triggered based on crossing a threshold, and | |||
| when "../threshold-type = 'threshold-crossed'" | the same up and down thresholds are required."; | |||
| + "and ../threshold-specification = 'mirrored-up-down'" { | } | |||
| type rt-types:percentage; | ||||
| description | description | |||
| "A list of thresholds corresponding to both increasing | "The thresholds (expressed as a percentage of the maximum | |||
| and decreasing bandwidths can be specified only when an | reservable bandwidth of the interface) at which bandwidth | |||
| update is triggered based on crossing a threshold, and | updates are flooded - used both when the bandwidth is | |||
| the same up and down thresholds are required."; | increasing and decreasing."; | |||
| } | } | |||
| type rt-types:percentage; | ||||
| description | ||||
| "The thresholds (expressed as a percentage of the maximum | ||||
| reservable bandwidth of the interface) at which bandwidth | ||||
| updates are flooded - used both when the bandwidth is | ||||
| increasing and decreasing."; | ||||
| } | } | |||
| } | ||||
| /* TE interface metric */ | /* TE interface metric */ | |||
| grouping te-metric-config { | grouping te-metric-config { | |||
| description | ||||
| "TE interface metric grouping."; | ||||
| leaf te-metric { | ||||
| type te-types:te-metric; | ||||
| description | description | |||
| "TE interface metric."; | "TE interface metric grouping."; | |||
| leaf te-metric { | ||||
| type te-types:te-metric; | ||||
| description | ||||
| "TE interface metric."; | ||||
| } | ||||
| } | } | |||
| } | ||||
| /* TE interface switching capabilities */ | /* TE interface switching capabilities */ | |||
| grouping te-switching-cap-config { | grouping te-switching-cap-config { | |||
| description | ||||
| "TE interface switching capabilities."; | ||||
| list switching-capabilities { | ||||
| key "switching-capability"; | ||||
| description | description | |||
| "List of interface capabilities for this interface."; | "TE interface switching capabilities."; | |||
| leaf switching-capability { | list switching-capabilities { | |||
| type identityref { | key "switching-capability"; | |||
| base te-types:switching-capabilities; | ||||
| } | ||||
| description | description | |||
| "Switching Capability for this interface."; | "List of interface capabilities for this interface."; | |||
| } | leaf switching-capability { | |||
| leaf encoding { | type identityref { | |||
| type identityref { | base te-types:switching-capabilities; | |||
| base te-types:lsp-encoding-types; | } | |||
| description | ||||
| "Switching Capability for this interface."; | ||||
| } | } | |||
| description | leaf encoding { | |||
| "Encoding supported by this interface."; | type identityref { | |||
| base te-types:lsp-encoding-types; | ||||
| } | ||||
| description | ||||
| "Encoding supported by this interface."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | ||||
| grouping te-advertisements-state { | grouping te-advertisements-state { | |||
| description | ||||
| "TE interface advertisements state grouping."; | ||||
| container te-advertisements-state { | ||||
| description | description | |||
| "TE interface advertisements state container."; | "TE interface advertisements state grouping."; | |||
| leaf flood-interval { | container te-advertisements-state { | |||
| type uint32; | ||||
| description | ||||
| "The periodic flooding interval."; | ||||
| } | ||||
| leaf last-flooded-time { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "Time elapsed since last flooding in seconds."; | ||||
| } | ||||
| leaf next-flooded-time { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | description | |||
| "Time remained for next flooding in seconds."; | "TE interface advertisements state container."; | |||
| } | leaf flood-interval { | |||
| leaf last-flooded-trigger { | type uint32; | |||
| type enumeration { | description | |||
| enum link-up { | "The periodic flooding interval."; | |||
| description | ||||
| "Link-up flooding trigger."; | ||||
| } | ||||
| enum link-down { | ||||
| description | ||||
| "Link-down flooding trigger."; | ||||
| } | ||||
| enum threshold-up { | ||||
| description | ||||
| "Bandwidth reservation up threshold."; | ||||
| } | ||||
| enum threshold-down { | ||||
| description | ||||
| "Bandwidth reservation down threshold."; | ||||
| } | ||||
| enum bandwidth-change { | ||||
| description | ||||
| "Bandwidth capacity change."; | ||||
| } | ||||
| enum user-initiated { | ||||
| description | ||||
| "Initiated by user."; | ||||
| } | ||||
| enum srlg-change { | ||||
| description | ||||
| "SRLG property change."; | ||||
| } | ||||
| enum periodic-timer { | ||||
| description | ||||
| "Periodic timer expired."; | ||||
| } | ||||
| } | } | |||
| default "periodic-timer"; | leaf last-flooded-time { | |||
| description | ||||
| "Trigger for the last flood."; | ||||
| } | ||||
| list advertised-level-areas { | ||||
| key "level-area"; | ||||
| description | ||||
| "List of level-areas that the TE interface is advertised | ||||
| in."; | ||||
| leaf level-area { | ||||
| type uint32; | type uint32; | |||
| units "seconds"; | ||||
| description | description | |||
| "The IGP area or level where the TE interface link state | "Time elapsed since last flooding in seconds."; | |||
| is advertised in."; | } | |||
| leaf next-flooded-time { | ||||
| type uint32; | ||||
| units "seconds"; | ||||
| description | ||||
| "Time remained for next flooding in seconds."; | ||||
| } | ||||
| leaf last-flooded-trigger { | ||||
| type enumeration { | ||||
| enum link-up { | ||||
| description | ||||
| "Link-up flooding trigger."; | ||||
| } | ||||
| enum link-down { | ||||
| description | ||||
| "Link-down flooding trigger."; | ||||
| } | ||||
| enum threshold-up { | ||||
| description | ||||
| "Bandwidth reservation up threshold."; | ||||
| } | ||||
| enum threshold-down { | ||||
| description | ||||
| "Bandwidth reservation down threshold."; | ||||
| } | ||||
| enum bandwidth-change { | ||||
| description | ||||
| "Bandwidth capacity change."; | ||||
| } | ||||
| enum user-initiated { | ||||
| description | ||||
| "Initiated by user."; | ||||
| } | ||||
| enum srlg-change { | ||||
| description | ||||
| "SRLG property change."; | ||||
| } | ||||
| enum periodic-timer { | ||||
| description | ||||
| "Periodic timer expired."; | ||||
| } | ||||
| } | ||||
| default "periodic-timer"; | ||||
| description | ||||
| "Trigger for the last flood."; | ||||
| } | ||||
| list advertised-level-areas { | ||||
| key "level-area"; | ||||
| description | ||||
| "List of level-areas that the TE interface is advertised | ||||
| in."; | ||||
| leaf level-area { | ||||
| type uint32; | ||||
| description | ||||
| "The IGP area or level where the TE interface link state | ||||
| is advertised in."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | ||||
| /* TE interface attributes grouping */ | /* TE interface attributes grouping */ | |||
| grouping te-attributes { | grouping te-attributes { | |||
| description | ||||
| "TE attributes configuration grouping."; | ||||
| uses te-metric-config; | ||||
| uses te-admin-groups-config; | ||||
| uses te-srlgs-config; | ||||
| uses te-igp-flooding-bandwidth-config; | ||||
| uses te-switching-cap-config; | ||||
| container state { | ||||
| config false; | ||||
| description | description | |||
| "State parameters for interface TE metric."; | "TE attributes configuration grouping."; | |||
| uses te-metric-config; | ||||
| uses te-admin-groups-config; | ||||
| uses te-srlgs-config; | ||||
| uses te-igp-flooding-bandwidth-config; | ||||
| uses te-switching-cap-config; | ||||
| container state { | ||||
| config false; | ||||
| description | ||||
| "State parameters for interface TE metric."; | ||||
| uses te-advertisements-state; | ||||
| } | ||||
| uses te-advertisements-state; | ||||
| } | } | |||
| } | ||||
| grouping te-all-attributes { | ||||
| description | ||||
| "TE attributes configuration grouping for all | ||||
| interfaces."; | ||||
| uses te-igp-flooding-bandwidth-config; | ||||
| } | ||||
| /*** End of TE interfaces device groupings ***/ | grouping te-all-attributes { | |||
| /** | ||||
| * TE device augmentations | ||||
| */ | ||||
| augment "/te:te" { | ||||
| description | ||||
| "TE global container."; | ||||
| /* TE Interface Configuration Data */ | ||||
| uses interfaces-grouping; | ||||
| container performance-thresholds { | ||||
| description | description | |||
| "Performance parameters configurable thresholds."; | "TE attributes configuration grouping for all | |||
| interfaces."; | ||||
| uses te-igp-flooding-bandwidth-config; | ||||
| } | } | |||
| } | ||||
| /* TE globals device augmentation */ | /*** End of TE interfaces device groupings ***/ | |||
| /** | ||||
| * TE device augmentations | ||||
| */ | ||||
| augment "/te:te/te:globals" { | augment "/te:te" { | |||
| description | description | |||
| "Global TE device specific configuration parameters."; | "TE global container."; | |||
| uses lsp-device-timers; | /* TE Interface Configuration Data */ | |||
| } | uses interfaces-grouping; | |||
| container performance-thresholds { | ||||
| description | ||||
| "Performance parameters configurable thresholds."; | ||||
| } | ||||
| } | ||||
| /* TE tunnels device configuration augmentation */ | /* TE globals device augmentation */ | |||
| augment "/te:te/te:tunnels/te:tunnel" { | augment "/te:te/te:globals" { | |||
| description | ||||
| "Tunnel device dependent augmentation."; | ||||
| leaf path-invalidation-action { | ||||
| type identityref { | ||||
| base te-types:path-invalidation-action-type; | ||||
| } | ||||
| description | description | |||
| "Tunnel path invalidation action."; | "Global TE device specific configuration parameters."; | |||
| uses lsp-device-timers; | ||||
| } | } | |||
| uses lsp-device-timers; | ||||
| } | /* TE tunnels device configuration augmentation */ | |||
| /* TE LSPs device state augmentation */ | augment "/te:te/te:tunnels/te:tunnel" { | |||
| description | ||||
| "Tunnel device dependent augmentation."; | ||||
| leaf path-invalidation-action { | ||||
| type identityref { | ||||
| base te-types:path-invalidation-action-type; | ||||
| } | ||||
| description | ||||
| "Tunnel path invalidation action."; | ||||
| } | ||||
| uses lsp-device-timers; | ||||
| } | ||||
| /* TE LSPs device state augmentation */ | ||||
| augment "/te:te/te:lsps/te:lsp" { | augment "/te:te/te:lsps/te:lsp" { | |||
| description | description | |||
| "TE LSP device dependent augmentation."; | "TE LSP device dependent augmentation."; | |||
| uses lsps-device-info; | uses lsps-device-info; | |||
| } | } | |||
| /* TE interfaces RPCs/execution Data */ | /* TE interfaces RPCs/execution Data */ | |||
| rpc link-state-update { | rpc link-state-update { | |||
| description | description | |||
| "Triggers a link state update for the specific interface."; | "Triggers a link state update for the specific interface."; | |||
| input { | input { | |||
| choice filter-type { | choice filter-type { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Filter choice."; | "Filter choice."; | |||
| case match-all { | case match-all { | |||
| leaf all { | leaf all { | |||
| type empty; | type empty; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Match all TE interfaces."; | "Match all TE interfaces."; | |||
| } | ||||
| } | } | |||
| } | case match-one-interface { | |||
| case match-one-interface { | leaf interface { | |||
| leaf interface { | type if:interface-ref; | |||
| type if:interface-ref; | description | |||
| description | "Match a specific TE interface."; | |||
| "Match a specific TE interface."; | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | <CODE ENDS> | |||
| <CODE ENDS> | ||||
| Figure 12: TE device data model YANG module | Figure 12: TE device data model YANG module | |||
| 7. Notifications | 7. Notifications | |||
| Notifications are a key component of any topology data model. | Notifications are a key component of any topology data model. | |||
| [RFC8639] and [RFC8641] define a subscription mechanism and a push | [RFC8639] and [RFC8641] define a subscription mechanism and a push | |||
| mechanism for YANG datastores. These mechanisms currently allow the | mechanism for YANG datastores. These mechanisms currently allow the | |||
| user to: | user to: | |||
| o Subscribe to notifications on a per-client basis. | * Subscribe to notifications on a per-client basis. | |||
| o Specify subtree filters or XML Path Language (XPath) filters so | * Specify subtree filters or XML Path Language (XPath) filters so | |||
| that only contents of interest will be sent. | that only contents of interest will be sent. | |||
| o Specify either periodic or on-demand notifications. | * Specify either periodic or on-demand notifications. | |||
| 8. TE Generic and Helper YANG Modules | 8. TE Generic and Helper YANG Modules | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| This document registers the following URIs in the IETF XML registry | This document registers the following URIs in the IETF XML registry | |||
| [RFC3688]. Following the format in [RFC3688], the following | [RFC3688]. Following the format in [RFC3688], the following | |||
| registrations are requested to be made. | registrations are requested to be made. | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-te | URI: urn:ietf:params:xml:ns:yang:ietf-te | |||
| skipping to change at page 120, line 13 ¶ | skipping to change at page 120, line 4 ¶ | |||
| Email: Bin_Wen@cable.comcast.com | Email: Bin_Wen@cable.comcast.com | |||
| 13. Appendix A: Examples | 13. Appendix A: Examples | |||
| This section contains examples of use of the model with RESTCONF | This section contains examples of use of the model with RESTCONF | |||
| [RFC8040] and JSON encoding. | [RFC8040] and JSON encoding. | |||
| For the example we will use a 4 nodes MPLS network were RSVP-TE | For the example we will use a 4 nodes MPLS network were RSVP-TE | |||
| Tunnels can be setup. The loopbacks of each router are shown. The | Tunnels can be setup. The loopbacks of each router are shown. The | |||
| router network in figure X will be used across the section | router network in figure X will be used across the section | |||
| 10.0.0.1 10.0.0.2 10.0.0.4 | 10.0.0.1 10.0.0.2 10.0.0.4 | |||
| +-----+ +------+ +------+ | +-----+ +------+ +------+ | |||
| | | | | | | | | | | | | | | |||
| | A +---------+ B +------+ D | | | A +---------+ B +------+ D | | |||
| +--+--+ +------+ +--+---+ | +--+--+ +------+ +--+---+ | |||
| | | | | | | |||
| | +-------+ | | | +-------+ | | |||
| | | | | | | | | | | |||
| +------------+ C +--------+ | +------------+ C +--------+ | |||
| | | | | | | |||
| +-------+ | +-------+ | |||
| 10.0.0.3 | 10.0.0.3 | |||
| Figure 13: Example TE topology | Figure 13: Example TE topology | |||
| 13.1. Basic Tunnel Setup | 13.1. Basic Tunnel Setup | |||
| This example uses the TE Tunnel YANG data model defined in this | This example uses the TE Tunnel YANG data model defined in this | |||
| document to create an RSVP-TE signaled Tunnel. First, the TE Tunnel | document to create an RSVP-TE signaled Tunnel. First, the TE Tunnel | |||
| is created with no specific restrictions or constraints (e.g., | is created with no specific restrictions or constraints (e.g., | |||
| protection or restoration). The TE Tunnel ingresses on router A and | protection or restoration). The TE Tunnel ingresses on router A and | |||
| egresses on router D. | egresses on router D. | |||
| In this case, the TE Tunnel is created without specifying additional | In this case, the TE Tunnel is created without specifying additional | |||
| skipping to change at page 125, line 12 ¶ | skipping to change at page 125, line 8 ¶ | |||
| } | } | |||
| } | } | |||
| 14. References | 14. References | |||
| 14.1. Normative References | 14.1. Normative References | |||
| [I-D.ietf-teas-yang-rsvp] | [I-D.ietf-teas-yang-rsvp] | |||
| Beeram, V. P., Saad, T., Gandhi, R., Liu, X., and I. | Beeram, V. P., Saad, T., Gandhi, R., Liu, X., and I. | |||
| Bryskin, "A YANG Data Model for Resource Reservation | Bryskin, "A YANG Data Model for Resource Reservation | |||
| Protocol (RSVP)", draft-ietf-teas-yang-rsvp-16 (work in | Protocol (RSVP)", Work in Progress, Internet-Draft, draft- | |||
| progress), February 2021. | ietf-teas-yang-rsvp-16, 19 February 2021, | |||
| <https://www.ietf.org/archive/id/draft-ietf-teas-yang- | ||||
| rsvp-16.txt>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., | [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., | |||
| and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP | and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP | |||
| Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001, | Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001, | |||
| <https://www.rfc-editor.org/info/rfc3209>. | <https://www.rfc-editor.org/info/rfc3209>. | |||
| skipping to change at page 125, line 46 ¶ | skipping to change at page 125, line 44 ¶ | |||
| Switching (GMPLS) Architecture", RFC 3945, | Switching (GMPLS) Architecture", RFC 3945, | |||
| DOI 10.17487/RFC3945, October 2004, | DOI 10.17487/RFC3945, October 2004, | |||
| <https://www.rfc-editor.org/info/rfc3945>. | <https://www.rfc-editor.org/info/rfc3945>. | |||
| [RFC4206] Kompella, K. and Y. Rekhter, "Label Switched Paths (LSP) | [RFC4206] Kompella, K. and Y. Rekhter, "Label Switched Paths (LSP) | |||
| Hierarchy with Generalized Multi-Protocol Label Switching | Hierarchy with Generalized Multi-Protocol Label Switching | |||
| (GMPLS) Traffic Engineering (TE)", RFC 4206, | (GMPLS) Traffic Engineering (TE)", RFC 4206, | |||
| DOI 10.17487/RFC4206, October 2005, | DOI 10.17487/RFC4206, October 2005, | |||
| <https://www.rfc-editor.org/info/rfc4206>. | <https://www.rfc-editor.org/info/rfc4206>. | |||
| [RFC4872] Lang, J., Ed., Rekhter, Y., Ed., and D. Papadimitriou, | [RFC4872] Lang, J.P., Ed., Rekhter, Y., Ed., and D. Papadimitriou, | |||
| Ed., "RSVP-TE Extensions in Support of End-to-End | Ed., "RSVP-TE Extensions in Support of End-to-End | |||
| Generalized Multi-Protocol Label Switching (GMPLS) | Generalized Multi-Protocol Label Switching (GMPLS) | |||
| Recovery", RFC 4872, DOI 10.17487/RFC4872, May 2007, | Recovery", RFC 4872, DOI 10.17487/RFC4872, May 2007, | |||
| <https://www.rfc-editor.org/info/rfc4872>. | <https://www.rfc-editor.org/info/rfc4872>. | |||
| [RFC4875] Aggarwal, R., Ed., Papadimitriou, D., Ed., and S. | [RFC4875] Aggarwal, R., Ed., Papadimitriou, D., Ed., and S. | |||
| Yasukawa, Ed., "Extensions to Resource Reservation | Yasukawa, Ed., "Extensions to Resource Reservation | |||
| Protocol - Traffic Engineering (RSVP-TE) for Point-to- | Protocol - Traffic Engineering (RSVP-TE) for Point-to- | |||
| Multipoint TE Label Switched Paths (LSPs)", RFC 4875, | Multipoint TE Label Switched Paths (LSPs)", RFC 4875, | |||
| DOI 10.17487/RFC4875, May 2007, | DOI 10.17487/RFC4875, May 2007, | |||
| skipping to change at page 128, line 15 ¶ | skipping to change at page 128, line 15 ¶ | |||
| [RFC8795] Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and | [RFC8795] Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and | |||
| O. Gonzalez de Dios, "YANG Data Model for Traffic | O. Gonzalez de Dios, "YANG Data Model for Traffic | |||
| Engineering (TE) Topologies", RFC 8795, | Engineering (TE) Topologies", RFC 8795, | |||
| DOI 10.17487/RFC8795, August 2020, | DOI 10.17487/RFC8795, August 2020, | |||
| <https://www.rfc-editor.org/info/rfc8795>. | <https://www.rfc-editor.org/info/rfc8795>. | |||
| 14.2. Informative References | 14.2. Informative References | |||
| [I-D.ietf-spring-segment-routing-policy] | [I-D.ietf-spring-segment-routing-policy] | |||
| Filsfils, C., Talaulikar, K., Voyer, D., Bogdanov, A., and | Filsfils, C., Talaulikar, K., Voyer, D., Bogdanov, A., and | |||
| P. Mattes, "Segment Routing Policy Architecture", draft- | P. Mattes, "Segment Routing Policy Architecture", Work in | |||
| ietf-spring-segment-routing-policy-11 (work in progress), | Progress, Internet-Draft, draft-ietf-spring-segment- | |||
| April 2021. | routing-policy-14, 25 October 2021, | |||
| <https://www.ietf.org/archive/id/draft-ietf-spring- | ||||
| segment-routing-policy-14.txt>. | ||||
| [RFC4427] Mannie, E., Ed. and D. Papadimitriou, Ed., "Recovery | [RFC4427] Mannie, E., Ed. and D. Papadimitriou, Ed., "Recovery | |||
| (Protection and Restoration) Terminology for Generalized | (Protection and Restoration) Terminology for Generalized | |||
| Multi-Protocol Label Switching (GMPLS)", RFC 4427, | Multi-Protocol Label Switching (GMPLS)", RFC 4427, | |||
| DOI 10.17487/RFC4427, March 2006, | DOI 10.17487/RFC4427, March 2006, | |||
| <https://www.rfc-editor.org/info/rfc4427>. | <https://www.rfc-editor.org/info/rfc4427>. | |||
| [RFC8800] Litkowski, S., Sivabalan, S., Barth, C., and M. Negi, | [RFC8800] Litkowski, S., Sivabalan, S., Barth, C., and M. Negi, | |||
| "Path Computation Element Communication Protocol (PCEP) | "Path Computation Element Communication Protocol (PCEP) | |||
| Extension for Label Switched Path (LSP) Diversity | Extension for Label Switched Path (LSP) Diversity | |||
| End of changes. 303 change blocks. | ||||
| 2376 lines changed or deleted | 2379 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/ | ||||