RFC 8795
YANG Data Model for Traffic Engineering (TE) Topologies
RFC 8795: YANG Data Model for Traffic Engineering (TE) Topologies β¨
Part 1 of 36, more to come bestie π«Ά
Okay, the title block is the tea β. RFC 8795 is a Standards Track document from the IETF, with ISSN 2070-1721, dated August 2020. The authors are X. Liu (Volta Networks), I. Bryskin (Futurewei Technologies, Inc.), V. Beeram and T. Saad (both Juniper Networks), H. Shah (Ciena), and O. Gonzalez de Dios (Telefonica). The title block doesn't list anything it obsoletes or updates, so it's standing on its own π
Abstract
This doc defines a YANG data model for representing, retrieving, and manipulating Traffic Engineering (TE) Topologies πΈ The model is a base model, so other technology-specific TE topology models can augment it and build on top. Main character base model energy π
Status of This Memo
Real talk, this is an Internet Standards Track document β¨
This document comes from the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community, received public review, and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 7841 π
For the current status, any errata, and where to send feedback, head to https://www.rfc-editor.org/info/rfc8795 π¦
Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved. π
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they stand on the date of publication. Please actually read these, bestie, because they spell out your rights and restrictions for this document π«Ά Any Code Components pulled out of this document have to include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License.
Table of Contents πΊοΈ
1. Introduction
1.1. Terminology
1.2. Tree Structure
1.3. Prefixes in Data Node Names
2. Characterizing TE Topologies
3. Modeling Abstractions and Transformations
3.1. TE Topology
3.2. TE Node
3.3. TE Link
3.4. Transitional TE Link for Multi-layer Topologies
3.5. TE Link Termination Point (LTP)
3.6. TE Tunnel Termination Point (TTP)
3.7. TE Node Connectivity Matrix
3.8. TTP Local Link Connectivity List (LLCL)
3.9. TE Path
3.10. TE Inter-layer Lock
3.11. Underlay TE Topology
3.12. Overlay TE Topology
3.13. Abstract TE Topology
4. Model Applicability
4.1. Native TE Topologies
4.2. Customized TE Topologies
4.3. Merging TE Topologies Provided by Multiple Providers
4.4. Dealing with Multiple Abstract TE Topologies Provided by
the Same Provider
5. Modeling Considerations
5.1. Network Topology Building Blocks
5.2. Technology-Agnostic TE Topology Model
5.3. Model Structure
5.4. Topology Identifiers
5.5. Generic TE Link Attributes
5.6. Generic TE Node Attributes
5.7. TED Information Sources
5.8. Overlay/Underlay Relationship
5.9. Templates
5.10. Scheduling Parameters
5.11. Notifications
6. Guidance for Writing Technology-Specific TE Topology
Augmentations
7. TE Topology YANG Module
8. Security Considerations
9. IANA Considerations
10. References
10.1. Normative References
10.2. Informative References
Appendix A. Complete Model Tree Structure
Appendix B. Companion YANG Data Model for Non-NMDA-Compliant
Implementations
B.1. TE Topology State YANG Module
Appendix C. Example: YANG Data Model for Technology-Specific
Augmentations
Acknowledgments
Contributors
Authors' Addresses
1. Introduction β¨
Okay so the Traffic Engineering Database (TED) is an essential piece of Traffic Engineered (TE) systems that are based on MPLS-TE [RFC2702] and GMPLS [RFC3945]. It's basically a collection of all the TE info about all the TE nodes and TE links in the network π§ A TE topology is the schematic arrangement of TE nodes and TE links sitting in a given TED. A single TE system can have one or more TE topologies, and a TE topology is the thing path computational algorithms actually run on to compute TE paths. Iconic β¨
This document defines a YANG data model [RFC7950] for representing, retrieving, and manipulating TE topologies. The model holds technology-agnostic TE topology building blocks, which other technology-specific TE topology models can augment and reuse π¦
1.1. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here π Those are the only capital-letter keywords with that special meaning, so keep an eye out for them.
We assume you already know the general body of work in currently available RFCs about Traffic Engineering. If you're newer to that, [RFC7926] is a good starting point π
Some key terms used in this doc:
- TED: The Traffic Engineering Database (TED) is a collection of all TE info about all TE nodes and TE links in a given network.
- TE topology: The TE topology is a schematic arrangement of TE nodes and TE links in a given TED. It forms the basis for a graph suitable for TE path computations.
- Native TE topology: A Native TE topology is a topology that is native to a given provider network. A Native TE topology could be discovered via various routing protocols and/or subscribe/publish techniques. This is the topology on which path computational algorithms are run to compute TE paths.
- Customized TE topology: A Customized TE topology is a custom topology that a provider makes for a given client. It typically makes abstractions on the provider's Native TE topology and gets handed to the client. The client receives the Customized TE topology and merges it into the client's own Native TE topology. The client's path computational algorithms aren't typically run on the Customized TE topology. They run on the client's Native TE topology after the merge π
1.2. Tree Structure
Want a simplified picture of the data model? It's in Appendix A of this document π³ The tree format from [RFC8340] is used for the YANG data model tree representation.
1.3. Prefixes in Data Node Names
In this document, names of data nodes and other data model objects get a prefix from the standard prefix tied to the matching YANG imported modules, as shown in Table 1 π
+==========+=======================+===========+
| Prefix | YANG Module | Reference |
+==========+=======================+===========+
| yang | ietf-yang-types | [RFC6991] |
+----------+-----------------------+-----------+
| inet | ietf-inet-types | [RFC6991] |
+----------+-----------------------+-----------+
| nw | ietf-network | [RFC8345] |
+----------+-----------------------+-----------+
| nt | ietf-network-topology | [RFC8345] |
+----------+-----------------------+-----------+
| te-types | ietf-te-types | [RFC8776] |
+----------+-----------------------+-----------+
Table 1: Prefixes and Corresponding YANG Modules
2. Characterizing TE Topologies π
The data model in this doc takes these characteristics of TE topologies into account:
- The TE topology is an abstract control-plane representation of the data-plane topology π§ So attributes specific to the data plane must make their way into the corresponding TE topology modeling. The TE topology is made of dynamic autodiscovered data and fairly static data tied to data-plane nodes and links. The dynamic stuff, like unreserved bandwidth available on data-plane links, can change a lot. The static stuff, like layer network identification, switching and adaptation capabilities and limitations, fate-sharing, and administrative colors, barely ever changes. A single TE topology can cover TE info at multiple switching layers, which is so iconic.
- TE topologies are protocol independent π«Ά Info about topological elements may be learned via link-state protocols, but the topology can exist without depending on any particular protocol.
- The TE topology may not be congruent with the routing topology in a given TE system. The routing topology is built from routing adjacencies, and there isn't always a one-to-one match between a TE link and a routing adjacency. For example, a TE link between a pair of nodes doesn't necessarily mean there's a routing adjacency between those nodes. To learn more, see [TEAS-TOPO] and [YANG-L3] π
- Each TE topological element has at least one information source attached to it. In some scenarios, a given topological element could have more than one information source π
- TE topologies can be hierarchical πͺ Each node and link of a given TE topology can be associated with a respective underlay topology. That means each node and link can be tied to an independent stack of supporting TE topologies.
- TE topologies can be customized β¨ A network provider can present TE topologies of a given network to its client, customized on a per-client-request basis. The customization could be done by the provider, by the client, or through provider/client negotiation. The relationship between a customized topology and the provider's native topology could be captured as hierarchical (overlay/underlay), but otherwise the two topologies are decoupled from each other. The customized topology is what the client sees, while the provider's native topology is known in its entirety only to the provider itself π
3. Modeling Abstractions and Transformations π¦
3.1. TE Topology
A TE topology is a Traffic Engineering representation of one or more layers of network topologies πΈ It's made up of TE nodes (TE graph vertices) connected via TE links (TE graph edges). A TE topology gets mapped to a TE graph, periodt π
3.2. TE Node π§
okay so a TE node is an element of a TE topology, and it shows up as a vertex on a TE graph π¦ It can stand in for one or several nodes, or even just a fraction of a node, and that node can be a switch or router that's physical or virtual. A TE node belongs to exactly one TE topology and is fully defined there. It gets a unique ID within the TE topology scope π Its attributes cover the data-plane side of the associated node(s), like the connectivity matrix, plus configuration data like the TE node name. A given TE node can be reached on the TE graph over any of the TE links that terminate on it β¨
multi-layer TE nodes are the iconic example here π A single physical node that switches at multiple network layers can be split up into several logical TE nodes, each one a fraction of that physical node. Some of those logical TE nodes live in the client-layer TE topology, and the rest belong to the server-layer TE topology π«Ά
In Figure 1, Node-1, Node-2, and Node-3 are TE nodes πΈ
| +---+ __
| | | TE Node \/ TTP o LTP
| +---+
|
| ----- TE Link
| ***** Node Connectivity Matrix,
| TTP Local Link Connectivity
| @@@@@ TE Tunnel
o----------------------------------
Node-1 Node-3
+------------+ +------------+
| TTP-1 | | TTP-1 |
|LTP __ | TE-Tunnel-1 | __ |
|-6 \/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\/ |
o * * oLTP-1 Node-2 LTP-6o * * o
| * * | +------------+ | * * |
| * TTP-2* | | | | * TTP-2* |
| * __ * |LTP-2 LTP-6| |LTP-1 LTP-5| * __ * |
o* \/ *o-----------o************o-----------o* \/ *o
|LTP * * | Link-12 | * | Link-23 | * * |
|-5 * * | LTP-5| * |LTP-2 | * * |
+--o------o--+ o************o +--o------o--+
LTP-4 LTP-3 | * * * | LTP-4 LTP-3
| ** * |
+--o------o--+
LTP-4 LTP-3
LTP: Link Termination Point
TTP: Tunnel Termination Point
Figure 1: TE Topology Modeling Abstractions
3.3. TE Link π
a TE link is an element of a TE topology, drawn as an edge on a TE graph π The arrows on an edge show one or both directions of the TE link. When you've got a pair of parallel links going in opposite directions, an edge without arrows gets used too β¨ A TE link can represent one or several (physical) links, or just a fraction of a link. Like TE nodes, it belongs to exactly one TE topology and is fully defined there, and it gets a unique ID within the TE topology scope π§ Its attributes include data-plane parameters tied to the associated link(s), such as unreserved bandwidth and resource maps / resource pools, plus configuration data like remote node IDs / link IDs, Shared Risk Link Groups (SRLGs), and administrative colors. A TE link connects to a TE node by terminating on it via exactly one TE Link Termination Point (LTP) π«Ά
In Figure 1, Link-12 and Link-23 are TE links π
3.4. Transitional TE Link for Multi-layer Topologies π¦
okay this one is giving multi-layer realness π Networks are usually built from multiple network layers, where one or more client-layer signals can be multiplexed and encapsulated into a server-layer signal [RFC5212] [G.805]. That server-layer signal can travel through the server-layer network across multiple nodes, until it gets terminated, and then the client-layer signals reappear at the node that terminates it. Examples of multi-layer networks include (1) IP over MPLS over Ethernet and (2) low-order Optical Data Unit-k (ODUk) signals multiplexed into a high-order ODUl (l>k) carried over an Optical Channel (OCh) signal in an Optical Transport Network (OTN), as defined in [G.872] and [G.709] π
TE links from Section 3.3 can be used to represent links within a network layer. But in a multi-layer network, TE nodes and TE links only let you represent each network layer as a separate TE topology π Each of those single-layer TE topologies would be isolated from its client and server-layer TE topologies, if those are present. The highest network layer and the lowest network layer in the hierarchy only have a single adjacent layer below or above, respectively. Multiplexing client-layer signals and encapsulating them into a server-layer signal requires a function that's provided inside a node (typically realized in hardware). This function is also called "layer transition" π₯
One of the key requirements for path computation is being able to calculate a path between two endpoints across a multi-layer network, based on the TE topology that represents that network. So an extra TE construct is needed to represent potential layer transitions in the multi-layer TE topology, connecting the TE topologies that represent each separate network layer π That's the transitional TE link! It represents the layer transition function inside a node that's decomposed into multiple logical nodes, which are represented as TE nodes (also see [G.8080] for the definition of a transitional link for the OTN). Basically, a transitional TE link connects a client-layer node with a server-layer node π§
Here's the tea: a TE link from Section 3.3 has LTPs of exactly the same kind on each link end. The transitional TE link is different. It has client-layer LTPs on the client side and, in most cases, a single server-layer LTP on the server side πΈ It should be noted that transitional links are a helper construct in the multi-layer TE topology, and they only exist as long as they're not in use, since they represent potential connectivity π When the server-layer trail has been established between the server-layer LTP of two transitional links in the server-layer network, the resulting client-layer link in the data plane will be represented as a normal TE link in the client-layer topology β¨ The transitional TE links will reappear once that server-layer trail has been torn down π
| |
| +---+ ---
| | | TE Node \ / Transitional
| +---+ | Link
|
| ----- Client-Layer Link
| ===== Server-Layer Link
| ***** Layer Boundary
o----------------------------------
+-------------------+
| +-------+ | +-------+
-----|Client-|------+ | Client- -----|Client-|
| |Layer |---+ | | Layer |Layer |
-----|Switch |-+ | | | Links -----|Node |
| +------ + | | | | +-------+
| | | | | Client | | |
| | | ---_| Layer --- ---
***|***********|*| \ /*|***************************\ /*\ /****
| --- | | Server Transitional | |
| Layer \ / | | Layer Links | |
| Term. | | | | |
| | | | | |
| +-------+ | +-------+
=============|Server-|===== Server- ====|Server-|====
| |Layer | | Layer |Layer |
=============|Switch |===== Links ====|Node |====
| +-------+ | +-------+
+-------------------+
Physical Node View TE Topology View
Figure 2: Modeling a Multi-layer Node (Dual-layer Example)
3.5. TE Link Termination Point (LTP) β¨
A TE Link Termination Point (LTP) is a conceptual point of connection of a TE node to one of the TE links, terminated by the TE node π The cardinality between an LTP and the associated TE link is 1:0..1.
In Figure 1, Node-2 has six LTPs: LTP-1 through LTP-6 π
3.6. TE Tunnel Termination Point (TTP) π
A TE Tunnel Termination Point (TTP) is an element of a TE topology representing one or several potential transport service termination points (i.e., service client adaptation points, such as a WDM/OCh transponder) π ("WDM" stands for "Wavelength Division Multiplexing".) A TTP is associated with (hosted by) exactly one TE node. It gets a unique ID within the TE node scope π«Ά Depending on the TE node's internal constraints, a given TTP hosted by the TE node could be accessed via one, several, or all of the TE links terminated by the TE node π§
In Figure 1, Node-1 has two TTPs: TTP-1 and TTP-2 πΈ
3.7. TE Node Connectivity Matrix π
A TE node connectivity matrix is a TE node's attribute describing the TE node's switching limitations, in the form of valid switching combinations of the TE node's LTPs (see below) π₯ From the point of view of a potential TE path arriving at the TE node at a given inbound LTP, the node's connectivity matrix describes the valid (permissible) outbound LTPs from which the TE path can leave the TE node π
In Figure 1, the connectivity matrix on Node-2 is as follows:
{<LTP-6, LTP-1>, <LTP-5, LTP-2>, <LTP-5, LTP-4>, <LTP-4, LTP-1>,
<LTP-3, LTP-2>}
3.8. TTP Local Link Connectivity List (LLCL) π¦
A TTP Local Link Connectivity List (LLCL) is a list of TE links terminated by the TE node hosting a TTP, to which the TTP could be connected π From the point of view of the potential TE path of a connection, an LLCL provides a list of valid TE links the TE path needs to start/stop on for the connection to be successfully terminated on a TTP π
In Figure 1, the LLCL on Node-1 is as follows:
{<TTP-1, LTP-5>, <TTP-1, LTP-2>, <TTP-2, LTP-3>, <TTP-2, LTP-4>}
3.9. TE Path π
A TE path is an ordered list of TE links and/or TE nodes on the TE topology graph, and this path interconnects a pair of TTPs to be used by a potential connection π For example, TE paths could be a product of successful path computation performed for a given transport service β¨
In Figure 1, the TE path for TE-Tunnel-1 is as follows:
{Node-1:TTP-1, Link-12, Node-2, Link-23, Node-3:TTP-1}
3.10. TE Inter-layer Lock β¨
okay so a TE inter-layer lock is the modeling concept that describes how the client layer and the server layer are connected by adaptation π and why it matters for multi-layer Traffic Engineering π . It's a group of M client-layer LTPs and N server-layer TTPs, and inside that group, data arriving at any of the client-layer LTPs could be adopted onto any of the server-layer TTPs π¦. Each lock gets an inter-layer lock ID, and that ID is unique across all TE topologies from the same provider π. Every client-layer LTP and server-layer TTP in a given lock is tagged with the same inter-layer lock ID attribute, and that's the whole secret handshake π€«
Figure 3 is giving main character energy π. Inter-layer lock IL-1 links six client-layer LTPs (C-LTP-1 through C-LTP-6) to two server-layer TTPs (S-TTP-1 and S-TTP-2). They all carry the attribute TE inter-layer lock ID IL-1, and that tag is the only thing that shows they're connected πΈ
| +---+ __
| | | TE Node \/ TTP o LTP
| +---+
|
| ----- TE Link
| ***** TTP Local Link Connectivity
o----------------------------------
(IL-1) C-LTP-1 +------------+ C-LTP-2 (IL-1)
--------O (IL-1) O--------
(IL-1) C-LTP-3 | S-TTP-1 | C-LTP-4 (IL-1)
--------O __ 0--------
(IL-1) C-LTP-5 | *\/* | C-LTP-6 (IL-1)
--------O * * O--------
| *(IL-1)* |
S-LTP-3 | * S-TTP-2* | S-LTP-4
--------o* __ *o--------
| *\/* |
| * * |
+--o------o--+
S-LTP-1 | | S-LTP-2
Figure 3: TE Inter-layer Lock ID Associations
Now the multi-ID stuff is where it gets spicy πΆοΈ A given LTP can have zero, one, or more inter-layer lock IDs. If it has several, the data arriving there can be adopted onto any TTP tied to all of those locks π§© For example, C-LTP-1 could carry both IL-1 and IL-2. That means C-LTP-1 can use not just the TTPs in IL-1 (S-TTP-1 and S-TTP-2 in the figure) but also any TTP in IL-2 π
On the flip side, a TTP can have one or more inter-layer lock IDs too. That means it can offer the adaptation service to any client-layer LTP whose inter-layer lock ID matches one of its own β¨ Each TTP also has an unreserved adaptation bandwidth attribute, which just announces how many adaptation resources it still has left to share between all the potential client-layer LTPs π«Ά
LTPs and TTPs in the same lock can live on the same hybrid, multi-layer TE node, or on multiple TE nodes in the same or different TE topologies π The "different topologies" case is the big one, because TE topologies for different layer networks can be modeled as separate augmentations of the basic TE topology model that all layers share π€―
3.11. Underlay TE Topology π§±
An underlay TE topology is a TE topology that acts as the base for building overlay TE topologies. It's the foundation, bestie ποΈ
3.12. Overlay TE Topology πͺ
An overlay TE topology is a TE topology built on top of one or more underlay TE topologies. Each TE node in the overlay stands for an arbitrary segment of an underlay TE topology, and each TE link in the overlay stands for an arbitrary TE path in one of the underlay TE topologies π¦ The overlay and its underlays can be different layer networks (for example, OTN/ODUk and WDM/OCh, respectively) or the same layer network. Both are valid, no cap π§
3.13. Abstract TE Topology π
An abstract TE topology is a topology made of abstract topological elements: nodes, links, and TTPs π It's an overlay TE topology that a topology provider creates for its client. It's customized from one or more of the provider's Native TE topologies (underlay TE topologies), the provider's policies, and the client's preferences π For instance, a first-level topology provider (like a domain controller) can build an abstract TE topology for its client (say, a multi-domain service coordinator) using some of its Native TE topologies, local policies or profiles, and the client's TE topology configuration requests πΈ
Figure 4 shows an example of an abstract TE topology π
| +---+
| | | TE Node
| +---+
| ----- TE Link
o----------------------------------
+---+ +---+
|S3 | |S5 |
+---+\ / +---+
\ /
\ /
\+---+/ +---+
/|AN1|\----------------|S8 |
/ +---+ \ +---+
+---+ / \ +---+
|S9 | |S11|
+---+ +---+
Abstract TE Topology
+---+ +---+
|S1 |--------------------|S2 |
+---+ +---+
/ \
/ \
+---+ / +---+ \ +---+
|S3 |--------------------|S4 |---------|S5 |
+---+\ +---+ +---+
\ \ \
\ \ \
\+---+ +---+ +---+
/|S6 |\ |S7 |---------|S8 |
/ +---+ \ +---+\ /+---+
+---+ / \ +---+ +---+ /
|S9 |-------------|S10|--------------|S11|/
+---+ +---+ +---+
Native TE Topology
Figure 4: Abstract TE Topology
4. Model Applicability π
4.1. Native TE Topologies π·
The model in this document can be used to represent and retrieve Native TE topologies on a given TE system π
Check out Figure 5 π R1 through R9 are nodes that represent routers. An implementation MAY choose to build a Native TE topology using all of the nodes and links in the given TED, like in Figure 6. The data model defined in this document can be used to represent and retrieve that TE topology π§
| +---+
| | | TE Node
| +---+
| ----- TE Link
o----------------------------------
+---+ +---+ +---+ +---+ +---+
| R1|-------| R2|--------| R3|---------| R4|---------| R5|
+---+ +---+ +---+ +---+ +---+
| / \ / \ /
| / \ / \ /
| / \ / \ /
| / \ / \ /
| / \ / \ /
+---+ +---+ +---+ +---+
| R6|-------------| R7| | R8|---------| R9|
+---+ +---+ +---+ +---+
Figure 5: Example Network Topology
---------------
| Native | | [ ] TE Node
| TE Topology | | +++ TE Link
--------------- o--------------
[R1] ++++ [R2] ++++ [R3] ++++ [R4] ++++ [R5]
+ + + + + +
+ + + + + +
+ + ++ ++
[R6] +++++++++ [R7] [R8] ++++ [R9]
Figure 6: Native TE Topology as Seen on Node R3
Now let's say the topology is split so that some nodes use OSPF-TE while others use ISIS-TE (Figure 7) π An implementation MAY choose to build separate TE topologies based on the information source. The Native TE topologies built using only the nodes and links learned from one specific information source are shown in Figure 8 π«§ The data model defined in this document can be used to represent and retrieve these TE topologies too π
:
TE Info Distributed via ISIS-TE : TE Info Distributed via OSPF-TE
:
+---+ +---+ +---+ +---+ +---+
| R1|-------| R2|--------| R3|---------| R4|---------| R5|
+---+ +---+ +---+ +---+ +---+
| / : \ / \ /
| / : \ / \ /
| / : \ / \ /
| / : \ / \ /
| / : \ / \ /
+---+ +---+ : +---+ +---+
| R6|-------------| R7| : | R8|---------| R9|
+---+ +---+ : +---+ +---+
:
Figure 7: Example Split Network Topology
----------------------- : -----------------------
|Native TE Topology | : |Native TE Topology |
|Info-Source: ISIS-TE | : |Info-Source: OSPF-TE |
----------------------- : -----------------------
:
[R1] ++++ [R2] ++++ [R3] : [R3'] ++++ [R4] ++++ [R5]
+ + : + + + +
+ + : + + + +
+ + : ++ ++
[R6] +++++++++ [R7] : [R8] ++++ [R9]
Figure 8: Native TE Topologies as Seen on Node R3
Last but not least π the data model can also represent and retrieve a TE topology built using only the nodes and links that belong to one particular technology layer. The data model is flexible enough to handle lots of these Native TE topologies π¦π«Ά
4.2. Customized TE Topologies β¨
okay so a Customized TE topology is basically a topology the provider tweaked just for one client π The provider does it to match that client's needs or preferences. This model can represent, retrieve, and manipulate Customized TE topologies, so the provider can show the network in abstract TE terms on a per-client basis π These custom topologies have enough info for the client to compute and pick paths based on its own policies. Iconic, honestly π
Let's look at Figure 9 π¦ This is a super typical packet optical transport setup: the WDM-layer network domain acts as a server network domain, giving transport connectivity to the packet-layer network domain (the client network domain). R1, R2, R3, and R4 are IP routers hooked up to an optical WDM transport network, and A, B, C, D, E, and F are the WDM nodes that make up the server network domain π
| +---+ /-\
| | | Router ( ) WDM
| +---+ Node \-/ Node
|
o----------------------------
+---+ /-\ /-\ /-\ +---+
| R1|-------( A )--------( C )---------( E )---------| R3|
+---+ \-/ \-/ \-/ +---+
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
+---+ /-\ /-\ /-\ +---+
| R2|---------( B )---------( D )---------( F )---------| R4|
+---+ \-/ \-/ \-/ +---+
Figure 9: Example Packet Optical Topology
So the goal here is to beef up the client's TE topology with a Customized TE topology from the WDM network π Given the paths A-E, B-F, and B-E (see Figure 10), the client gets a Customized TE topology like the one in Figure 11 β¨ That gets merged with the client's Native TE topology, and the end result is Figure 12. Main character energy for real π
| ***** B-F WDM Path
| @@@@@ B-E WDM Path
| $$$$$ A-E WDM Path
o--------------------
+---+ /-\ $$$$$$$$ /-\ $$$$$$$$$ /-\ +---+
| R1|-------( A )--------( C )---------( E )---------| R3|
+---+ \-/ @\-/ @@@@@@@@@ \-/ +---+
@/ \ / \
@/ \ / \
@/ \ / \
@/ \ / \
@/ \ / \
+---+ /-\ ********* /-\ ********* /-\ +---+
| R2|---------( B )---------( D )---------( F )---------| R4|
+---+ \-/ \-/ \-/ +---+
Figure 10: Paths within the Provider Domain
++++++++ [A] ++++++++++++++++++++ [E] +++++++++
+++++
++++
++++
++++
++++
++++++++ [B] ++++++++++++++++++++ [F] +++++++++
Figure 11: Customized TE Topology Provided to the Client
[R1] ++++++++ [A] ++++++++++++++++++++ [E] +++++++++ [R3]
+++++
++++
++++
++++
++++
[R2] ++++++++ [B] ++++++++++++++++++++ [F] +++++++++ [R4]
Figure 12: Customized TE Topology Merged with
the Client's Native TE Topology
The data model in this document can be used to represent, retrieve, and manipulate the Customized TE topology shown in Figure 11 π¦
Now, a Customized TE topology is not necessarily an abstract TE topology π The provider might make an abstract TE topology of some type (like a single-abstract-node-with-connectivity-matrix topology, or a border-nodes-connected-via-mesh-of-abstract-links topology, etc.) and expose it to all or some clients, expecting them to use it as-is without any customizing π On the other hand, a client can ask for a customized version of the provider's Native TE topology. For example, it could ask to remove TE links that belong to certain layers, are too slow, aren't protected, and/or have a certain affinity π§ Note that the resulting TE topology won't be abstract (since it won't contain abstract elements), but it will be customized, because it was modified based on the client's instructions β¨
The client ID field in the TE topology identifier (Section 5.4) tells you which client the TE topology is customized for π«Ά Here's the tea: an authorized client MAY receive a TE topology whose client ID field matches some other client, BUT the client can only customize TE topologies where the client ID field is either set to 0 or matches its own ID π And if the client starts reconfiguring a topology, its client ID gets automatically set in the topology ID field for all future configurations and updates on that topology. Lowkey genius πΈ
The provider can also set its own ID in the client ID field of the topology ID, and by doing that it MAY tell the client that a given TE topology cannot be renegotiated π
Even though this data model lets you access TE topology information across clients, implementations MAY restrict access for particular clients to particular data fields π The Network Configuration Access Control Model (NACM) [RFC8341] is one mechanism that provides exactly that. Iykyk, and now you do too π
4.3. Merging TE Topologies Provided by Multiple Providers β¨
okay so a client can get TE topologies from multiple providers, and each provider runs its own piece of a multi-domain network π§©. To actually use them, the client has to merge everything into one or more of its own Native TE topologies, and each merged one should show the whole multi-domain network in the same consistent way π . That's what lets the client pick end-to-end TE paths for services that cross several domains π¦
here's what merging involves π
- Finding the neighboring domains and locking their topologies horizontally by connecting their inter-domain open-ended TE links π
- Renaming TE node IDs, link IDs, and SRLG IDs so they get IDs from a separate namespace π·οΈ this matters because every TE topology is basically independent, so TE node IDs, link IDs, or SRLG IDs can clash π
- Locking TE topologies from different layer networks vertically, based on the topology inter-layer locks the providers gave, so inter-layer path computations work across several TE topologies from the same topology provider π
Figure 13 shows the client merging the TE topologies its providers handed over π
/---\ +---+ +---+ +---+ +---+ /---\
|C11|------|S13|----|S15|------|S23|----|S25|------|C21|
\---/ +---+\ +---+ +---+ /+---+ \---/
\ /
\ /
\+---+ +---+/ +---+ /---\
|S18|------|S24| |S28|------|C22|
+---+ +---+\ /+---+ \---/
\/
/\
/---\ +---+ +---+ +---+/ \+---+ /---\
|C12|------|S19|----|S17|------|S29|----|S27|------|C23|
\---/ +---+ +---+ +---+ +---+ \---/
Domain 1 TE Topology Domain 2 TE Topology
+---+ +---+ +---+ +---+
-----|S13|----|S15|---- ----|S23|----|S25|----
+---+\ +---+ +---+ /+---+
\ /
\ /
\+---+ +---+/ +---+
|S18|---- ----|S24| |S28|----
+---+ +---+\ /+---+
\/
/\
+---+ +---+ +---+/ \+---+
-----|S19|----|S17|---- ----|S29|----|S27|----
+---+ +---+ +---+ +---+
Figure 13: Merging Domain TE Topologies: An Example
in Figure 13, each of the two providers serves the client's (abstract or Native) TE topology, describing the part of the network it controls π°. The client looks at things like inter-domain plug IDs or remote TE node IDs / link IDs (as the TE topology model defines them) and can figure out two things π΅οΈββοΈ
- the two domains are next to each other and linked by three inter-domain TE links, and
- each domain hooks up to a different customer site: the one on the left connects to customer devices C11 and C12, and the one on the right connects to C21, C22, and C23.
so the client connects the open-ended TE links, like the upper part of the figure shows π«Ά
okay so there's a way to connect the open-ended inter-domain TE links of neighboring domains: the providers could be required to include a remote node ID / link ID attribute on their inter-domain TE links π. but ngl that's not very flexible π the providers might not even know those remote IDs, and it also doesn't let the client mix and match multiple topologies from the same providers (more on that below) π€. the better option is to tag the links with the inter-domain plug ID attribute π. the inter-domain plug ID is a number that's unique across the whole network and identifies the connection that supports a given inter-domain TE link β¨. instead of a remote node ID / link ID, an inter-domain TE link can carry a non-zero inter-domain plug ID π. two neighboring domain topologies from different providers should each have at least one open-ended inter-domain TE link whose plug ID matches one the neighbor provides π€. for example, the inter-domain TE link starting at node S15 in the Domain 1 TE topology (Figure 13) and the one coming from node S23 in the Domain 2 TE topology could both use the same plug ID (e.g., 175344) π―. this lets the client spot the adjacent nodes in the two neighboring TE topologies and tie their inter-domain TE links together, no matter what their node IDs / link IDs are (which, like we said, could come from totally separate namespaces) πΈ. plug IDs might be assigned and managed by a central network authority ποΈ. or they could be autodiscovered on the fly, for example with the Link Management Protocol (LMP) π
the client also renames the TE nodes, links, and SRLGs in the abstract TE topologies, giving them IDs from a separate namespace that the client manages itself π·οΈβ¨. this renaming is needed because the two abstract TE topologies can each have their own namespace, and those namespaces are generally independent, so overlaps are possible π. for example, both TE topologies have a TE node called S7, and after renaming they show up in the merged TE topology as S17 and S27 π
once merging is done, the client can use the merged TE topology to compute paths across both domains, like finding a TE path from C11 to C23 ππ
4.4. Dealing with Multiple Abstract TE Topologies Provided by the Same Provider π
depending on local configuration, templates, and/or policies the client pushed, a single provider might show the client more than one abstract TE topology π. for instance, one could be optimized for lowest cost, another for the best possible delay metrics, and yet another for maximum bandwidth availability for the client's services πΈβ‘. the client can also ask some or all providers to expose extra abstract TE topologies, maybe of a different type and/or optimized in a different way from the ones already provided π§ . either way, the client should be ready for a provider to offer more than one abstract TE topology π«Ά
it's up to the client to decide how to mix and match the multiple abstract TE topologies from each provider (or some of them), and how to merge them into the client's Native TE topologies π. this decision is based on the client's own local configuration and/or policies that its own clients passed along to it π. the client also decides how many merged TE topologies it needs to make and keep π. for example, on top of the merged TE topology in the upper part of Figure 13, the client might merge the abstract TE topologies from the two providers, as in Figure 14, into additional Native TE topologies, as in Figure 15 π¦
Domain 1 Abstract TE Topology 1 Domain 2 Abstract TE Topology 1
+---+ +---+ +---+ +---+
-----|S13|----|S15|---- ----|S23|----|S25|----
+---+\ +---+ +---+ /+---+
\ /
\ /
\+---+ +---+/ +---+
|S18|---- ----|S24| |S28|----
+---+ +---+\ /+---+
\/
/\
+---+ +---+ +---+/ \+---+
-----|S19|----|S17|---- ----|S29|----|S27|----
+---+ +---+ +---+ +---+
Domain 1 Abstract TE Topology 2 Domain 2 Abstract TE Topology 2
+------------+ +------------+
-----| |---- ----| |----
| | | |
| AN1 |---- ----| AN1 |----
| | | |
-----| |---- ----| |----
+------------+ +------------+
Figure 14: Merging Domain TE Topologies: Another Example
Client's Merged TE Topology 2
/---\ +------------+ +------------+ /---\
|C11|------| |------| |------|C21|
\---/ | | | | \---/
| | | |
| | | |
| | | | /---\
| AN11 |------| AN21 |------|C22|
| | | | \---/
| | | |
| | | |
/---\ | | | | /---\
|C12|------| |------| |------|C23|
\---/ +------------+ +------------+ \---/
Client's Merged TE Topology 3
/---\ +------------+ +---+ +---+ /---\
|C11|------| |------|S23|----|S25|------|C21|
\---/ | | +---+ /+---+ \---/
| | /
| | /
| | +---+/ +---+ /---\
| AN11 |------|S24| |S28|------|C22|
| | +---+\ /+---+ \---/
| | \/
| | /\
/---\ | | +---+/ \+---+ /---\
|C12|------| |------|S29|----|S27|------|C23|
\---/ +------------+ +---+ +---+ \---/
Figure 15: Multiple Native (Merged) Client's TE Topologies
quick heads up π letting the client mix and match several TE topologies only works if inter-domain plug IDs (not a remote node ID / link ID) are the way neighboring domains get identified and their inter-domain TE links get resolved πβ¨
and it's important to know that each of the three Native (merged) TE topologies could be used by the client to compute TE paths for any of the multi-domain services π. which one to pick for a given service depends on the service's parameters/requirements, the topology's style and optimization criteria, and the level of detail π§π
5. Modeling Considerations π
5.1. Network Topology Building Blocks π§±
okay so the building blocks for network topology are all explained over in [RFC8345]. this TE topology model is basically the sequel: it augments and uses the ietf-network-topology module from [RFC8345] β¨
+------------------------+
| Network Topology Model |
| (ietf-network-topology)|
+------------------------+
|
|
|
V
+------------------------+
| TE Topology |
| Model |
+------------------------+
Figure 16: Augmenting the Network Topology Model
5.2. Technology-Agnostic TE Topology Model π
the TE topology model in this document is meant to be network technology agnostic π other technology-specific TE topology models can augment and use the building blocks this model provides, like in Figure 17 π¦
+-----------------------------+
| TE Topology Model |
+-----------------------------+
|
+-------------+-------------+-------------+
| | | |
V V V V
+-------------+ +-------------+
| Technology- | | Technology- |
| Specific | ...................... | Specific |
| TE Topology | | TE Topology |
| Model 1 | | Model n |
+-------------+ +-------------+
Figure 17: Augmenting the Technology-Agnostic TE Topology Model
5.3. Model Structure ποΈ
here's the big picture of how the high-level model is structured πΈ check out the tree below:
module: ietf-te-topology
augment /nw:networks/nw:network/nw:network-types:
+--rw te-topology!
augment /nw:networks:
+--rw te!
+--rw templates
+--rw node-template* [name] {template}?
| ............
+--rw link-template* [name] {template}?
............
augment /nw:networks/nw:network:
+--rw te-topology-identifier
| +--rw provider-id? te-global-id
| +--rw client-id? te-global-id
| +--rw topology-id? te-topology-id
+--rw te!
| ............
augment /nw:networks/nw:network/nw:node:
+--rw te-node-id? te-types:te-node-id
+--rw te!
| ............
+--rw tunnel-termination-point* [tunnel-tp-id]
+--rw tunnel-tp-id binary
| ............
+--rw supporting-tunnel-termination-point*
[node-ref tunnel-tp-ref]
| ............
augment /nw:networks/nw:network/nt:link:
+--rw te!
| ..........
augment /nw:networks/nw:network/nw:node/nt:termination-point:
+--rw te-tp-id? te-types:te-tp-id
+--rw te!
| ............
5.4. Topology Identifiers π
every TE topology gets a unique key with three parts: topology-id, provider-id, and client-id π the combo of provider-id and topology-id is what uniquely identifies a Native TE topology on a given provider. client-id only shows up when Customized TE topologies are in the picture, and Native TE topologies use a client-id value of 0 β¨
augment /nw:networks/nw:network:
+--rw te-topology-identifier
| +--rw provider-id? te-global-id
| +--rw client-id? te-global-id
| +--rw topology-id? te-topology-id
+--rw te!
| ............
5.5. Generic TE Link Attributes π
the model covers the generic TE link attributes, aka the stuff like bandwidth, administrative groups, SRLGs, switching capabilities, TE metric extensions, etc. π
+--rw te-link-attributes
.....................
+--rw admin-status? te-admin-status
| .....................
+--rw link-index? uint64
+--rw administrative-group? te-types:admin-groups
+--rw link-protection-type? enumeration
+--rw max-link-bandwidth? te-bandwidth
+--rw max-resv-link-bandwidth? te-bandwidth
+--rw unreserved-bandwidth* [priority]
| .....................
+--rw te-default-metric? uint32
| .....................
+--rw te-srlgs
+--rw te-nsrlgs {nsrlg}? .....................
5.6. Generic TE Node Attributes π
the model also covers the generic TE node attributes π first up is how a generic connectivity matrix is defined:
+--rw te-node-attributes
...........
+--rw connectivity-matrices
...........
| +--rw connectivity-matrix* [id]
| | +--rw id uint32
| | +--rw from
| | | +--rw tp-ref? leafref
| | | +--rw label-restrictions
| | +--rw to
| | | +--rw tp-ref? leafref
| | | +--rw label-restrictions
| | +--rw is-allowed? boolean
...........
| | +--rw underlay! {te-topology-hierarchy}?
...........
| | +--rw path-constraints
...........
| | +--rw optimizations
...........
| | +--ro path-properties
...........
next up is the TTP Local Link Connectivity List π¦
+--rw tunnel-termination-point* [tunnel-tp-id]
+--rw tunnel-tp-id binary
+--rw admin-status? te-types:te-admin-status
+--rw name? string
+--rw switching-capability? identityref
+--rw encoding? identityref
+--rw inter-layer-lock-id* uint32
+--rw protection-type? identityref
+--rw client-layer-adaptation
...........
+--rw local-link-connectivities
...........
| +--rw local-link-connectivity* [link-tp-ref]
| +--rw link-tp-ref leafref
| +--rw label-restrictions
...........
| +--rw is-allowed? boolean
| +--rw underlay {te-topology-hierarchy}?
...........
| +--rw path-constraints
...........
| +--rw optimizations
...........
| +--ro path-properties
...........
+--rw supporting-tunnel-termination-point*
[node-ref tunnel-tp-ref]
+--rw node-ref inet:uri
+--rw tunnel-tp-ref binary
so here's the defaults situation π the attributes sitting directly under the connectivity-matrices container are the default attributes for every connectivity matrix entry, but only when that entry doesn't specify its own. when a per-entry attribute is specified, it wins and overrides the default π the exact same rule applies to the attributes directly under the local-link-connectivities container, bestie π
each TTP MAY be supported by one or more supporting TTPs. if the TE node hosting the TTP refers to a supporting TE node, then the supporting TTPs are hosted by that supporting TE node. and if the TE node refers to an underlay TE topology, the supporting TTPs are hosted by one or more specified TE nodes of that underlay TE topology π«Ά
5.7. TED Information Sources π
each TE topological element can have multiple TE information sources, like OSPF-TE, ISIS-TE, Border Gateway Protocol - Link State (BGP-LS), user-configured, system-processed, or other π every info source comes with a credibility preference that shows its precedence. and when a Customized TE topology gets merged into a client's Native TE topology, the merged topological elements point to that Customized TE topology as their information source. iconic π₯
augment /nw:networks/nw:network/nw:node:
+--rw te!
...........
+--ro information-source? te-info-source
+--ro information-source-instance? string
+--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro logical-network-element? string
| +--ro network-instance? string
| +--ro topology
| +--ro node-ref? leafref
| +--ro network-ref? leafref
+--ro information-source-entry*
| [information-source information-source-instance]
| +--ro information-source te-info-source
| +--ro information-source-instance string
............
augment /nw:networks/nw:network/nt:link:
+--rw te!
...........
+--ro information-source? te-info-source
+--ro information-source-instance? string
+--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro logical-network-element? string
| +--ro network-instance? string
| +--ro topology
| +--ro link-ref? leafref
| +--ro network-ref? leafref
+--ro information-source-entry*
| [information-source information-source-instance]
| +--ro information-source te-info-source
| +--ro information-source-instance string
............
5.8. Overlay/Underlay Relationship π§
the model captures the overlay and underlay relationship for TE nodes and links π¦ for example, in networks where multiple TE topologies are built hierarchically, you can start at a specific element in the topmost topology and traverse all the way down to the supporting elements in the bottommost one. it's giving layers π°
this relationship is captured with the underlay-topology field for nodes and the underlay field for links. using these fields is optional, and the functionality is tagged as a feature called te-topology-hierarchy π
augment /nw:networks/nw:network/nw:node:
+--rw te-node-id? te-types:te-node-id
+--rw te!
+--rw te-node-template* leafref {template}?
+--rw te-node-attributes
| +--rw admin-status? te-types:te-admin-status
| | ....................
| +--rw underlay-topology {te-topology-hierarchy}?
| +--rw network-ref? leafref
augment /nw:networks/nw:network/nt:link:
+--rw te!
+--rw te-link-attributes
| ....................
| +--rw underlay {te-topology-hierarchy}?
| | +--rw enabled? boolean
| | +--rw primary-path
| | | +--rw network-ref? leafref
| | | ....................
| | +--rw backup-path* [index]
| | | +--rw index uint32
| | | +--rw network-ref? leafref
| | | ....................
| | +--rw protection-type? identityref
| | +--rw tunnel-termination-points
| | | +--rw source? binary
| | | +--rw destination? binary
| | +--rw tunnels
| | | ....................
5.9. Templates π
Okay bestie, templates are giving organization π
. The data model lets you define templates and apply them to link and node configurations, so you don't have to retype the same stuff everywhere. Using the "template" configuration is totally optional β¨, and the whole thing is tagged as a template feature, so you can switch it on or leave it alone.
augment /nw:networks/nw:network/nw:node:
+--rw te-node-id? te-types:te-node-id
+--rw te!
+--rw te-node-template*
| -> ../../../../te/templates/node-template/name
| {template}?
augment /nw:networks/nw:network/nt:link:
+--rw te!
+--rw te-link-template*
| -> ../../../../te/templates/link-template/name
| {template}?
augment /nw:networks:
+--rw te!
+--rw templates
+--rw node-template* [name] {template}?
| +--rw name
| | te-types:te-template-name
| +--rw priority? uint16
| +--rw reference-change-policy? enumeration
| +--rw te-node-attributes
..........
+--rw link-template* [name] {template}?
+--rw name
| te-types:te-template-name
+--rw priority? uint16
+--rw reference-change-policy? enumeration
+--rw te-link-attributes
..........
Multiple templates can be stacked onto one configuration element π. When two or more templates set a value for the same config field, the value from the template with the highest priority wins π. Priority runs from 0 to 65535, and a lower number means a higher priority, so 0 is the main character energy π.
The reference-change-policy decides what happens when a template changes on a config element that's pointing at it π. There are three choices: take no action, reject the change to the template, or apply the change to the corresponding configuration π«Ά.
5.10. Scheduling Parameters β°
The model lets you attach time-scheduling parameters to each topological element or to the whole topology π¦. This is how the provider can show the client different topological views in different time slots, which is honestly iconic π₯. Using time-scheduling parameters is optional too.
The YANG data model for configuration scheduling is defined in [YANG-CFG-SCHED]. It lets you specify configuration schedules without changing this data model at all, so no messy edits needed π§.
5.11. Notifications π
Notifications are a key component of any topology data model, no cap π.
[RFC8639] and [RFC8641] define a subscription mechanism and a push mechanism for YANG datastores πΈ. Right now, these mechanisms let you:
- Subscribe to notifications on a per-client basis.
- Specify subtree filters or XML Path Language (XPath) filters so that only the contents you care about get sent.
- Specify either periodic or on-demand notifications.
6. Guidance for Writing Technology-Specific TE Topology Augmentations β¨
Okay so the TE topology model in this document is technology agnostic π. That means it defines concepts, abstractions, and attributes that are shared across lots of different network technologies. The plan is for this base model to get used a LOT when people write technology-specific TE topology models for all sorts of layer networks π . [YANG-WSON], [YANG-OTN], and [YANG-L3] are some examples of those technology-specific models, and they're bestie-approved π«Ά.
Writers of these models are encouraged to augment the basic model's containers instead of inventing brand-new ones π. Those containers include the ones for TE topologies, TE nodes, TE links, Link Termination Points (LTPs), Tunnel Termination Points (TTPs), bandwidth, and labels. You just add your layer-specific attributes into them β¨.
Here's a technology-specific example-topology model to show you what I mean π¦:
module: example-topology
augment /nw:networks/nw:network/nw:network-types/tet:te-topology:
+--rw example-topology!
augment /nw:networks/nw:network/tet:te:
+--rw attributes
+--rw attribute-1? uint8
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes:
+--rw attributes
+--rw attribute-2? uint8
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices:
+--rw attributes
+--rw attribute-3? uint8
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix:
+--rw attributes
+--rw attribute-3? uint8
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point:
+--rw attributes
+--rw attribute-4? uint8
augment /nw:networks/nw:network/nw:node/nt:termination-point
/tet:te:
+--rw attributes
+--rw attribute-5? uint8
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes:
+--rw attributes
+--rw attribute-6? uint8
The technology-specific TE bandwidth for this example topology can be specified using the following augment statements π:
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes
/tet:interface-switching-capability/tet:max-lsp-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes/tet:max-link-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes/tet:max-resv-link-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes/tet:unreserved-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:path-constraints/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:path-constraints
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:path-constraints/tet:te-bandwidth/tet:technology:
+--:(example)
+--ro example
+--ro bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:path-constraints
/tet:te-bandwidth/tet:technology:
+--:(example)
+--ro example
+--ro bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point/tet:client-layer-adaptation
/tet:switching-capability/tet:te-bandwidth
/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities/tet:path-constraints
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities
/tet:local-link-connectivity/tet:path-constraints
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes
/tet:interface-switching-capability/tet:max-lsp-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes/tet:max-link-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes/tet:max-resv-link-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:information-source-entry
/tet:interface-switching-capability/tet:max-lsp-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--ro example
+--ro bandwidth-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:information-source-entry/tet:max-link-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--ro example
+--ro bandwidth-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:information-source-entry/tet:max-resv-link-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--ro example
+--ro bandwidth-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:information-source-entry/tet:unreserved-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--ro example
+--ro bandwidth-1? uint32
augment /nw:networks/nw:network/nw:node/nt:termination-point/tet:te
/tet:interface-switching-capability/tet:max-lsp-bandwidth
/tet:te-bandwidth/tet:technology:
+--:(example)
+--rw example
+--rw bandwidth-1? uint32
The technology-specific TE label for this example topology can be specified using the following augment statements:
okay these augment blocks are giving YANG glam π here's the next chunk of the example trees π¦
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes/tet:underlay/tet:primary-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes/tet:underlay/tet:backup-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/tet:te/tet:templates/tet:link-template
/tet:te-link-attributes/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:label-restrictions/tet:label-restriction
/tet:label-start/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:label-restrictions/tet:label-restriction
/tet:label-end/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:underlay/tet:primary-path/tet:path-element/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:underlay/tet:backup-path/tet:path-element/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:path-properties/tet:path-route-objects
/tet:path-route-object/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:from/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:from/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:to/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:to/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:underlay/tet:primary-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:underlay/tet:backup-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:te-node-attributes/tet:connectivity-matrices
/tet:connectivity-matrix/tet:path-properties
/tet:path-route-objects/tet:path-route-object/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:label-restrictions/tet:label-restriction
/tet:label-start/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:label-restrictions/tet:label-restriction
/tet:label-end/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:underlay/tet:primary-path/tet:path-element/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:underlay/tet:backup-path/tet:path-element/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:path-properties/tet:path-route-objects
/tet:path-route-object/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:from/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:from/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:to/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:to/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:underlay/tet:primary-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:underlay/tet:backup-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:information-source-entry/tet:connectivity-matrices
/tet:connectivity-matrix/tet:path-properties
/tet:path-route-objects/tet:path-route-object/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities/tet:underlay
/tet:primary-path/tet:path-element/tet:type/tet:label
/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities/tet:underlay
/tet:backup-path/tet:path-element/tet:type/tet:label
/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities/tet:path-properties
/tet:path-route-objects/tet:path-route-object/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities
/tet:local-link-connectivity/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities
/tet:local-link-connectivity/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities
/tet:local-link-connectivity/tet:underlay
/tet:primary-path/tet:path-element/tet:type/tet:label
/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities
/tet:local-link-connectivity/tet:underlay/tet:backup-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nw:node/tet:te
/tet:tunnel-termination-point
/tet:local-link-connectivities
/tet:local-link-connectivity/tet:path-properties
/tet:path-route-objects/tet:path-route-object/tet:type
/tet:label/tet:label-hop/tet:te-label/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes/tet:underlay/tet:primary-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:te-link-attributes/tet:underlay/tet:backup-path
/tet:path-element/tet:type/tet:label/tet:label-hop
/tet:te-label/tet:technology:
+--:(example)
+--rw example
+--rw label-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:information-source-entry/tet:label-restrictions
/tet:label-restriction/tet:label-start/tet:te-label
/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
augment /nw:networks/nw:network/nt:link/tet:te
/tet:information-source-entry/tet:label-restrictions
/tet:label-restriction/tet:label-end/tet:te-label
/tet:technology:
+--:(example)
+--ro example
+--ro label-1? uint32
The example YANG module that implements the above example topology is provided in Appendix C π
7. TE Topology YANG Module β¨
This module references [RFC1195], [RFC3209], [RFC3272], [RFC3471], [RFC3630], [RFC3785], [RFC4201], [RFC4202], [RFC4203], [RFC4206], [RFC4872], [RFC5152], [RFC5212], [RFC5305], [RFC5316], [RFC5392], [RFC6001], [RFC6241], [RFC6991], [RFC7308], [RFC7471], [RFC7579], [RFC7752], [RFC8345], and [RFC8776]. π
<CODE BEGINS> file "ietf-te-topology@2020-08-06.yang"
module ietf-te-topology {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";
prefix tet;
import ietf-yang-types {
prefix yang;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-te-types {
prefix te-types;
reference
"RFC 8776: Common YANG Data Types for Traffic Engineering";
}
import ietf-network {
prefix nw;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
import ietf-network-topology {
prefix nt;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
organization
"IETF Traffic Engineering Architecture and Signaling (TEAS)
Working Group";
contact
"WG Web: <https://datatracker.ietf.org/wg/teas/>
WG List: <mailto:teas@ietf.org>
Editor: Xufeng Liu
<mailto:xufeng.liu.ietf@gmail.com>
Editor: Igor Bryskin
<mailto:i_bryskin@yahoo.com>
Editor: Vishnu Pavan Beeram
<mailto:vbeeram@juniper.net>
Editor: Tarek Saad
<mailto:tsaad@juniper.net>
Editor: Himanshu Shah
<mailto:hshah@ciena.com>
Editor: Oscar Gonzalez de Dios
<mailto:oscar.gonzalezdedios@telefonica.com>";
description
"This YANG module defines a TE topology model for representing,
retrieving, and manipulating technology-agnostic TE topologies.
Copyright (c) 2020 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 8795; see the
RFC itself for full legal notices.";
revision 2020-08-06 {
description
"Initial revision.";
reference
"RFC 8795: YANG Data Model for Traffic Engineering (TE)
Topologies";
}
/*
* Features
*/
feature nsrlg {
description
"This feature indicates that the system supports NSRLGs
(Non-Shared Risk Link Groups).";
}
feature te-topology-hierarchy {
description
"This feature indicates that the system allows an underlay
and/or overlay TE topology hierarchy.";
}
feature template {
description
"This feature indicates that the system supports
template configuration.";
}
/*
* Typedefs
*/
typedef geographic-coordinate-degree {
type decimal64 {
fraction-digits 8;
}
description
"Decimal degree (DD) used to express latitude and longitude
geographic coordinates.";
}
// geographic-coordinate-degree
typedef te-info-source {
type enumeration {
enum unknown {
description
"The source is unknown.";
}
enum locally-configured {
description
"Configured entity.";
}
enum ospfv2 {
description
"OSPFv2.";
}
enum ospfv3 {
description
"OSPFv3.";
}
enum isis {
description
"IS-IS.";
}
enum bgp-ls {
description
"BGP-LS.";
reference
"RFC 7752: North-Bound Distribution of Link-State and
Traffic Engineering (TE) Information Using BGP";
}
enum system-processed {
description
"System-processed entity.";
}
enum other {
description
"Other source.";
}
}
description
"Describes the type of source that has provided the
related information, and the source's credibility.";
}
// te-info-source
/*
* Groupings
*/
grouping connectivity-matrix-entry-path-attributes {
description
"Attributes of a connectivity matrix entry.";
leaf is-allowed {
type boolean;
description
"'true' - switching is allowed;
'false' - switching is disallowed.";
}
container underlay {
if-feature "te-topology-hierarchy";
description
"Attributes of the TE link underlay.";
reference
"RFC 4206: Label Switched Paths (LSP) Hierarchy with
Generalized Multi-Protocol Label Switching (GMPLS)
Traffic Engineering (TE)";
uses te-link-underlay-attributes;
}
uses te-types:generic-path-constraints;
uses te-types:generic-path-optimization;
uses te-types:generic-path-properties;
}
// connectivity-matrix-entry-path-attributes
grouping geolocation-container {
description
"Contains a GPS location.";
container geolocation {
config false;
description
"Contains a GPS location.";
leaf altitude {
type int64;
units "millimeters";
description
"Distance above sea level.";
}
leaf latitude {
type geographic-coordinate-degree {
range "-90..90";
}
description
"Relative position north or south on the Earth's surface.";
}
leaf longitude {
type geographic-coordinate-degree {
range "-180..180";
}
description
"Angular distance east or west on the Earth's surface.";
}
}
// geolocation
}
// geolocation-container
grouping information-source-state-attributes {
description
"The attributes identifying the source that has provided the
related information, and the source's credibility.";
leaf credibility-preference {
type uint16;
description
"The preference value for calculating the Traffic
Engineering database credibility value used for
tie-break selection between different information-source
values. A higher value is preferable.";
}
leaf logical-network-element {
type string;
description
"When applicable, this is the name of a logical network
element from which the information is learned.";
}
leaf network-instance {
type string;
description
"When applicable, this is the name of a network instance
from which the information is learned.";
}
}
// information-source-state-attributes
Okay bestie, we're still in the YANG module, and this part is all about who's giving the info and how the link and node stats get counted πβ¨ Here it is, exactly as the RFC has it π
grouping information-source-per-link-attributes {
description
"Per-node container of the attributes identifying the source
that has provided the related information, and the source's
credibility.";
leaf information-source {
type te-info-source;
config false;
description
"Indicates the type of information source.";
}
leaf information-source-instance {
type string;
config false;
description
"The name indicating the instance of the information
source.";
}
container information-source-state {
config false;
description
"Contains state attributes related to the information
source.";
uses information-source-state-attributes;
container topology {
description
"When the information is processed by the system,
the attributes in this container indicate which topology
is used to generate the result information.";
uses nt:link-ref;
}
}
}
// information-source-per-link-attributes
grouping information-source-per-node-attributes {
description
"Per-node container of the attributes identifying the source
that has provided the related information, and the source's
credibility.";
leaf information-source {
type te-info-source;
config false;
description
"Indicates the type of information source.";
}
leaf information-source-instance {
type string;
config false;
description
"The name indicating the instance of the information
source.";
}
container information-source-state {
config false;
description
"Contains state attributes related to the information
source.";
uses information-source-state-attributes;
container topology {
description
"When the information is processed by the system,
the attributes in this container indicate which topology
is used to generate the result information.";
uses nw:node-ref;
}
}
}
// information-source-per-node-attributes
grouping interface-switching-capability-list {
description
"List of Interface Switching Capability Descriptors (ISCDs).";
list interface-switching-capability {
key "switching-capability encoding";
description
"List of ISCDs for this link.";
reference
"RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
Signaling Functional Description
RFC 4203: OSPF Extensions in Support of Generalized
Multi-Protocol Label Switching (GMPLS)";
leaf switching-capability {
type identityref {
base te-types:switching-capabilities;
}
description
"Switching capability for this interface.";
}
leaf encoding {
type identityref {
base te-types:lsp-encoding-types;
}
description
"Encoding supported by this interface.";
}
uses te-link-iscd-attributes;
}
// interface-switching-capability
}
// interface-switching-capability-list
grouping statistics-per-link {
description
"Statistics attributes per TE link.";
leaf discontinuity-time {
type yang:date-and-time;
description
"The time of the most recent occasion at which any one or
more of this interface's counters suffered a
discontinuity. If no such discontinuities have occurred
since the last re-initialization of the local management
subsystem, then this node contains the time the local
management subsystem re-initialized itself.";
}
/* Administrative attributes */
leaf disables {
type yang:counter32;
description
"Number of times that a link was disabled.";
}
leaf enables {
type yang:counter32;
description
"Number of times that a link was enabled.";
}
leaf maintenance-clears {
type yang:counter32;
description
"Number of times that a link was taken out of maintenance.";
}
leaf maintenance-sets {
type yang:counter32;
description
"Number of times that a link was put in maintenance.";
}
leaf modifies {
type yang:counter32;
description
"Number of times that a link was modified.";
}
/* Operational attributes */
leaf downs {
type yang:counter32;
description
"Number of times that a link was set to an operational state
of 'down'.";
}
leaf ups {
type yang:counter32;
description
"Number of times that a link was set to an operational state
of 'up'.";
}
/* Recovery attributes */
leaf fault-clears {
type yang:counter32;
description
"Number of times that a link experienced a fault-clear
event.";
}
leaf fault-detects {
type yang:counter32;
description
"Number of times that a link experienced fault detection.";
}
leaf protection-switches {
type yang:counter32;
description
"Number of times that a link experienced protection
switchover.";
}
leaf protection-reverts {
type yang:counter32;
description
"Number of times that a link experienced protection
reversion.";
}
leaf restoration-failures {
type yang:counter32;
description
"Number of times that a link experienced restoration
failure.";
}
leaf restoration-starts {
type yang:counter32;
description
"Number of times that a link experienced restoration
start.";
}
leaf restoration-successes {
type yang:counter32;
description
"Number of times that a link experienced restoration
success.";
}
leaf restoration-reversion-failures {
type yang:counter32;
description
"Number of times that a link experienced restoration
reversion failure.";
}
leaf restoration-reversion-starts {
type yang:counter32;
description
"Number of times that a link experienced restoration
reversion start.";
}
leaf restoration-reversion-successes {
type yang:counter32;
description
"Number of times that a link experienced restoration
reversion success.";
}
}
// statistics-per-link
grouping statistics-per-node {
description
"Statistics attributes per TE node.";
leaf discontinuity-time {
type yang:date-and-time;
description
"The time of the most recent occasion at which any one or
more of this interface's counters suffered a
discontinuity. If no such discontinuities have occurred
since the last re-initialization of the local management
subsystem, then this node contains the time the local
management subsystem re-initialized itself.";
}
container node {
description
"Contains statistics attributes at the TE node level.";
leaf disables {
type yang:counter32;
description
"Number of times that a node was disabled.";
}
leaf enables {
type yang:counter32;
description
"Number of times that a node was enabled.";
}
leaf maintenance-sets {
type yang:counter32;
description
"Number of times that a node was put in maintenance.";
}
leaf maintenance-clears {
type yang:counter32;
description
"Number of times that a node was taken out of
maintenance.";
}
leaf modifies {
type yang:counter32;
description
"Number of times that a node was modified.";
}
}
// node
container connectivity-matrix-entry {
description
"Contains statistics attributes at the level of a
connectivity matrix entry.";
leaf creates {
type yang:counter32;
description
"Number of times that a connectivity matrix entry was
created.";
reference
"RFC 6241: Network Configuration Protocol (NETCONF),
Section 7.2, 'create' operation";
}
leaf deletes {
type yang:counter32;
description
"Number of times that a connectivity matrix entry was
deleted.";
reference
"RFC 6241: Network Configuration Protocol (NETCONF),
Section 7.2, 'delete' operation";
}
leaf disables {
type yang:counter32;
description
"Number of times that a connectivity matrix entry was
disabled.";
}
leaf enables {
type yang:counter32;
description
"Number of times that a connectivity matrix entry was
enabled.";
}
leaf modifies {
type yang:counter32;
description
"Number of times that a connectivity matrix entry was
modified.";
}
}
// connectivity-matrix-entry
}
// statistics-per-node
okay so this next chunk is where the stats get extra π we've got per-TTP counters, per-LLCL counters, and the link grouping that ties it all together π¦
statistics-per-ttp is the grouping for all the TE TTP (Tunnel Termination Point) stats π it starts with a discontinuity-time leaf, then splits into two containers: one for TTP-level counters and one for LLCL (Local Link Connectivity List) counters π
grouping statistics-per-ttp {
description
"Statistics attributes per TE TTP (Tunnel Termination Point).";
leaf discontinuity-time {
type yang:date-and-time;
description
"The time of the most recent occasion at which any one or
more of this interface's counters suffered a
discontinuity. If no such discontinuities have occurred
since the last re-initialization of the local management
subsystem, then this node contains the time the local
management subsystem re-initialized itself.";
}
container tunnel-termination-point {
description
"Contains statistics attributes at the TE TTP level.";
/* Administrative attributes */
leaf disables {
type yang:counter32;
description
"Number of times that a TTP was disabled.";
}
leaf enables {
type yang:counter32;
description
"Number of times that a TTP was enabled.";
}
leaf maintenance-clears {
type yang:counter32;
description
"Number of times that a TTP was taken out of maintenance.";
}
leaf maintenance-sets {
type yang:counter32;
description
"Number of times that a TTP was put in maintenance.";
}
leaf modifies {
type yang:counter32;
description
"Number of times that a TTP was modified.";
}
/* Operational attributes */
leaf downs {
type yang:counter32;
description
"Number of times that a TTP was set to an operational state
of 'down'.";
}
leaf ups {
type yang:counter32;
description
"Number of times that a TTP was set to an operational state
of 'up'.";
}
leaf in-service-clears {
type yang:counter32;
description
"Number of times that a TTP was taken out of service
(TE tunnel was released).";
}
leaf in-service-sets {
type yang:counter32;
description
"Number of times that a TTP was put in service by a TE
tunnel (TE tunnel was set up).";
}
}
// tunnel-termination-point
container local-link-connectivity {
description
"Contains statistics attributes at the TE LLCL (Local Link
Connectivity List) level.";
leaf creates {
type yang:counter32;
description
"Number of times that an LLCL entry was created.";
reference
"RFC 6241: Network Configuration Protocol (NETCONF),
Section 7.2, 'create' operation";
}
leaf deletes {
type yang:counter32;
description
"Number of times that an LLCL entry was deleted.";
reference
"RFC 6241: Network Configuration Protocol (NETCONF),
Section 7.2, 'delete' operation";
}
leaf disables {
type yang:counter32;
description
"Number of times that an LLCL entry was disabled.";
}
leaf enables {
type yang:counter32;
description
"Number of times that an LLCL entry was enabled.";
}
leaf modifies {
type yang:counter32;
description
"Number of times that an LLCL entry was modified.";
}
}
// local-link-connectivity
}
// statistics-per-ttp
te-link-augment is the grouping that glues a TE link together β¨ it pulls in the config, the derived state, and a read-only statistics container that uses the per-link stats grouping πΈ
grouping te-link-augment {
description
"Augmentation for a TE link.";
uses te-link-config;
uses te-link-state-derived;
container statistics {
config false;
description
"Statistics data.";
uses statistics-per-link;
}
}
// te-link-augment
Next up is te-link-config, the config grouping for TE links π¦ this is where it gets really detailed, because a TE link can either be split into bundled links or component links, and it's one or the other via a choice π
grouping te-link-config {
description
"TE link configuration grouping.";
choice bundle-stack-level {
description
"The TE link can be partitioned into bundled links or
component links.";
case bundle {
container bundled-links {
description
"A set of bundled links.";
reference
"RFC 4201: Link Bundling in MPLS Traffic
Engineering (TE)";
list bundled-link {
key "sequence";
description
"Specifies a bundled interface that is
further partitioned.";
leaf sequence {
type uint32;
description
"Identifies the sequence in the bundle.";
}
}
}
}
case component {
container component-links {
description
"A set of component links.";
list component-link {
key "sequence";
description
"Specifies a component interface that is
sufficient to unambiguously identify the
appropriate resources.";
leaf sequence {
type uint32;
description
"Identifies the sequence in the bundle.";
}
leaf src-interface-ref {
type string;
description
"Reference to a component link interface on the
source node.";
}
leaf des-interface-ref {
type string;
description
"Reference to a component link interface on the
destination node.";
}
}
}
}
}
// bundle-stack-level
leaf-list te-link-template {
if-feature "template";
type leafref {
path "../../../../te/templates/link-template/name";
}
description
"The reference to a TE link template.";
}
uses te-link-config-attributes;
}
// te-link-config
Last bit for this part is te-link-config-attributes π it holds the link's access type, its external-domain info for inter-domain links, the abstract flag, the name, the underlay container, the admin status, and the info attributes π
grouping te-link-config-attributes {
description
"Link configuration attributes in a TE topology.";
container te-link-attributes {
description
"Link attributes in a TE topology.";
leaf access-type {
type te-types:te-link-access-type;
description
"Link access type, which can be point-to-point or
multi-access.";
}
container external-domain {
description
"For an inter-domain link, specifies the attributes of
the remote end of the link, to facilitate the signaling at
the local end.";
uses nw:network-ref;
leaf remote-te-node-id {
type te-types:te-node-id;
description
"Remote TE node identifier, used together with
'remote-te-link-tp-id' to identify the remote Link
Termination Point (LTP) in a different domain.";
}
leaf remote-te-link-tp-id {
type te-types:te-tp-id;
description
"Remote TE LTP identifier, used together with
'remote-te-node-id' to identify the remote LTP in a
different domain.";
}
}
leaf is-abstract {
type empty;
description
"Present if the link is abstract.";
}
leaf name {
type string;
description
"Link name.";
}
container underlay {
if-feature "te-topology-hierarchy";
description
"Attributes of the TE link underlay.";
reference
"RFC 4206: Label Switched Paths (LSP) Hierarchy with
Generalized Multi-Protocol Label Switching (GMPLS)
Traffic Engineering (TE)";
uses te-link-underlay-attributes;
}
leaf admin-status {
type te-types:te-admin-status;
description
"The administrative state of the link.";
}
uses te-link-info-attributes;
}
// te-link-attributes
}
// te-link-config-attributes
Okay bestie, we're deep in the YANG module now π§ Here's the link info grouping, the ISCD grouping, the link state stuff, and the underlay attributes, all in one go π
grouping te-link-info-attributes {
description
"Advertised TE information attributes.";
leaf link-index {
type uint64;
description
"The link identifier. If OSPF is used, this object
represents an ospfLsdbID. If IS-IS is used, this object
represents an isisLSPID. If a locally configured link is
used, this object represents a unique value, which is
locally defined in a router.";
}
leaf administrative-group {
type te-types:admin-groups;
description
"Administrative group or color of the link.
This attribute covers both administrative groups (defined
in RFCs 3630 and 5305) and Extended Administrative Groups
(defined in RFC 7308).";
reference
"RFC 3630: Traffic Engineering (TE) Extensions to OSPF
Version 2
RFC 5305: IS-IS Extensions for Traffic Engineering
RFC 7308: Extended Administrative Groups in MPLS Traffic
Engineering (MPLS-TE)";
}
uses interface-switching-capability-list;
uses te-types:label-set-info;
leaf link-protection-type {
type identityref {
base te-types:link-protection-type;
}
description
"Link Protection Type desired for this link.";
reference
"RFC 4202: Routing Extensions in Support of
Generalized Multi-Protocol Label Switching (GMPLS)";
}
container max-link-bandwidth {
uses te-types:te-bandwidth;
description
"Maximum bandwidth that can be seen on this link in this
direction. Units are in bytes per second.";
reference
"RFC 3630: Traffic Engineering (TE) Extensions to OSPF
Version 2
RFC 5305: IS-IS Extensions for Traffic Engineering";
}
container max-resv-link-bandwidth {
uses te-types:te-bandwidth;
description
"Maximum amount of bandwidth that can be reserved in this
direction in this link. Units are in bytes per second.";
reference
"RFC 3630: Traffic Engineering (TE) Extensions to OSPF
Version 2
RFC 5305: IS-IS Extensions for Traffic Engineering";
}
list unreserved-bandwidth {
key "priority";
max-elements 8;
description
"Unreserved bandwidth for priority levels 0-7. Units are in
bytes per second.";
reference
"RFC 3630: Traffic Engineering (TE) Extensions to OSPF
Version 2
RFC 5305: IS-IS Extensions for Traffic Engineering";
leaf priority {
type uint8 {
range "0..7";
}
description
"Priority.";
}
uses te-types:te-bandwidth;
}
leaf te-default-metric {
type uint32;
description
"Traffic Engineering metric.";
reference
"RFC 3630: Traffic Engineering (TE) Extensions to OSPF
Version 2
RFC 5305: IS-IS Extensions for Traffic Engineering";
}
leaf te-delay-metric {
type uint32;
description
"Traffic Engineering delay metric.";
reference
"RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
}
leaf te-igp-metric {
type uint32;
description
"IGP metric used for Traffic Engineering.";
reference
"RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
second MPLS Traffic Engineering (TE) Metric";
}
container te-srlgs {
description
"Contains a list of SRLGs.";
leaf-list value {
type te-types:srlg;
description
"SRLG value.";
reference
"RFC 4202: Routing Extensions in Support of
Generalized Multi-Protocol Label Switching (GMPLS)";
}
}
container te-nsrlgs {
if-feature "nsrlg";
description
"Contains a list of NSRLGs (Non-Shared Risk Link Groups).
When an abstract TE link is configured, this list specifies
the request that underlay TE paths need to be mutually
disjoint with other TE links in the same groups.";
leaf-list id {
type uint32;
description
"NSRLG ID, uniquely configured within a topology.";
reference
"RFC 4872: RSVP-TE Extensions in Support of End-to-End
Generalized Multi-Protocol Label Switching (GMPLS)
Recovery";
}
}
}
// te-link-info-attributes
grouping te-link-iscd-attributes {
description
"TE link ISCD attributes.";
reference
"RFC 4203: OSPF Extensions in Support of Generalized
Multi-Protocol Label Switching (GMPLS), Section 1.4";
list max-lsp-bandwidth {
key "priority";
max-elements 8;
description
"Maximum Label Switched Path (LSP) bandwidth at
priorities 0-7.";
leaf priority {
type uint8 {
range "0..7";
}
description
"Priority.";
}
uses te-types:te-bandwidth;
}
}
// te-link-iscd-attributes
grouping te-link-state-derived {
description
"Link state attributes in a TE topology.";
leaf oper-status {
type te-types:te-oper-status;
config false;
description
"The current operational state of the link.";
}
leaf is-transitional {
type empty;
config false;
description
"Present if the link is transitional; used as an
alternative approach in lieu of 'inter-layer-lock-id'
for path computation in a TE topology covering multiple
layers or multiple regions.";
reference
"RFC 5212: Requirements for GMPLS-Based Multi-Region and
Multi-Layer Networks (MRN/MLN)
RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
for Multi-Layer and Multi-Region Networks (MLN/MRN)";
}
uses information-source-per-link-attributes;
list information-source-entry {
key "information-source information-source-instance";
config false;
description
"A list of information sources learned, including the source
that is used.";
uses information-source-per-link-attributes;
uses te-link-info-attributes;
}
container recovery {
config false;
description
"Status of the recovery process.";
leaf restoration-status {
type te-types:te-recovery-status;
description
"Restoration status.";
}
leaf protection-status {
type te-types:te-recovery-status;
description
"Protection status.";
}
}
container underlay {
if-feature "te-topology-hierarchy";
config false;
description
"State attributes for the TE link underlay.";
leaf dynamic {
type boolean;
description
"'true' if the underlay is dynamically created.";
}
leaf committed {
type boolean;
description
"'true' if the underlay is committed.";
}
}
}
// te-link-state-derived
grouping te-link-underlay-attributes {
description
"Attributes for the TE link underlay.";
reference
"RFC 4206: Label Switched Paths (LSP) Hierarchy with
Generalized Multi-Protocol Label Switching (GMPLS)
Traffic Engineering (TE)";
leaf enabled {
type boolean;
description
"'true' if the underlay is enabled.
'false' if the underlay is disabled.";
}
container primary-path {
description
"The service path on the underlay topology that
supports this link.";
uses nw:network-ref;
list path-element {
key "path-element-id";
description
"A list of path elements describing the service path.";
leaf path-element-id {
type uint32;
description
"To identify the element in a path.";
}
uses te-path-element;
}
}
// primary-path
list backup-path {
key "index";
description
"A list of backup service paths on the underlay topology that
protect the underlay primary path. If the primary path is
not protected, the list contains zero elements. If the
primary path is protected, the list contains one or more
elements.";
leaf index {
type uint32;
description
"A sequence number to identify a backup path.";
}
uses nw:network-ref;
list path-element {
key "path-element-id";
description
"A list of path elements describing the backup service
path.";
leaf path-element-id {
type uint32;
description
"To identify the element in a path.";
}
uses te-path-element;
}
}
// backup-path
leaf protection-type {
type identityref {
base te-types:lsp-protection-type;
}
description
"Underlay protection type desired for this link.";
}
container tunnel-termination-points {
description
"Underlay TTPs desired for this link.";
leaf source {
type binary;
description
"Source TTP identifier.";
}
leaf destination {
type binary;
description
"Destination TTP identifier.";
}
}
container tunnels {
description
"Underlay TE tunnels supporting this TE link.";
leaf sharing {
type boolean;
default "true";
description
"'true' if the underlay tunnel can be shared with other
TE links;
'false' if the underlay tunnel is dedicated to this
TE link.
This leaf is the default option for all TE tunnels
and may be overridden by the per-TE-tunnel value.";
}
list tunnel {
key "tunnel-name";
description
"Zero, one, or more underlay TE tunnels that support this
TE link.";
leaf tunnel-name {
type string;
description
"A tunnel name uniquely identifies an underlay TE tunnel,
used together with the 'source-node' value for this
link.";
reference
"RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
}
leaf sharing {
type boolean;
description
"'true' if the underlay tunnel can be shared with other
TE links;
'false' if the underlay tunnel is dedicated to this
TE link.";
}
}
// tunnel
}
// tunnels
}
// te-link-underlay-attributes
Part 12 wrap-up! The link info, ISCD, link state and underlay groupings are all in, with the labels and comments exactly where they belong πβ¨
grouping te-node-augment { description "Augmentation for a TE node."; uses te-node-config; uses te-node-state-derived; container statistics { config false; description "Statistics data."; uses statistics-per-node; } list tunnel-termination-point { key "tunnel-tp-id"; description "A termination point can terminate a tunnel."; leaf tunnel-tp-id { type binary; description "TTP identifier."; } uses te-node-tunnel-termination-point-config; leaf oper-status { type te-types:te-oper-status; config false; description "The current operational state of the TTP."; } uses geolocation-container; container statistics { config false; description "Statistics data."; uses statistics-per-ttp; } // Relationship to other TTPs list supporting-tunnel-termination-point { key "node-ref tunnel-tp-ref"; description "Identifies the TTPs on which this TTP depends."; leaf node-ref { type inet:uri; description "This leaf identifies the node in which the supporting TTP is present. This node is either the supporting node or a node in an underlay topology."; } leaf tunnel-tp-ref { type binary; description "Reference to a TTP that is in either the supporting node or a node in an underlay topology."; } } // supporting-tunnel-termination-point } // tunnel-termination-point } // te-node-augment
grouping te-node-config { description "TE node configuration grouping."; leaf-list te-node-template { if-feature "template"; type leafref { path "../../../../te/templates/node-template/name"; } description "The reference to a TE node template."; } uses te-node-config-attributes; } // te-node-config
grouping te-node-config-attributes { description "Configuration node attributes in a TE topology."; container te-node-attributes { description "Contains node attributes in a TE topology."; leaf admin-status { type te-types:te-admin-status; description "The administrative state of the link."; } uses te-node-connectivity-matrices; uses te-node-info-attributes; } } // te-node-config-attributes
grouping te-node-config-attributes-template { description "Configuration node attributes for a template in a TE topology."; container te-node-attributes { description "Contains node attributes in a TE topology."; leaf admin-status { type te-types:te-admin-status; description "The administrative state of the link."; } uses te-node-info-attributes; } } // te-node-config-attributes-template
grouping te-node-connectivity-matrices { description "Connectivity matrix on a TE node."; container connectivity-matrices { description "Contains a connectivity matrix on a TE node."; leaf number-of-entries { type uint16; description "The number of connectivity matrix entries. If this number is specified in the configuration request, the number is the requested number of entries, which may not all be listed in the list; if this number is reported in the state data, the number is the current number of operational entries."; } uses te-types:label-set-info; uses connectivity-matrix-entry-path-attributes; list connectivity-matrix { key "id"; description "Represents a node's switching limitations, i.e., limitations in the interconnecting network TE links across the node."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf id { type uint32; description "Identifies the connectivity matrix entry."; } } // connectivity-matrix } // connectivity-matrices } // te-node-connectivity-matrices
grouping te-node-connectivity-matrix-attributes { description "Termination point references of a connectivity matrix entry."; container from { description "Reference to a source LTP."; leaf tp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description "Relative reference to a termination point."; } uses te-types:label-set-info; } container to { description "Reference to a destination LTP."; leaf tp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description "Relative reference to a termination point."; } uses te-types:label-set-info; } uses connectivity-matrix-entry-path-attributes; } // te-node-connectivity-matrix-attributes
grouping te-node-info-attributes { description "Advertised TE information attributes."; leaf domain-id { type uint32; description "Identifies the domain to which this node belongs. This attribute is used to support inter-domain links."; reference "RFC 5152: A Per-Domain Path Computation Method for Establishing Inter-Domain Traffic Engineering (TE) Label Switched Paths (LSPs) RFC 5316: ISIS Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering RFC 5392: OSPF Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering"; } leaf is-abstract { type empty; description "Present if the node is abstract; not present if the node is actual."; } leaf name { type string; description "Node name."; } leaf-list signaling-address { type inet:ip-address; description "The node's signaling address."; } container underlay-topology { if-feature "te-topology-hierarchy"; description "When an abstract node encapsulates a topology, the attributes in this container point to said topology."; uses nw:network-ref; } } // te-node-info-attributes
grouping te-node-state-derived { description "Node state attributes in a TE topology."; leaf oper-status { type te-types:te-oper-status; config false; description "The current operational state of the node."; } uses geolocation-container; leaf is-multi-access-dr { type empty; config false; description "The presence of this attribute indicates that this TE node is a pseudonode elected as a designated router."; reference "RFC 1195: Use of OSI IS-IS for Routing in TCP/IP and Dual Environments RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2"; } uses information-source-per-node-attributes; list information-source-entry { key "information-source information-source-instance"; config false; description "A list of information sources learned, including the source that is used."; uses information-source-per-node-attributes; uses te-node-connectivity-matrices; uses te-node-info-attributes; } } // te-node-state-derived
grouping te-node-tunnel-termination-point-config { description "Termination capability of a TTP on a TE node."; uses te-node-tunnel-termination-point-config-attributes; container local-link-connectivities { description "Contains an LLCL for a TTP on a TE node."; leaf number-of-entries { type uint16; description "The number of LLCL entries. If this number is specified in the configuration request, the number is the requested number of entries, which may not all be listed in the list; if this number is reported in the state data, the number is the current number of operational entries."; } uses te-types:label-set-info; uses connectivity-matrix-entry-path-attributes; } } // te-node-tunnel-termination-point-config
okay bestie, we're deep in the groupings now and the termination point stuff is giving everything π β¨
grouping te-node-tunnel-termination-point-config-attributes {
description
"Configuration attributes of a TTP on a TE node.";
leaf admin-status {
type te-types:te-admin-status;
description
"The administrative state of the TTP.";
}
leaf name {
type string;
description
"A descriptive name for the TTP.";
}
leaf switching-capability {
type identityref {
base te-types:switching-capabilities;
}
description
"Switching capability for this interface.";
}
leaf encoding {
type identityref {
base te-types:lsp-encoding-types;
}
description
"Encoding supported by this interface.";
}
leaf-list inter-layer-lock-id {
type uint32;
description
"Inter-layer lock ID, used for path computation in a TE
topology covering multiple layers or multiple regions.";
reference
"RFC 5212: Requirements for GMPLS-Based Multi-Region and
Multi-Layer Networks (MRN/MLN)
RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
for Multi-Layer and Multi-Region Networks (MLN/MRN)";
}
leaf protection-type {
type identityref {
base te-types:lsp-protection-type;
}
description
"The protection type that this TTP is capable of.";
}
container client-layer-adaptation {
description
"Contains capability information to support a client-layer
adaptation in a multi-layer topology.";
list switching-capability {
key "switching-capability encoding";
description
"List of supported switching capabilities.";
reference
"RFC 4202: Routing Extensions in Support of
Generalized Multi-Protocol Label Switching (GMPLS)
RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
for Multi-Layer and Multi-Region Networks (MLN/MRN)";
leaf switching-capability {
type identityref {
base te-types:switching-capabilities;
}
description
"Switching capability for the client-layer adaptation.";
}
leaf encoding {
type identityref {
base te-types:lsp-encoding-types;
}
description
"Encoding supported by the client-layer adaptation.";
}
uses te-types:te-bandwidth;
}
}
}
// te-node-tunnel-termination-point-config-attributes
grouping te-node-tunnel-termination-point-llc-list {
description
"LLCL of a TTP on a TE node.";
list local-link-connectivity {
key "link-tp-ref";
description
"The termination capabilities between the TTP and the LTP.
This capability information can be used to compute
the tunnel path.
The Interface Adjustment Capability Descriptors (IACDs)
(defined in RFC 6001) on each LTP can be derived from
this list.";
reference
"RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
for Multi-Layer and Multi-Region Networks (MLN/MRN)";
leaf link-tp-ref {
type leafref {
path "../../../../../nt:termination-point/nt:tp-id";
}
description
"LTP.";
}
uses te-types:label-set-info;
uses connectivity-matrix-entry-path-attributes;
}
}
// te-node-tunnel-termination-point-llc-list
grouping te-path-element {
description
"A group of attributes defining an element in a TE path,
such as a TE node, TE link, TE atomic resource, or label.";
uses te-types:explicit-route-hop;
}
// te-path-element
grouping te-termination-point-augment {
description
"Augmentation for a TE termination point.";
leaf te-tp-id {
type te-types:te-tp-id;
description
"An identifier that uniquely identifies a TE termination
point.";
}
container te {
must '../te-tp-id';
presence "TE support";
description
"Indicates TE support.";
uses te-termination-point-config;
leaf oper-status {
type te-types:te-oper-status;
config false;
description
"The current operational state of the LTP.";
}
uses geolocation-container;
}
}
// te-termination-point-augment
grouping te-termination-point-config {
description
"TE termination point configuration grouping.";
leaf admin-status {
type te-types:te-admin-status;
description
"The administrative state of the LTP.";
}
leaf name {
type string;
description
"A descriptive name for the LTP.";
}
uses interface-switching-capability-list;
leaf inter-domain-plug-id {
type binary;
description
"A network-wide unique number that identifies on the
network a connection that supports a given inter-domain
TE link. This is a more flexible alternative to specifying
'remote-te-node-id' and 'remote-te-link-tp-id' on a TE link
when the provider either does not know 'remote-te-node-id'
and 'remote-te-link-tp-id' or needs to give the client the
flexibility to mix and match multiple topologies.";
}
leaf-list inter-layer-lock-id {
type uint32;
description
"Inter-layer lock ID, used for path computation in a TE
topology covering multiple layers or multiple regions.";
reference
"RFC 5212: Requirements for GMPLS-Based Multi-Region and
Multi-Layer Networks (MRN/MLN)
RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
for Multi-Layer and Multi-Region Networks (MLN/MRN)";
}
}
// te-termination-point-config
grouping te-topologies-augment {
description
"Augmentation for TE topologies.";
container te {
presence "TE support";
description
"Indicates TE support.";
container templates {
description
"Configuration parameters for templates used for a TE
topology.";
list node-template {
if-feature "template";
key "name";
leaf name {
type te-types:te-template-name;
description
"The name to identify a TE node template.";
}
description
"The list of TE node templates used to define sharable
and reusable TE node attributes.";
uses template-attributes;
uses te-node-config-attributes-template;
}
// node-template
list link-template {
if-feature "template";
key "name";
leaf name {
type te-types:te-template-name;
description
"The name to identify a TE link template.";
}
description
"The list of TE link templates used to define sharable
and reusable TE link attributes.";
uses template-attributes;
uses te-link-config-attributes;
}
// link-template
}
// templates
}
// te
}
// te-topologies-augment
grouping te-topology-augment {
description
"Augmentation for a TE topology.";
uses te-types:te-topology-identifier;
container te {
must '../te-topology-identifier/provider-id'
+ ' and ../te-topology-identifier/client-id'
+ ' and ../te-topology-identifier/topology-id';
presence "TE support";
description
"Indicates TE support.";
uses te-topology-config;
uses geolocation-container;
}
}
// te-topology-augment
grouping te-topology-config {
description
"TE topology configuration grouping.";
leaf name {
type string;
description
"Name of the TE topology. This attribute is optional and can
be specified by the operator to describe the TE topology,
which can be useful when 'network-id' (RFC 8345) is not
descriptive and not modifiable because of being generated
by the system.";
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
leaf preference {
type uint8 {
range "1..255";
}
description
"Specifies a preference for this topology. A lower number
indicates a higher preference.";
}
leaf optimization-criterion {
type identityref {
base te-types:objective-function-type;
}
description
"Optimization criterion applied to this topology.";
reference
"RFC 3272: Overview and Principles of Internet Traffic
Engineering";
}
list nsrlg {
if-feature "nsrlg";
key "id";
description
"List of NSRLGs (Non-Shared Risk Link Groups).";
reference
"RFC 4872: RSVP-TE Extensions in Support of End-to-End
Generalized Multi-Protocol Label Switching (GMPLS)
Recovery";
leaf id {
type uint32;
description
"Identifies the NSRLG entry.";
}
leaf disjointness {
type te-types:te-path-disjointness;
description
"The type of resource disjointness.";
}
}
// nsrlg
}
// te-topology-config
grouping template-attributes {
description
"Common attributes for all templates.";
leaf priority {
type uint16;
description
"The preference value for resolving conflicts between
different templates. When two or more templates specify
values for one configuration attribute, the value from the
template with the highest priority is used.
A lower number indicates a higher priority. The highest
priority is 0.";
}
leaf reference-change-policy {
type enumeration {
enum no-action {
description
"When an attribute changes in this template, the
configuration node referring to this template does
not take any action.";
}
enum not-allowed {
description
"When any configuration object has a reference to this
template, changing this template is not allowed.";
}
enum cascade {
description
"When an attribute changes in this template, the
configuration object referring to this template applies
the new attribute value to the corresponding
configuration.";
}
}
description
"This attribute specifies the action taken for a
configuration node that has a reference to this template.";
}
}
// template-attributes
/*
* Data nodes
*/
the templates bit is clutch, the reference-change-policy has three flavours: no-action, not-allowed and cascade π«Ά
augment "/nw:networks/nw:network/nw:network-types" {
description
"Introduces a new network type for a TE topology.";
container te-topology {
presence "Indicates a TE topology";
description
"Its presence identifies the TE topology type.";
}
}
augment "/nw:networks" {
description
"Augmentation parameters for TE topologies.";
uses te-topologies-augment;
}
augment "/nw:networks/nw:network" {
when 'nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for a TE topology.";
uses te-topology-augment;
}
augment "/nw:networks/nw:network/nw:node" {
when '../nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for TE at the node level.";
leaf te-node-id {
type te-types:te-node-id;
description
"The identifier of a node in the TE topology.
A node is specific to a topology to which it belongs.";
}
container te {
must '../te-node-id' {
description
"'te-node-id' is mandatory.";
}
must 'count(../nw:supporting-node)<=1' {
description
"For a node in a TE topology, there cannot be more
than one supporting node. If multiple nodes are
abstracted, the 'underlay-topology' field is used.";
}
presence "TE support";
description
"Indicates TE support.";
uses te-node-augment;
}
}
augment "/nw:networks/nw:network/nt:link" {
when '../nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for TE at the link level.";
container te {
must 'count(../nt:supporting-link)<=1' {
description
"For a link in a TE topology, there cannot be more
than one supporting link. If one or more link paths are
abstracted, the underlay is used.";
}
presence "TE support";
description
"Indicates TE support.";
uses te-link-augment;
}
}
augment "/nw:networks/nw:network/nw:node/"
+ "nt:termination-point" {
when '../../nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for TE at the termination point
level.";
uses te-termination-point-augment;
}
augment "/nw:networks/nw:network/nt:link/te/bundle-stack-level/"
+ "bundle/bundled-links/bundled-link" {
when '../../../../nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for a TE bundled link.";
leaf src-tp-ref {
type leafref {
path "../../../../../nw:node[nw:node-id = "
+ "current()/../../../../nt:source/"
+ "nt:source-node]/"
+ "nt:termination-point/nt:tp-id";
require-instance true;
}
description
"Reference to another TE termination point on the
same source node.";
}
leaf des-tp-ref {
type leafref {
path "../../../../../nw:node[nw:node-id = "
+ "current()/../../../../nt:destination/"
+ "nt:dest-node]/"
+ "nt:termination-point/nt:tp-id";
require-instance true;
}
description
"Reference to another TE termination point on the
same destination node.";
}
}
augment "/nw:networks/nw:network/nw:node/te/"
+ "information-source-entry/connectivity-matrices/"
+ "connectivity-matrix" {
when '../../../../../nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for the TE node connectivity matrix.";
uses te-node-connectivity-matrix-attributes;
}
augment "/nw:networks/nw:network/nw:node/te/te-node-attributes/"
+ "connectivity-matrices/connectivity-matrix" {
when '../../../../../nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for the TE node connectivity matrix.";
uses te-node-connectivity-matrix-attributes;
}
augment "/nw:networks/nw:network/nw:node/te/"
+ "tunnel-termination-point/local-link-connectivities" {
when '../../../../nw:network-types/tet:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for TE node TTP LLCs (Local Link
Connectivities).";
uses te-node-tunnel-termination-point-llc-list;
}
}
<CODE ENDS>
8. Security Considerations β¨
okay bestie, this part is SERIOUS, so let's be real π«Ά The YANG module in this doc defines a schema for data that's meant to be reached through network management protocols like NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport there is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport there is TLS [RFC8446]. π
The Network Configuration Access Control Model (NACM) [RFC8341] is how you restrict access for particular NETCONF or RESTCONF users, so they only get a preconfigured subset of the available protocol operations and content. It's giving gatekeeper energy π
Now, there are a bunch of data nodes in this module that are writable, creatable, and deletable (that's config true, which is the default). These can be sensitive or vulnerable depending on the network environment π¬ Writing to them without proper protection (like an edit-config) can seriously mess with network operations. Here are the subtrees and why they're sensitive:
/nw:networks/nw:network/nw:network-types/tet:te-topology
This subtree specifies the TE topology type. Changing the configuration can make the TE topology type invalid. If someone does that on purpose, a malicious attacker could disable the TE capabilities on the related networks and cause traffic to be disrupted or misrouted. π
/nw:networks/tet:te
This subtree specifies the TE node templates and TE link templates. Changing the configuration here changes future TE configurations. A malicious attacker could alter TE capabilities scheduled for a later time, causing traffic to be disrupted or misrouted. π
/nw:networks/nw:network
This subtree specifies the topology-wide configurations, including the TE topology ID and topology-wide policies. Changing the configuration here can add, remove, or modify TE topologies. A malicious attacker who adds a TE topology could create an unauthorized traffic network. Removing or modifying a TE topology could cause traffic to be disabled or misrouted in that topology, and those traffic changes can also hit the connected TE topologies. π
/nw:networks/nw:network/nw:node
This subtree specifies the configurations for TE nodes. Changing the configuration here can add, remove, or modify TE nodes. A malicious attacker who adds a TE node could create an unauthorized traffic path. Removing or modifying a TE node could cause traffic to be disabled or misrouted at that node. These traffic changes can also affect the surrounding TE nodes and TE links in this TE topology and the connected TE topologies. π¨
/nw:networks/nw:network/nt:link/tet:te
This subtree specifies the configurations for TE links. Changing the configuration here can add, remove, or modify TE links. A malicious attacker who adds a TE link could create an unauthorized traffic path. Removing or modifying a TE link could cause traffic to be disabled or misrouted on that link. These traffic changes can also affect the surrounding TE nodes and TE links in this TE topology and the connected TE topologies. β‘
/nw:networks/nw:network/nw:node/nt:termination-point
This subtree specifies the configurations of TE LTPs. Changing the configuration here can add, remove, or modify TE LTPs. A malicious attacker who adds a TE LTP could create an unauthorized traffic path. Removing or modifying a TE LTP could cause traffic to be disabled or misrouted on that LTP. These traffic changes can also affect the surrounding TE nodes and TE links in this TE topology and the connected TE topologies. π¦
Some of the readable data nodes in this module can also be sensitive or vulnerable depending on the environment, so it's important to control read access to them (for example, via get, get-config, or notification) π Here are the subtrees and why they matter:
/nw:networks/nw:network/nw:network-types/tet:te-topology
Unauthorized access to this subtree can disclose the TE topology type.
/nw:networks/tet:te
Unauthorized access to this subtree can disclose the TE node templates and TE link templates.
/nw:networks/nw:network
Unauthorized access to this subtree can disclose the topology-wide configurations, including the TE topology ID, the topology-wide policies, and the topology geolocation. π
/nw:networks/nw:network/nw:node
Unauthorized access to this subtree can disclose the operational state information of TE nodes.
/nw:networks/nw:network/nt:link/tet:te
Unauthorized access to this subtree can disclose the operational state information of TE links.
/nw:networks/nw:network/nw:node/nt:termination-point
Unauthorized access to this subtree can disclose the operational state information of TE LTPs.
Locking down who can read AND write these subtrees is non-negotiable, bestie. Treat it like your diary with a very strong lock π₯
9. IANA Considerations β¨
okay so IANA is the registry keeper π and this part is literally them saying "we got you, bestie." IANA has registered the following URIs in the "ns" subregistry within the "IETF XML Registry" [RFC3688] π
URI: urn:ietf:params:xml:ns:yang:ietf-te-topology
Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-te-topology-state
Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace.
the two namespace URIs are registered under the IESG, so they're officially on the list now π¦
IANA has also registered the following YANG modules in the "YANG Module Names" subregistry [RFC6020] within the "YANG Parameters" registry. The module pair is giving "matching set" energy π§
Name: ietf-te-topology
Namespace: urn:ietf:params:xml:ns:yang:ietf-te-topology
Prefix: tet
Reference: RFC 8795
Name: ietf-te-topology-state
Namespace: urn:ietf:params:xml:ns:yang:ietf-te-topology-state
Prefix: tet-s
Reference: RFC 8795
10. References π
10.1. Normative References
ngl this list is the whole squad of docs we lean on to make this work π«Ά here they are, every single one, exactly as they're written π
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004,
<https://www.rfc-editor.org/info/rfc3688>.
[RFC3945] Mannie, E., Ed., "Generalized Multi-Protocol Label
Switching (GMPLS) Architecture", RFC 3945,
DOI 10.17487/RFC3945, October 2004,
<https://www.rfc-editor.org/info/rfc3945>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010,
<https://www.rfc-editor.org/info/rfc6020>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013,
<https://www.rfc-editor.org/info/rfc6991>.
[RFC7926] Farrel, A., Ed., Drake, J., Bitar, N., Swallow, G.,
Ceccarelli, D., and X. Zhang, "Problem Statement and
Architecture for Information Exchange between
Interconnected Traffic-Engineered Networks", BCP 206,
RFC 7926, DOI 10.17487/RFC7926, July 2016,
<https://www.rfc-editor.org/info/rfc7926>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<https://www.rfc-editor.org/info/rfc8040>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
Access Control Model", STD 91, RFC 8341,
DOI 10.17487/RFC8341, March 2018,
<https://www.rfc-editor.org/info/rfc8341>.
[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
and R. Wilton, "Network Management Datastore Architecture
(NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
<https://www.rfc-editor.org/info/rfc8342>.
[RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N.,
Ananthakrishnan, H., and X. Liu, "A YANG Data Model for
Network Topologies", RFC 8345, DOI 10.17487/RFC8345, March
2018, <https://www.rfc-editor.org/info/rfc8345>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>.
[RFC8776] Saad, T., Gandhi, R., Liu, X., Beeram, V., and I. Bryskin,
"Common YANG Data Types for Traffic Engineering",
RFC 8776, DOI 10.17487/RFC8776, June 2020,
<https://www.rfc-editor.org/info/rfc8776>.
10.2. Informative References β¨
okay bestie, here's the reading list π these are the extra docs behind the spec, so you can go deeper whenever you want π
- [G.709] ITU-T, "Interfaces for the optical transport network", ITU-T Recommendation G.709, June 2020,
https://www.itu.int/rec/T-REC-G.709/. - [G.805] ITU-T, "Generic functional architecture of transport networks", ITU-T Recommendation G.805, March 2000,
https://www.itu.int/rec/T-REC-G.805/en. - [G.8080] ITU-T, "Architecture for the automatically switched optical network", ITU-T Recommendation G.8080, February 2012,
https://www.itu.int/rec/T-REC-G.8080/en. - [G.872] ITU-T, "Architecture of optical transport networks", ITU-T Recommendation G.872, December 2019,
https://www.itu.int/rec/T-REC-G.872/en. - [RFC1195] Callon, R., "Use of OSI IS-IS for routing in TCP/IP and dual environments", RFC 1195, DOI 10.17487/RFC1195, December 1990,
https://www.rfc-editor.org/info/rfc1195. - [RFC2702] Awduche, D., Malcolm, J., Agogbua, J., O'Dell, M., and J. McManus, "Requirements for Traffic Engineering Over MPLS", RFC 2702, DOI 10.17487/RFC2702, September 1999,
https://www.rfc-editor.org/info/rfc2702. - [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001,
https://www.rfc-editor.org/info/rfc3209. - [RFC3272] Awduche, D., Chiu, A., Elwalid, A., Widjaja, I., and X. Xiao, "Overview and Principles of Internet Traffic Engineering", RFC 3272, DOI 10.17487/RFC3272, May 2002,
https://www.rfc-editor.org/info/rfc3272. - [RFC3471] Berger, L., Ed., "Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description", RFC 3471, DOI 10.17487/RFC3471, January 2003,
https://www.rfc-editor.org/info/rfc3471. - [RFC3630] Katz, D., Kompella, K., and D. Yeung, "Traffic Engineering (TE) Extensions to OSPF Version 2", RFC 3630, DOI 10.17487/RFC3630, September 2003,
https://www.rfc-editor.org/info/rfc3630. - [RFC3785] Le Faucheur, F., Uppili, R., Vedrenne, A., Merckx, P., and T. Telkamp, "Use of Interior Gateway Protocol (IGP) Metric as a second MPLS Traffic Engineering (TE) Metric", BCP 87, RFC 3785, DOI 10.17487/RFC3785, May 2004,
https://www.rfc-editor.org/info/rfc3785. - [RFC4201] Kompella, K., Rekhter, Y., and L. Berger, "Link Bundling in MPLS Traffic Engineering (TE)", RFC 4201, DOI 10.17487/RFC4201, October 2005,
https://www.rfc-editor.org/info/rfc4201. - [RFC4202] Kompella, K., Ed. and Y. Rekhter, Ed., "Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)", RFC 4202, DOI 10.17487/RFC4202, October 2005,
https://www.rfc-editor.org/info/rfc4202. - [RFC4203] Kompella, K., Ed. and Y. Rekhter, Ed., "OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)", RFC 4203, DOI 10.17487/RFC4203, October 2005,
https://www.rfc-editor.org/info/rfc4203. - [RFC4206] Kompella, K. and Y. Rekhter, "Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)", RFC 4206, DOI 10.17487/RFC4206, October 2005,
https://www.rfc-editor.org/info/rfc4206. - [RFC4872] Lang, J.P., Ed., Rekhter, Y., Ed., and D. Papadimitriou, Ed., "RSVP-TE Extensions in Support of End-to-End Generalized Multi-Protocol Label Switching (GMPLS) Recovery", RFC 4872, DOI 10.17487/RFC4872, May 2007,
https://www.rfc-editor.org/info/rfc4872. - [RFC5152] Vasseur, JP., Ed., Ayyangar, A., Ed., and R. Zhang, "A Per-Domain Path Computation Method for Establishing Inter-Domain Traffic Engineering (TE) Label Switched Paths (LSPs)", RFC 5152, DOI 10.17487/RFC5152, February 2008,
https://www.rfc-editor.org/info/rfc5152. - [RFC5212] Shiomoto, K., Papadimitriou, D., Le Roux, JL., Vigoureux, M., and D. Brungard, "Requirements for GMPLS-Based Multi-Region and Multi-Layer Networks (MRN/MLN)", RFC 5212, DOI 10.17487/RFC5212, July 2008,
https://www.rfc-editor.org/info/rfc5212. - [RFC5305] Li, T. and H. Smit, "IS-IS Extensions for Traffic Engineering", RFC 5305, DOI 10.17487/RFC5305, October 2008,
https://www.rfc-editor.org/info/rfc5305. - [RFC5316] Chen, M., Zhang, R., and X. Duan, "ISIS Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering", RFC 5316, DOI 10.17487/RFC5316, December 2008,
https://www.rfc-editor.org/info/rfc5316. - [RFC5392] Chen, M., Zhang, R., and X. Duan, "OSPF Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering", RFC 5392, DOI 10.17487/RFC5392, January 2009,
https://www.rfc-editor.org/info/rfc5392. - [RFC6001] Papadimitriou, D., Vigoureux, M., Shiomoto, K., Brungard, D., and JL. Le Roux, "Generalized MPLS (GMPLS) Protocol Extensions for Multi-Layer and Multi-Region Networks (MLN/MRN)", RFC 6001, DOI 10.17487/RFC6001, October 2010,
https://www.rfc-editor.org/info/rfc6001. - [RFC7308] Osborne, E., "Extended Administrative Groups in MPLS Traffic Engineering (MPLS-TE)", RFC 7308, DOI 10.17487/RFC7308, July 2014,
https://www.rfc-editor.org/info/rfc7308. - [RFC7471] Giacalone, S., Ward, D., Drake, J., Atlas, A., and S. Previdi, "OSPF Traffic Engineering (TE) Metric Extensions", RFC 7471, DOI 10.17487/RFC7471, March 2015,
https://www.rfc-editor.org/info/rfc7471. - [RFC7579] Bernstein, G., Ed., Lee, Y., Ed., Li, D., Imajuku, W., and J. Han, "General Network Element Constraint Encoding for GMPLS-Controlled Networks", RFC 7579, DOI 10.17487/RFC7579, June 2015,
https://www.rfc-editor.org/info/rfc7579. - [RFC7752] Gredler, H., Ed., Medved, J., Previdi, S., Farrel, A., and S. Ray, "North-Bound Distribution of Link-State and Traffic Engineering (TE) Information Using BGP", RFC 7752, DOI 10.17487/RFC7752, March 2016,
https://www.rfc-editor.org/info/rfc7752. - [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
https://www.rfc-editor.org/info/rfc8340. - [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, E., and A. Tripathy, "Subscription to YANG Notifications", RFC 8639, DOI 10.17487/RFC8639, September 2019,
https://www.rfc-editor.org/info/rfc8639. - [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, September 2019,
https://www.rfc-editor.org/info/rfc8641. - [TEAS-TOPO] Bryskin, I., Beeram, V., Saad, T., and X. Liu, "TE Topology and Tunnel Modeling for Transport Networks", Work in Progress, Internet-Draft, draft-ietf-teas-te-topo-and-tunnel-modeling-06, 12 July 2020,
https://tools.ietf.org/html/draft-ietf-teas-te-topo-and-tunnel-modeling-06. - [YANG-CFG-SCHED] Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and O. Gonzalez de Dios, "A YANG Data Model for Configuration Scheduling", Work in Progress, Internet-Draft, draft-liu-netmod-yang-schedule-05, 1 March 2018,
https://tools.ietf.org/html/draft-liu-netmod-yang-schedule-05. - [YANG-L3] Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and O. Gonzalez de Dios, "YANG Data Model for Layer 3 TE Topologies", Work in Progress, Internet-Draft, draft-ietf-teas-yang-l3-te-topo-08, 12 July 2020,
https://tools.ietf.org/html/draft-ietf-teas-yang-l3-te-topo-08. - [YANG-OTN] Zheng, H., Busi, I., Liu, X., Belotti, S., and O. Gonzalez de Dios, "A YANG Data Model for Optical Transport Network Topology", Work in Progress, Internet-Draft, draft-ietf-ccamp-otn-topo-yang-10, 9 March 2020,
https://tools.ietf.org/html/draft-ietf-ccamp-otn-topo-yang-10. - [YANG-WSON] Zheng, H., Lee, Y., Guo, A., Lopez, V., and D. King, "A YANG Data Model for WSON (Wavelength Switched Optical Networks)", Work in Progress, Internet-Draft, draft-ietf-ccamp-wson-yang-25, 19 May 2020,
https://tools.ietf.org/html/draft-ietf-ccamp-wson-yang-25.
Appendix A. Complete Model Tree Structure π
module: ietf-te-topology augment /nw:networks/nw:network/nw:network-types: +--rw te-topology! augment /nw:networks: +--rw te! +--rw templates +--rw node-template* [name] {template}?
| +--rw name | |
|---|---|
| te-types:te-template-name | |
| +--rw priority? uint16 | |
| +--rw reference-change-policy? enumeration | |
| +--rw te-node-attributes | |
| +--rw admin-status? te-types:te-admin-status | |
| +--rw domain-id? uint32 | |
| +--rw is-abstract? empty | |
| +--rw name? string | |
| +--rw signaling-address* inet:ip-address | |
| +--rw underlay-topology {te-topology-hierarchy}? | |
| +--rw network-ref? | |
| -> /nw:networks/network/network-id |
+--rw link-template* [name] {template}? +--rw name
| te-types:te-template-name |
+--rw priority? uint16 +--rw reference-change-policy? enumeration +--rw te-link-attributes +--rw access-type?
| te-types:te-link-access-type |
+--rw external-domain
| +--rw network-ref? | |
|---|---|
| -> /nw:networks/network/network-id | |
| +--rw remote-te-node-id? te-types:te-node-id | |
| +--rw remote-te-link-tp-id? te-types:te-tp-id |
+--rw is-abstract? empty +--rw name? string +--rw underlay {te-topology-hierarchy}?
| +--rw enabled? boolean | ||
|---|---|---|
| +--rw primary-path | ||
| +--rw network-ref? | ||
| -> /nw:networks/network/network-id | ||
| +--rw path-element* [path-element-id] | ||
| +--rw path-element-id uint32 | ||
| +--rw (type)? | ||
| +--:(numbered-node-hop) | ||
| +--rw numbered-node-hop | ||
| +--rw node-id te-node-id | ||
| +--rw hop-type? te-hop-type | ||
| +--:(numbered-link-hop) | ||
| +--rw numbered-link-hop | ||
| +--rw link-tp-id te-tp-id | ||
| +--rw hop-type? te-hop-type | ||
| +--rw direction? | ||
| te-link-direction | ||
| +--:(unnumbered-link-hop) | ||
| +--rw unnumbered-link-hop | ||
| +--rw link-tp-id te-tp-id | ||
| +--rw node-id te-node-id | ||
| +--rw hop-type? te-hop-type | ||
| +--rw direction? | ||
| te-link-direction | ||
| +--:(as-number) | ||
| +--rw as-number-hop | ||
| +--rw as-number inet:as-number | ||
| +--rw hop-type? te-hop-type | ||
| +--:(label) | ||
| +--rw label-hop | ||
| +--rw te-label | ||
| +--rw (technology)? | ||
| +--:(generic) | ||
| +--rw generic? | ||
| rt- |
types:generalized-label
| +--rw direction? | ||
|---|---|---|
| te-label-direction | ||
| +--rw backup-path* [index] | ||
| +--rw index uint32 | ||
| +--rw network-ref? | ||
| -> /nw:networks/network/network-id | ||
| +--rw path-element* [path-element-id] | ||
| +--rw path-element-id uint32 | ||
| +--rw (type)? | ||
| +--:(numbered-node-hop) | ||
| +--rw numbered-node-hop | ||
| +--rw node-id te-node-id | ||
| +--rw hop-type? te-hop-type | ||
| +--:(numbered-link-hop) | ||
| +--rw numbered-link-hop | ||
| +--rw link-tp-id te-tp-id | ||
| +--rw hop-type? te-hop-type | ||
| +--rw direction? | ||
| te-link-direction | ||
| +--:(unnumbered-link-hop) | ||
| +--rw unnumbered-link-hop | ||
| +--rw link-tp-id te-tp-id | ||
| +--rw node-id te-node-id | ||
| +--rw hop-type? te-hop-type | ||
| +--rw direction? | ||
| te-link-direction | ||
| +--:(as-number) | ||
| +--rw as-number-hop | ||
| +--rw as-number inet:as-number | ||
| +--rw hop-type? te-hop-type | ||
| +--:(label) | ||
| +--rw label-hop | ||
| +--rw te-label | ||
| +--rw (technology)? | ||
| +--:(generic) | ||
| +--rw generic? | ||
| rt- |
types:generalized-label
| +--rw direction? | |
|---|---|
| te-label-direction | |
| +--rw protection-type? identityref | |
| +--rw tunnel-termination-points | |
| +--rw source? binary | |
| +--rw destination? binary | |
| +--rw tunnels | |
| +--rw sharing? boolean | |
| +--rw tunnel* [tunnel-name] | |
| +--rw tunnel-name string | |
| +--rw sharing? boolean |
+--rw admin-status?
| te-types:te-admin-status |
+--rw link-index? uint64 +--rw administrative-group?
| te-types:admin-groups |
+--rw interface-switching-capability*
| [switching-capability encoding] |
|---|
| +--rw switching-capability identityref |
| +--rw encoding identityref |
| +--rw max-lsp-bandwidth* [priority] |
| +--rw priority uint8 |
| +--rw te-bandwidth |
| +--rw (technology)? |
| +--:(generic) |
| +--rw generic? te-bandwidth |
+--rw label-restrictions
| +--rw label-restriction* [index] | ||
|---|---|---|
| +--rw restriction? enumeration | ||
| +--rw index uint32 | ||
| +--rw label-start | ||
| +--rw te-label | ||
| +--rw (technology)? | ||
| +--:(generic) | ||
| +--rw generic? | ||
| rt-types:generalized-label | ||
| +--rw direction? te-label-direction | ||
| +--rw label-end | ||
| +--rw te-label | ||
| +--rw (technology)? | ||
| +--:(generic) | ||
| +--rw generic? | ||
| rt-types:generalized-label | ||
| +--rw direction? te-label-direction | ||
| +--rw label-step | ||
| +--rw (technology)? | ||
| +--:(generic) | ||
| +--rw generic? int32 | ||
| +--rw range-bitmap? yang:hex-string |
+--rw link-protection-type? identityref +--rw max-link-bandwidth
| +--rw te-bandwidth |
|---|
| +--rw (technology)? |
| +--:(generic) |
| +--rw generic? te-bandwidth |
+--rw max-resv-link-bandwidth
| +--rw te-bandwidth |
|---|
| +--rw (technology)? |
| +--:(generic) |
| +--rw generic? te-bandwidth |
+--rw unreserved-bandwidth* [priority]
| +--rw priority uint8 |
|---|
| +--rw te-bandwidth |
| +--rw (technology)? |
| +--:(generic) |
| +--rw generic? te-bandwidth |
+--rw te-default-metric? uint32 +--rw te-delay-metric? uint32 +--rw te-igp-metric? uint32 +--rw te-srlgs
| +--rw value* te-types:srlg |
+--rw te-nsrlgs {nsrlg}? +--rw id* uint32 augment /nw:networks/nw:network: +--rw te-topology-identifier
| +--rw provider-id? te-global-id |
|---|
| +--rw client-id? te-global-id |
| +--rw topology-id? te-topology-id |
+--rw te! +--rw name? string +--rw preference? uint8 +--rw optimization-criterion? identityref +--rw nsrlg* [id] {nsrlg}?
| +--rw id uint32 |
|---|
| +--rw disjointness? te-types:te-path-disjointness |
+--ro geolocation +--ro altitude? int64 +--ro latitude? geographic-coordinate-degree +--ro longitude? geographic-coordinate-degree augment /nw:networks/nw:network/nw:node: +--rw te-node-id? te-types:te-node-id +--rw te! +--rw te-node-template*
| -> ../../../../te/templates/node-template/name |
|---|
| {template}? |
+--rw te-node-attributes
| +--rw admin-status? te-types:te-admin-status | ||||
|---|---|---|---|---|
| +--rw connectivity-matrices | ||||
| +--rw number-of-entries? uint16 | ||||
| +--rw label-restrictions | ||||
| +--rw label-restriction* [index] | ||||
| +--rw restriction? enumeration | ||||
| +--rw index uint32 | ||||
| +--rw label-start | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt-types:generalized-label | ||||
| +--rw direction? te-label-direction | ||||
| +--rw label-end | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt-types:generalized-label |
okay the tree is literally giving π³β¨ here's the next chunk, no cap
| | | | +--rw direction? te-label-direction
| | | +--rw label-step
| | | | +--rw (technology)?
| | | | +--:(generic)
| | | | +--rw generic? int32
| | | +--rw range-bitmap? yang:hex-string
| | +--rw is-allowed? boolean
| | +--rw underlay {te-topology-hierarchy}?
| | | +--rw enabled? boolean
| | | +--rw primary-path
| | | | +--rw network-ref?
| | | | | -> /nw:networks/network/network-id
| | | | +--rw path-element* [path-element-id]
| | | | +--rw path-element-id uint32
| | | | +--rw (type)?
| | | | +--:(numbered-node-hop)
| | | | | +--rw numbered-node-hop
| | | | | +--rw node-id te-node-id
| | | | | +--rw hop-type? te-hop-type
| | | | +--:(numbered-link-hop)
| | | | | +--rw numbered-link-hop
| | | | | +--rw link-tp-id te-tp-id
| | | | | +--rw hop-type? te-hop-type
| | | | | +--rw direction? te-link-direction
| | | | +--:(unnumbered-link-hop)
| | | | | +--rw unnumbered-link-hop
| | | | | +--rw link-tp-id te-tp-id
| | | | | +--rw node-id te-node-id
| | | | | +--rw hop-type? te-hop-type
| | | | | +--rw direction? te-link-direction
| | | | +--:(as-number)
| | | | | +--rw as-number-hop
| | | | | +--rw as-number inet:as-number
| | | | | +--rw hop-type? te-hop-type
| | | | +--:(label)
| | | | +--rw label-hop
| | | | +--rw te-label
| | | | +--rw (technology)?
| | | | | +--:(generic)
| | | | | +--rw generic?
| | | | | rt-types:generalized-
label
| | | | +--rw direction?
| | | | te-label-direction
| | | +--rw backup-path* [index]
| | | | +--rw index uint32
| | | | +--rw network-ref?
| | | | | -> /nw:networks/network/network-id
| | | | +--rw path-element* [path-element-id]
| | | | +--rw path-element-id uint32
| | | | +--rw (type)?
| | | | +--:(numbered-node-hop)
| | | | | +--rw numbered-node-hop
| | | | | +--rw node-id te-node-id
| | | | | +--rw hop-type? te-hop-type
| | | | +--:(numbered-link-hop)
| | | | | +--rw numbered-link-hop
| | | | | +--rw link-tp-id te-tp-id
| | | | | +--rw hop-type? te-hop-type
| | | | | +--rw direction? te-link-direction
| | | | +--:(unnumbered-link-hop)
| | | | | +--rw unnumbered-link-hop
| | | | | +--rw link-tp-id te-tp-id
| | | | | +--rw node-id te-node-id
| | | | | +--rw hop-type? te-hop-type
| | | | | +--rw direction? te-link-direction
| | | | +--:(as-number)
| | | | | +--rw as-number-hop
| | | | | +--rw as-number inet:as-number
| | | | | +--rw hop-type? te-hop-type
| | | | +--:(label)
| | | | +--rw label-hop
| | | | +--rw te-label
| | | | +--rw (technology)?
| | | | | +--:(generic)
| | | | | +--rw generic?
| | | | | rt-types:generalized-
label
| | | | +--rw direction?
| | | | te-label-direction
| | | +--rw protection-type? identityref
| | | +--rw tunnel-termination-points
| | | | +--rw source? binary
| | | | +--rw destination? binary
| | | +--rw tunnels
| | | +--rw sharing? boolean
| | | +--rw tunnel* [tunnel-name]
| | | +--rw tunnel-name string
| | | +--rw sharing? boolean
| | +--rw path-constraints
| | | +--rw te-bandwidth
| | | | +--rw (technology)?
| | | | +--:(generic)
| | | | +--rw generic? te-bandwidth
| | | +--rw link-protection? identityref
| | | +--rw setup-priority? uint8
| | | +--rw hold-priority? uint8
| | | +--rw signaling-type? identityref
| | | +--rw path-metric-bounds
| | | | +--rw path-metric-bound* [metric-type]
| | | | +--rw metric-type identityref
| | | | +--rw upper-bound? uint64
| | | +--rw path-affinities-values
| | | | +--rw path-affinities-value* [usage]
| | | | +--rw usage identityref
| | | | +--rw value? admin-groups
| | | +--rw path-affinity-names
| | | | +--rw path-affinity-name* [usage]
| | | | +--rw usage identityref
| | | | +--rw affinity-name* [name]
| | | | +--rw name string
| | | +--rw path-srlgs-lists
| | | | +--rw path-srlgs-list* [usage]
| | | | +--rw usage identityref
| | | | +--rw values* srlg
| | | +--rw path-srlgs-names
| | | | +--rw path-srlgs-name* [usage]
| | | | +--rw usage identityref
| | | | +--rw names* string
| | | +--rw disjointness? te-path-disjointness
| | +--rw optimizations
| | | +--rw (algorithm)?
| | | +--:(metric) {path-optimization-metric}?
| | | | +--rw optimization-metric* [metric-type]
| | | | | +--rw metric-type
| | | | | | identityref
| | | | | +--rw weight?
| | | | | | uint8
| | | | | +--rw explicit-route-exclude-objects
| | | | | | +--rw route-object-exclude-object*
| | | | | | [index]
| | | | | | +--rw index
| | | | | | | uint32
| | | | | | +--rw (type)?
| | | | | | +--:(numbered-node-hop)
| | | | | | | +--rw numbered-node-hop
| | | | | | | +--rw node-id te-node-id
| | | | | | | +--rw hop-type? te-hop-type
| | | | | | +--:(numbered-link-hop)
| | | | | | | +--rw numbered-link-hop
| | | | | | | +--rw link-tp-id te-tp-id
| | | | | | | +--rw hop-type?
| | | | | | | | te-hop-type
| | | | | | | +--rw direction?
| | | | | | | te-link-direction
| | | | | | +--:(unnumbered-link-hop)
| | | | | | | +--rw unnumbered-link-hop
| | | | | | | +--rw link-tp-id te-tp-id
| | | | | | | +--rw node-id
| | | | | | | | te-node-id
| | | | | | | +--rw hop-type?
| | | | | | | | te-hop-type
| | | | | | | +--rw direction?
| | | | | | | te-link-direction
| | | | | | +--:(as-number)
| | | | | | | +--rw as-number-hop
| | | | | | | +--rw as-number
| | | | | | | | inet:as-number
| | | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--:(label)
| | | | | | | +--rw label-hop
| | | | | | | +--rw te-label
| | | | | | | +--rw (technology)?
| | | | | | | | +--:(generic)
| | | | | | | | +--rw generic?
| | | | | | | | rt-
types:generalized-label
| | | | | | | +--rw direction?
| | | | | | | te-label-direction
| | | | | | +--:(srlg)
| | | | | | +--rw srlg
| | | | | | +--rw srlg? uint32
| | | | | +--rw explicit-route-include-objects
| | | | | +--rw route-object-include-object*
| | | | | [index]
| | | | | +--rw index
| | | | | | uint32
| | | | | +--rw (type)?
| | | | | +--:(numbered-node-hop)
| | | | | | +--rw numbered-node-hop
| | | | | | +--rw node-id te-node-id
| | | | | | +--rw hop-type? te-hop-type
| | | | | +--:(numbered-link-hop)
| | | | | | +--rw numbered-link-hop
| | | | | | +--rw link-tp-id te-tp-id
| | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--rw direction?
| | | | | | te-link-direction
| | | | | +--:(unnumbered-link-hop)
| | | | | | +--rw unnumbered-link-hop
| | | | | | +--rw link-tp-id te-tp-id
| | | | | | +--rw node-id
| | | | | | | te-node-id
| | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--rw direction?
| | | | | | te-link-direction
| | | | | +--:(as-number)
| | | | | | +--rw as-number-hop
| | | | | | +--rw as-number
| | | | | | | inet:as-number
| | | | | | +--rw hop-type?
| | | | | | te-hop-type
| | | | | +--:(label)
| | | | | +--rw label-hop
| | | | | +--rw te-label
| | | | | +--rw (technology)?
| | | | | | +--:(generic)
| | | | | | +--rw generic?
| rt- |
types:generalized-label
| +--rw direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--rw tiebreakers | ||||
| +--rw tiebreaker* [tiebreaker-type] | ||||
| +--rw tiebreaker-type identityref | ||||
| +--:(objective-function) | ||||
| {path-optimization-objective-function}? | ||||
| +--rw objective-function | ||||
| +--rw objective-function-type? identityref | ||||
| +--ro path-properties | ||||
| +--ro path-metric* [metric-type] | ||||
| +--ro metric-type identityref | ||||
| +--ro accumulative-value? uint64 | ||||
| +--ro path-affinities-values | ||||
| +--ro path-affinities-value* [usage] | ||||
| +--ro usage identityref | ||||
| +--ro value? admin-groups | ||||
| +--ro path-affinity-names | ||||
| +--ro path-affinity-name* [usage] | ||||
| +--ro usage identityref | ||||
| +--ro affinity-name* [name] | ||||
| +--ro name string | ||||
| +--ro path-srlgs-lists | ||||
| +--ro path-srlgs-list* [usage] | ||||
| +--ro usage identityref | ||||
| +--ro values* srlg | ||||
| +--ro path-srlgs-names | ||||
| +--ro path-srlgs-name* [usage] | ||||
| +--ro usage identityref | ||||
| +--ro names* string | ||||
| +--ro path-route-objects | ||||
| +--ro path-route-object* [index] | ||||
| +--ro index uint32 | ||||
| +--ro (type)? | ||||
| +--:(numbered-node-hop) | ||||
| +--ro numbered-node-hop | ||||
| +--ro node-id te-node-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--:(numbered-link-hop) | ||||
| +--ro numbered-link-hop | ||||
| +--ro link-tp-id te-tp-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--ro direction? te-link-direction | ||||
| +--:(unnumbered-link-hop) | ||||
| +--ro unnumbered-link-hop | ||||
| +--ro link-tp-id te-tp-id | ||||
| +--ro node-id te-node-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--ro direction? te-link-direction | ||||
| +--:(as-number) | ||||
| +--ro as-number-hop | ||||
| +--ro as-number inet:as-number | ||||
| +--ro hop-type? te-hop-type | ||||
| +--:(label) | ||||
| +--ro label-hop | ||||
| +--ro te-label | ||||
| +--ro (technology)? | ||||
| +--:(generic) | ||||
| +--ro generic? | ||||
| rt-types:generalized- |
label
| +--ro direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--rw connectivity-matrix* [id] | ||||
| +--rw id uint32 | ||||
| +--rw from | ||||
| +--rw tp-ref? leafref | ||||
| +--rw label-restrictions | ||||
| +--rw label-restriction* [index] | ||||
| +--rw restriction? enumeration | ||||
| +--rw index uint32 | ||||
| +--rw label-start | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt-types:generalized- |
label
| +--rw direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--rw label-end | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt-types:generalized- |
label
| +--rw direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--rw label-step | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? int32 | ||||
| +--rw range-bitmap? yang:hex-string | ||||
| +--rw to | ||||
| +--rw tp-ref? leafref | ||||
| +--rw label-restrictions | ||||
| +--rw label-restriction* [index] | ||||
| +--rw restriction? enumeration | ||||
| +--rw index uint32 | ||||
| +--rw label-start | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt-types:generalized- |
label
| +--rw direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--rw label-end | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt-types:generalized- |
label
| +--rw direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--rw label-step | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? int32 | ||||
| +--rw range-bitmap? yang:hex-string | ||||
| +--rw is-allowed? boolean | ||||
| +--rw underlay {te-topology-hierarchy}? | ||||
| +--rw enabled? boolean | ||||
| +--rw primary-path | ||||
| +--rw network-ref? | ||||
| -> /nw:networks/network/network-id | ||||
| +--rw path-element* [path-element-id] | ||||
| +--rw path-element-id uint32 | ||||
| +--rw (type)? | ||||
| +--:(numbered-node-hop) | ||||
| +--rw numbered-node-hop | ||||
| +--rw node-id te-node-id | ||||
| +--rw hop-type? te-hop-type | ||||
| +--:(numbered-link-hop) | ||||
| +--rw numbered-link-hop | ||||
| +--rw link-tp-id te-tp-id | ||||
| +--rw hop-type? te-hop-type | ||||
| +--rw direction? | ||||
| te-link-direction | ||||
| +--:(unnumbered-link-hop) | ||||
| +--rw unnumbered-link-hop | ||||
| +--rw link-tp-id te-tp-id | ||||
| +--rw node-id te-node-id | ||||
| +--rw hop-type? te-hop-type | ||||
| +--rw direction? | ||||
| te-link-direction | ||||
| +--:(as-number) | ||||
| +--rw as-number-hop | ||||
| +--rw as-number inet:as-number | ||||
| +--rw hop-type? te-hop-type | ||||
| +--:(label) | ||||
| +--rw label-hop | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt- |
types:generalized-label
| +--rw direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--rw backup-path* [index] | ||||
| +--rw index uint32 | ||||
| +--rw network-ref? | ||||
| -> /nw:networks/network/network-id | ||||
| +--rw path-element* [path-element-id] | ||||
| +--rw path-element-id uint32 | ||||
| +--rw (type)? | ||||
| +--:(numbered-node-hop) | ||||
| +--rw numbered-node-hop | ||||
| +--rw node-id te-node-id | ||||
| +--rw hop-type? te-hop-type | ||||
| +--:(numbered-link-hop) | ||||
| +--rw numbered-link-hop | ||||
| +--rw link-tp-id te-tp-id | ||||
| +--rw hop-type? te-hop-type | ||||
| +--rw direction? | ||||
| te-link-direction | ||||
| +--:(unnumbered-link-hop) | ||||
| +--rw unnumbered-link-hop | ||||
| +--rw link-tp-id te-tp-id | ||||
| +--rw node-id te-node-id | ||||
| +--rw hop-type? te-hop-type | ||||
| +--rw direction? | ||||
| te-link-direction | ||||
| +--:(as-number) | ||||
| +--rw as-number-hop | ||||
| +--rw as-number inet:as-number | ||||
| +--rw hop-type? te-hop-type | ||||
| +--:(label) | ||||
| +--rw label-hop | ||||
| +--rw te-label | ||||
| +--rw (technology)? | ||||
| +--:(generic) | ||||
| +--rw generic? | ||||
| rt- |
types:generalized-label
| +--rw direction? | |||
|---|---|---|---|
| te-label-direction | |||
| +--rw protection-type? identityref | |||
| +--rw tunnel-termination-points | |||
| +--rw source? binary | |||
| +--rw destination? binary | |||
| +--rw tunnels | |||
| +--rw sharing? boolean | |||
| +--rw tunnel* [tunnel-name] | |||
| +--rw tunnel-name string | |||
| +--rw sharing? boolean | |||
| +--rw path-constraints | |||
| +--rw te-bandwidth | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? te-bandwidth | |||
| +--rw link-protection? identityref | |||
| +--rw setup-priority? uint8 |
Okay bestie, this part is the YANG tree getting deep π³β¨ we're still inside the path-computation branches, with path metric bounds, affinities, SRLGs, tiebreakers, and the objective function all stacked together like a whole outfit π and then the path-properties block shows up with its own read-only vibe π§
| | | +--rw hold-priority? uint8
| | | +--rw signaling-type? identityref
| | | +--rw path-metric-bounds
| | | | +--rw path-metric-bound* [metric-type]
| | | | +--rw metric-type identityref
| | | | +--rw upper-bound? uint64
| | | +--rw path-affinities-values
| | | | +--rw path-affinities-value* [usage]
| | | | +--rw usage identityref
| | | | +--rw value? admin-groups
| | | +--rw path-affinity-names
| | | | +--rw path-affinity-name* [usage]
| | | | +--rw usage identityref
| | | | +--rw affinity-name* [name]
| | | | +--rw name string
| | | +--rw path-srlgs-lists
| | | | +--rw path-srlgs-list* [usage]
| | | | +--rw usage identityref
| | | | +--rw values* srlg
| | | +--rw path-srlgs-names
| | | | +--rw path-srlgs-name* [usage]
| | | | +--rw usage identityref
| | | | +--rw names* string
| | | +--rw disjointness?
| | | te-path-disjointness
| | +--rw optimizations
| | | +--rw (algorithm)?
| | | +--:(metric) {path-optimization-metric}?
| | | | +--rw optimization-metric* [metric-type]
| | | | | +--rw metric-type
| | | | | | identityref
| | | | | +--rw weight?
| | | | | | uint8
| | | | | +--rw explicit-route-exclude-objects
| | | | | | +--rw route-object-exclude-object*
| | | | | | [index]
| | | | | | +--rw index
| | | | | | | uint32
| | | | | | +--rw (type)?
| | | | | | +--:(numbered-node-hop)
| | | | | | | +--rw numbered-node-hop
| | | | | | | +--rw node-id
| | | | | | | | te-node-id
| | | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--:(numbered-link-hop)
| | | | | | | +--rw numbered-link-hop
| | | | | | | +--rw link-tp-id
| | | | | | | | te-tp-id
| | | | | | | +--rw hop-type?
| | | | | | | | te-hop-type
| | | | | | | +--rw direction?
| | | | | | | te-link-direction
| | | | | | +--:(unnumbered-link-hop)
| | | | | | | +--rw unnumbered-link-hop
| | | | | | | +--rw link-tp-id
| | | | | | | | te-tp-id
| | | | | | | +--rw node-id
| | | | | | | | te-node-id
| | | | | | | +--rw hop-type?
| | | | | | | | te-hop-type
| | | | | | | +--rw direction?
| | | | | | | te-link-direction
| | | | | | +--:(as-number)
| | | | | | | +--rw as-number-hop
| | | | | | | +--rw as-number
| | | | | | | | inet:as-number
| | | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--:(label)
| | | | | | | +--rw label-hop
| | | | | | | +--rw te-label
| | | | | | | +--rw (technology)?
| | | | | | | | +--:(generic)
| | | | | | | | +--rw generic?
| | | | | | | | rt-
types:generalized-label
| | | | | | | +--rw direction?
| | | | | | | te-label-
direction
| | | | | | +--:(srlg)
| | | | | | +--rw srlg
| | | | | | +--rw srlg? uint32
| | | | | +--rw explicit-route-include-objects
| | | | | +--rw route-object-include-object*
| | | | | [index]
| | | | | +--rw index
| | | | | | uint32
| | | | | +--rw (type)?
| | | | | +--:(numbered-node-hop)
| | | | | | +--rw numbered-node-hop
| | | | | | +--rw node-id
| | | | | | | te-node-id
| | | | | | +--rw hop-type?
| | | | | | te-hop-type
| | | | | +--:(numbered-link-hop)
| | | | | | +--rw numbered-link-hop
| | | | | | +--rw link-tp-id
| | | | | | | te-tp-id
| | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--rw direction?
| | | | | | te-link-direction
| | | | | +--:(unnumbered-link-hop)
| | | | | | +--rw unnumbered-link-hop
| | | | | | +--rw link-tp-id
| | | | | | | te-tp-id
| | | | | | +--rw node-id
| | | | | | | te-node-id
| | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--rw direction?
| | | | | | te-link-direction
| | | | | +--:(as-number)
| | | | | | +--rw as-number-hop
| | | | | | +--rw as-number
| | | | | | | inet:as-number
| | | | | | +--rw hop-type?
| | | | | | te-hop-type
| | | | | +--:(label)
| | | | | +--rw label-hop
| | | | | +--rw te-label
| | | | | +--rw (technology)?
| | | | | | +--:(generic)
| | | | | | +--rw generic?
| | | | | | rt-
types:generalized-label
| | | | | +--rw direction?
| | | | | te-label-
direction
| | | | +--rw tiebreakers
| | | | +--rw tiebreaker* [tiebreaker-type]
| | | | +--rw tiebreaker-type identityref
| | | +--:(objective-function)
| | | {path-optimization-objective-
function}?
| | | +--rw objective-function
| | | +--rw objective-function-type?
| | | identityref
| | +--ro path-properties
| | +--ro path-metric* [metric-type]
| | | +--ro metric-type identityref
| | | +--ro accumulative-value? uint64
| | +--ro path-affinities-values
| | | +--ro path-affinities-value* [usage]
| | | +--ro usage identityref
| | | +--ro value? admin-groups
| | +--ro path-affinity-names
| | | +--ro path-affinity-name* [usage]
| | | +--ro usage identityref
| | | +--ro affinity-name* [name]
| | | +--ro name string
| | +--ro path-srlgs-lists
| | | +--ro path-srlgs-list* [usage]
| | | +--ro usage identityref
| | | +--ro values* srlg
| | +--ro path-srlgs-names
| | | +--ro path-srlgs-name* [usage]
| | | +--ro usage identityref
| | | +--ro names* string
| | +--ro path-route-objects
| | +--ro path-route-object* [index]
| | +--ro index uint32
| | +--ro (type)?
| | +--:(numbered-node-hop)
| | | +--ro numbered-node-hop
| | | +--ro node-id te-node-id
| | | +--ro hop-type? te-hop-type
| | +--:(numbered-link-hop)
| | | +--ro numbered-link-hop
| | | +--ro link-tp-id te-tp-id
| | | +--ro hop-type? te-hop-type
| | | +--ro direction?
| | | te-link-direction
| | +--:(unnumbered-link-hop)
| | | +--ro unnumbered-link-hop
| | | +--ro link-tp-id te-tp-id
| | | +--ro node-id te-node-id
| | | +--ro hop-type? te-hop-type
| | | +--ro direction?
| | | te-link-direction
| | +--:(as-number)
| | | +--ro as-number-hop
| | | +--ro as-number inet:as-number
| | | +--ro hop-type? te-hop-type
| | +--:(label)
| | +--ro label-hop
| | +--ro te-label
| | +--ro (technology)?
| | | +--:(generic)
| | | +--ro generic?
| | | rt-
types:generalized-label
| | +--ro direction?
| | te-label-direction
| +--rw domain-id? uint32
| +--rw is-abstract? empty
| +--rw name? string
| +--rw signaling-address* inet:ip-address
| +--rw underlay-topology {te-topology-hierarchy}?
| +--rw network-ref? -> /nw:networks/network/network-id
+--ro oper-status? te-types:te-oper-status
+--ro geolocation
| +--ro altitude? int64
| +--ro latitude? geographic-coordinate-degree
| +--ro longitude? geographic-coordinate-degree
Okay so the tree is still unpacking, and the next bit is where we pick up the rest of the structure π¦π
+--ro is-multi-access-dr? empty +--ro information-source? te-info-source +--ro information-source-instance? string +--ro information-source-state
| +--ro credibility-preference? uint16 |
|---|
| +--ro logical-network-element? string |
| +--ro network-instance? string |
| +--ro topology |
| +--ro node-ref? leafref |
| +--ro network-ref? -> /nw:networks/network/network-id |
+--ro information-source-entry*
| [information-source information-source-instance] | ||||
|---|---|---|---|---|
| +--ro information-source te-info-source | ||||
| +--ro information-source-instance string | ||||
| +--ro information-source-state | ||||
| +--ro credibility-preference? uint16 | ||||
| +--ro logical-network-element? string | ||||
| +--ro network-instance? string | ||||
| +--ro topology | ||||
| +--ro node-ref? leafref | ||||
| +--ro network-ref? | ||||
| -> /nw:networks/network/network-id | ||||
| +--ro connectivity-matrices | ||||
| +--ro number-of-entries? uint16 | ||||
| +--ro label-restrictions | ||||
| +--ro label-restriction* [index] | ||||
| +--ro restriction? enumeration | ||||
| +--ro index uint32 | ||||
| +--ro label-start | ||||
| +--ro te-label | ||||
| +--ro (technology)? | ||||
| +--:(generic) | ||||
| +--ro generic? | ||||
| rt-types:generalized-label | ||||
| +--ro direction? te-label-direction | ||||
| +--ro label-end | ||||
| +--ro te-label | ||||
| +--ro (technology)? | ||||
| +--:(generic) | ||||
| +--ro generic? | ||||
| rt-types:generalized-label | ||||
| +--ro direction? te-label-direction | ||||
| +--ro label-step | ||||
| +--ro (technology)? | ||||
| +--:(generic) | ||||
| +--ro generic? int32 | ||||
| +--ro range-bitmap? yang:hex-string | ||||
| +--ro is-allowed? boolean | ||||
| +--ro underlay {te-topology-hierarchy}? | ||||
| +--ro enabled? boolean | ||||
| +--ro primary-path | ||||
| +--ro network-ref? | ||||
| -> /nw:networks/network/network-id | ||||
| +--ro path-element* [path-element-id] | ||||
| +--ro path-element-id uint32 | ||||
| +--ro (type)? | ||||
| +--:(numbered-node-hop) | ||||
| +--ro numbered-node-hop | ||||
| +--ro node-id te-node-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--:(numbered-link-hop) | ||||
| +--ro numbered-link-hop | ||||
| +--ro link-tp-id te-tp-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--ro direction? te-link-direction | ||||
| +--:(unnumbered-link-hop) | ||||
| +--ro unnumbered-link-hop | ||||
| +--ro link-tp-id te-tp-id | ||||
| +--ro node-id te-node-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--ro direction? te-link-direction | ||||
| +--:(as-number) | ||||
| +--ro as-number-hop | ||||
| +--ro as-number inet:as-number | ||||
| +--ro hop-type? te-hop-type | ||||
| +--:(label) | ||||
| +--ro label-hop | ||||
| +--ro te-label | ||||
| +--ro (technology)? | ||||
| +--:(generic) | ||||
| +--ro generic? | ||||
| rt-types:generalized- |
label
| +--ro direction? | ||||
|---|---|---|---|---|
| te-label-direction | ||||
| +--ro backup-path* [index] | ||||
| +--ro index uint32 | ||||
| +--ro network-ref? | ||||
| -> /nw:networks/network/network-id | ||||
| +--ro path-element* [path-element-id] | ||||
| +--ro path-element-id uint32 | ||||
| +--ro (type)? | ||||
| +--:(numbered-node-hop) | ||||
| +--ro numbered-node-hop | ||||
| +--ro node-id te-node-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--:(numbered-link-hop) | ||||
| +--ro numbered-link-hop | ||||
| +--ro link-tp-id te-tp-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--ro direction? te-link-direction | ||||
| +--:(unnumbered-link-hop) | ||||
| +--ro unnumbered-link-hop | ||||
| +--ro link-tp-id te-tp-id | ||||
| +--ro node-id te-node-id | ||||
| +--ro hop-type? te-hop-type | ||||
| +--ro direction? te-link-direction | ||||
| +--:(as-number) | ||||
| +--ro as-number-hop | ||||
| +--ro as-number inet:as-number | ||||
| +--ro hop-type? te-hop-type | ||||
| +--:(label) | ||||
| +--ro label-hop | ||||
| +--ro te-label | ||||
| +--ro (technology)? | ||||
| +--:(generic) | ||||
| +--ro generic? | ||||
| rt-types:generalized- |
label
| +--ro direction? | |||||||
|---|---|---|---|---|---|---|---|
| te-label-direction | |||||||
| +--ro protection-type? identityref | |||||||
| +--ro tunnel-termination-points | |||||||
| +--ro source? binary | |||||||
| +--ro destination? binary | |||||||
| +--ro tunnels | |||||||
| +--ro sharing? boolean | |||||||
| +--ro tunnel* [tunnel-name] | |||||||
| +--ro tunnel-name string | |||||||
| +--ro sharing? boolean | |||||||
| +--ro path-constraints | |||||||
| +--ro te-bandwidth | |||||||
| +--ro (technology)? | |||||||
| +--:(generic) | |||||||
| +--ro generic? te-bandwidth | |||||||
| +--ro link-protection? identityref | |||||||
| +--ro setup-priority? uint8 | |||||||
| +--ro hold-priority? uint8 | |||||||
| +--ro signaling-type? identityref | |||||||
| +--ro path-metric-bounds | |||||||
| +--ro path-metric-bound* [metric-type] | |||||||
| +--ro metric-type identityref | |||||||
| +--ro upper-bound? uint64 | |||||||
| +--ro path-affinities-values | |||||||
| +--ro path-affinities-value* [usage] | |||||||
| +--ro usage identityref | |||||||
| +--ro value? admin-groups | |||||||
| +--ro path-affinity-names | |||||||
| +--ro path-affinity-name* [usage] | |||||||
| +--ro usage identityref | |||||||
| +--ro affinity-name* [name] | |||||||
| +--ro name string | |||||||
| +--ro path-srlgs-lists | |||||||
| +--ro path-srlgs-list* [usage] | |||||||
| +--ro usage identityref | |||||||
| +--ro values* srlg | |||||||
| +--ro path-srlgs-names | |||||||
| +--ro path-srlgs-name* [usage] | |||||||
| +--ro usage identityref | |||||||
| +--ro names* string | |||||||
| +--ro disjointness? te-path-disjointness | |||||||
| +--ro optimizations | |||||||
| +--ro (algorithm)? | |||||||
| +--:(metric) {path-optimization-metric}? | |||||||
| +--ro optimization-metric* [metric-type] | |||||||
| +--ro metric-type | |||||||
| identityref | |||||||
| +--ro weight? | |||||||
| uint8 | |||||||
| +--ro explicit-route-exclude-objects | |||||||
| +--ro route-object-exclude-object* | |||||||
| [index] | |||||||
| +--ro index | |||||||
| uint32 | |||||||
| +--ro (type)? | |||||||
| +--:(numbered-node-hop) | |||||||
| +--ro numbered-node-hop | |||||||
| +--ro node-id te-node-id | |||||||
| +--ro hop-type? te-hop-type | |||||||
| +--:(numbered-link-hop) | |||||||
| +--ro numbered-link-hop | |||||||
| +--ro link-tp-id te-tp-id | |||||||
| +--ro hop-type? | |||||||
| te-hop-type | |||||||
| +--ro direction? | |||||||
| te-link-direction | |||||||
| +--:(unnumbered-link-hop) | |||||||
| +--ro unnumbered-link-hop | |||||||
| +--ro link-tp-id te-tp-id | |||||||
| +--ro node-id | |||||||
| te-node-id | |||||||
| +--ro hop-type? | |||||||
| te-hop-type | |||||||
| +--ro direction? | |||||||
| te-link-direction | |||||||
| +--:(as-number) | |||||||
| +--ro as-number-hop | |||||||
| +--ro as-number | |||||||
| inet:as-number | |||||||
| +--ro hop-type? | |||||||
| te-hop-type | |||||||
| +--:(label) | |||||||
| +--ro label-hop | |||||||
| +--ro te-label | |||||||
| +--ro (technology)? | |||||||
| +--:(generic) | |||||||
| +--ro generic? | |||||||
| rt- |
types:generalized-label
| +--ro direction? | ||||||
|---|---|---|---|---|---|---|
| te-label-direction | ||||||
| +--:(srlg) | ||||||
| +--ro srlg | ||||||
| +--ro srlg? uint32 | ||||||
| +--ro explicit-route-include-objects | ||||||
| +--ro route-object-include-object* | ||||||
| [index] | ||||||
| +--ro index | ||||||
| uint32 |
okay the tree keeps going, bestie π³π
| | | | | +--ro (type)?
| | | | | +--:(numbered-node-hop)
| | | | | | +--ro numbered-node-hop
| | | | | | +--ro node-id te-node-id
| | | | | | +--ro hop-type? te-hop-type
| | | | | +--:(numbered-link-hop)
| | | | | | +--ro numbered-link-hop
| | | | | | +--ro link-tp-id te-tp-id
| | | | | | +--ro hop-type?
| | | | | | | te-hop-type
| | | | | | +--ro direction?
| | | | | | te-link-direction
| | | | | +--:(unnumbered-link-hop)
| | | | | | +--ro unnumbered-link-hop
| | | | | | +--ro link-tp-id te-tp-id
| | | | | | +--ro node-id
| | | | | | | te-node-id
| | | | | | +--ro hop-type?
| | | | | | | te-hop-type
| | | | | | +--ro direction?
| | | | | | te-link-direction
| | | | | +--:(as-number)
| | | | | | +--ro as-number-hop
| | | | | | +--ro as-number
| | | | | | | inet:as-number
| | | | | | +--ro hop-type?
| | | | | | te-hop-type
| | | | | +--:(label)
| | | | | +--ro label-hop
| | | | | +--ro te-label
| | | | | +--ro (technology)?
| | | | | | +--:(generic)
| | | | | | +--ro generic?
| | | | | | rt-
types:generalized-label
| | | | | +--ro direction?
| | | | | te-label-direction
| | | | +--ro tiebreakers
| | | | +--ro tiebreaker* [tiebreaker-type]
| | | | +--ro tiebreaker-type identityref
| | | +--:(objective-function)
| | | {path-optimization-objective-function}?
| | | +--ro objective-function
| | | +--ro objective-function-type? identityref
| | +--ro path-properties
| | | +--ro path-metric* [metric-type]
| | | | +--ro metric-type identityref
| | | | +--ro accumulative-value? uint64
| | | +--ro path-affinities-values
| | | | +--ro path-affinities-value* [usage]
| | | | +--ro usage identityref
| | | | +--ro value? admin-groups
| | | +--ro path-affinity-names
| | | | +--ro path-affinity-name* [usage]
| | | | +--ro usage identityref
| | | | +--ro affinity-name* [name]
| | | | +--ro name string
| | | +--ro path-srlgs-lists
| | | | +--ro path-srlgs-list* [usage]
| | | | +--ro usage identityref
| | | | +--ro values* srlg
| | | +--ro path-srlgs-names
| | | | +--ro path-srlgs-name* [usage]
| | | | +--ro usage identityref
| | | | +--ro names* string
| | | +--ro path-route-objects
| | | +--ro path-route-object* [index]
| | | +--ro index uint32
| | | +--ro (type)?
| | | +--:(numbered-node-hop)
| | | | +--ro numbered-node-hop
| | | | +--ro node-id te-node-id
| | | | +--ro hop-type? te-hop-type
| | | +--:(numbered-link-hop)
| | | | +--ro numbered-link-hop
| | | | +--ro link-tp-id te-tp-id
| | | | +--ro hop-type? te-hop-type
| | | | +--ro direction? te-link-direction
| | | +--:(unnumbered-link-hop)
| | | | +--ro unnumbered-link-hop
| | | | +--ro link-tp-id te-tp-id
| | | | +--ro node-id te-node-id
| | | | +--ro hop-type? te-hop-type
| | | | +--ro direction? te-link-direction
| | | +--:(as-number)
| | | | +--ro as-number-hop
| | | | +--ro as-number inet:as-number
| | | | +--ro hop-type? te-hop-type
| | | +--:(label)
| | | +--ro label-hop
| | | +--ro te-label
| | | +--ro (technology)?
| | | | +--:(generic)
| | | | +--ro generic?
| | | | rt-types:generalized-
label
| | | +--ro direction?
| | | te-label-direction
| | +--ro connectivity-matrix* [id]
| | +--ro id uint32
| | +--ro from
| | | +--ro tp-ref? leafref
| | | +--ro label-restrictions
| | | +--ro label-restriction* [index]
| | | +--ro restriction? enumeration
| | | +--ro index uint32
| | | +--ro label-start
| | | | +--ro te-label
| | | | +--ro (technology)?
| | | | | +--:(generic)
| | | | | +--ro generic?
| | | | | rt-types:generalized-
label
| | | | +--ro direction?
| | | | te-label-direction
| | | +--ro label-end
| | | | +--ro te-label
| | | | +--ro (technology)?
| | | | | +--:(generic)
| | | | | +--ro generic?
| | | | | rt-types:generalized-
label
| | | | +--ro direction?
| | | | te-label-direction
| | | +--ro label-step
| | | | +--ro (technology)?
| | | | +--:(generic)
| | | | +--ro generic? int32
| | | +--ro range-bitmap? yang:hex-string
| | +--ro to
| | | +--ro tp-ref? leafref
| | | +--ro label-restrictions
| | | +--ro label-restriction* [index]
| | | +--ro restriction? enumeration
| | | +--ro index uint32
| | | +--ro label-start
| | | | +--ro te-label
| | | | +--ro (technology)?
| | | | | +--:(generic)
| | | | | +--ro generic?
| | | | | rt-types:generalized-
label
| | | | +--ro direction?
| | | | te-label-direction
| | | +--ro label-end
| | | | +--ro te-label
| | | | +--ro (technology)?
| | | | | +--:(generic)
| | | | | +--ro generic?
| | | | | rt-types:generalized-
label
| | | | +--ro direction?
| | | | te-label-direction
| | | +--ro label-step
| | | | +--ro (technology)?
| | | | +--:(generic)
| | | | +--ro generic? int32
| | | +--ro range-bitmap? yang:hex-string
| | +--ro is-allowed? boolean
| | +--ro underlay {te-topology-hierarchy}?
| | | +--ro enabled? boolean
| | | +--ro primary-path
| | | | +--ro network-ref?
| | | | | -> /nw:networks/network/network-id
| | | | +--ro path-element* [path-element-id]
| | | | +--ro path-element-id uint32
| | | | +--ro (type)?
| | | | +--:(numbered-node-hop)
| | | | | +--ro numbered-node-hop
| | | | | +--ro node-id te-node-id
| | | | | +--ro hop-type? te-hop-type
| | | | +--:(numbered-link-hop)
| | | | | +--ro numbered-link-hop
| | | | | +--ro link-tp-id te-tp-id
| | | | | +--ro hop-type? te-hop-type
| | | | | +--ro direction?
| | | | | te-link-direction
| | | | +--:(unnumbered-link-hop)
| | | | | +--ro unnumbered-link-hop
| | | | | +--ro link-tp-id te-tp-id
| | | | | +--ro node-id te-node-id
| | | | | +--ro hop-type? te-hop-type
| | | | | +--ro direction?
| | | | | te-link-direction
| | | | +--:(as-number)
| | | | | +--ro as-number-hop
| | | | | +--ro as-number inet:as-number
| | | | | +--ro hop-type? te-hop-type
| | | | +--:(label)
| | | | +--ro label-hop
| | | | +--ro te-label
| | | | +--ro (technology)?
| | | | | +--:(generic)
| | | | | +--ro generic?
| | | | | rt-
types:generalized-label
| | | | +--ro direction?
| | | | te-label-direction
| | | +--ro backup-path* [index]
| | | | +--ro index uint32
| | | | +--ro network-ref?
| | | | | -> /nw:networks/network/network-id
| | | | +--ro path-element* [path-element-id]
| | | | +--ro path-element-id uint32
| | | | +--ro (type)?
| | | | +--:(numbered-node-hop)
| | | | | +--ro numbered-node-hop
| | | | | +--ro node-id te-node-id
| | | | | +--ro hop-type? te-hop-type
| | | | +--:(numbered-link-hop)
| | | | | +--ro numbered-link-hop
| | | | | +--ro link-tp-id te-tp-id
| | | | | +--ro hop-type? te-hop-type
| | | | | +--ro direction?
| | | | | te-link-direction
okay the tree keeps branching and it's giving main character energy π³β¨
| | | | +--:(unnumbered-link-hop)
| | | | | +--ro unnumbered-link-hop
| | | | | +--ro link-tp-id te-tp-id
| | | | | +--ro node-id te-node-id
| | | | | +--ro hop-type? te-hop-type
| | | | | +--ro direction?
| | | | | te-link-direction
| | | | +--:(as-number)
| | | | | +--ro as-number-hop
| | | | | +--ro as-number inet:as-number
| | | | | +--ro hop-type? te-hop-type
| | | | +--:(label)
| | | | +--ro label-hop
| | | | +--ro te-label
| | | | +--ro (technology)?
| | | | | +--:(generic)
| | | | | +--ro generic?
| | | | | rt-
types:generalized-label
| | | | +--ro direction?
| | | | te-label-direction
| | | +--ro protection-type? identityref
| | | +--ro tunnel-termination-points
| | | | +--ro source? binary
| | | | +--ro destination? binary
| | | +--ro tunnels
| | | +--ro sharing? boolean
| | | +--ro tunnel* [tunnel-name]
| | | +--ro tunnel-name string
| | | +--ro sharing? boolean
| | +--ro path-constraints
| | | +--ro te-bandwidth
| | | | +--ro (technology)?
| | | | +--:(generic)
| | | | +--ro generic? te-bandwidth
| | | +--ro link-protection? identityref
| | | +--ro setup-priority? uint8
| | | +--ro hold-priority? uint8
| | | +--ro signaling-type? identityref
| | | +--ro path-metric-bounds
| | | | +--ro path-metric-bound* [metric-type]
| | | | +--ro metric-type identityref
| | | | +--ro upper-bound? uint64
| | | +--ro path-affinities-values
| | | | +--ro path-affinities-value* [usage]
| | | | +--ro usage identityref
| | | | +--ro value? admin-groups
| | | +--ro path-affinity-names
| | | | +--ro path-affinity-name* [usage]
| | | | +--ro usage identityref
| | | | +--ro affinity-name* [name]
| | | | +--ro name string
| | | +--ro path-srlgs-lists
| | | | +--ro path-srlgs-list* [usage]
| | | | +--ro usage identityref
| | | | +--ro values* srlg
| | | +--ro path-srlgs-names
| | | | +--ro path-srlgs-name* [usage]
| | | | +--ro usage identityref
| | | | +--ro names* string
| | | +--ro disjointness?
| | | te-path-disjointness
| | +--ro optimizations
| | | +--ro (algorithm)?
| | | +--:(metric) {path-optimization-metric}?
| | | | +--ro optimization-metric* [metric-type]
| | | | | +--ro metric-type
| | | | | | identityref
| | | | | +--ro weight?
| | | | | | uint8
| | | | | +--ro explicit-route-exclude-objects
| | | | | | +--ro route-object-exclude-object*
| | | | | | [index]
| | | | | | +--ro index
| | | | | | | uint32
| | | | | | +--ro (type)?
| | | | | | +--:(numbered-node-hop)
| | | | | | | +--ro numbered-node-hop
| | | | | | | +--ro node-id
| | | | | | | | te-node-id
| | | | | | | +--ro hop-type?
| | | | | | | te-hop-type
| | | | | | +--:(numbered-link-hop)
| | | | | | | +--ro numbered-link-hop
| | | | | | | +--ro link-tp-id
| | | | | | | | te-tp-id
| | | | | | | +--ro hop-type?
| | | | | | | | te-hop-type
| | | | | | | +--ro direction?
| | | | | | | te-link-direction
| | | | | | +--:(unnumbered-link-hop)
| | | | | | | +--ro unnumbered-link-hop
| | | | | | | +--ro link-tp-id
| | | | | | | | te-tp-id
| | | | | | | +--ro node-id
| | | | | | | | te-node-id
| | | | | | | +--ro hop-type?
| | | | | | | | te-hop-type
| | | | | | | +--ro direction?
| | | | | | | te-link-direction
| | | | | | +--:(as-number)
| | | | | | | +--ro as-number-hop
| | | | | | | +--ro as-number
| | | | | | | | inet:as-number
| | | | | | | +--ro hop-type?
| | | | | | | te-hop-type
| | | | | | +--:(label)
| | | | | | | +--ro label-hop
| | | | | | | +--ro te-label
| | | | | | | +--ro (technology)?
| | | | | | | | +--:(generic)
| | | | | | | | +--ro generic?
| | | | | | | | rt-
types:generalized-label
| | | | | | | +--ro direction?
| | | | | | | te-label-
direction
| | | | | | +--:(srlg)
| | | | | | +--ro srlg
| | | | | | +--ro srlg? uint32
| | | | | +--ro explicit-route-include-objects
| | | | | +--ro route-object-include-object*
| | | | | [index]
| | | | | +--ro index
| | | | | | uint32
| | | | | +--ro (type)?
| | | | | +--:(numbered-node-hop)
| | | | | | +--ro numbered-node-hop
| | | | | | +--ro node-id
| | | | | | | te-node-id
| | | | | | +--ro hop-type?
| | | | | | te-hop-type
| | | | | +--:(numbered-link-hop)
| | | | | | +--ro numbered-link-hop
| | | | | | +--ro link-tp-id
| | | | | | | te-tp-id
| | | | | | +--ro hop-type?
| | | | | | | te-hop-type
| | | | | | +--ro direction?
| | | | | | te-link-direction
| | | | | +--:(unnumbered-link-hop)
| | | | | | +--ro unnumbered-link-hop
| | | | | | +--ro link-tp-id
| | | | | | | te-tp-id
| | | | | | +--ro node-id
| | | | | | | te-node-id
| | | | | | +--ro hop-type?
| | | | | | | te-hop-type
| | | | | | +--ro direction?
| | | | | | te-link-direction
| | | | | +--:(as-number)
| | | | | | +--ro as-number-hop
| | | | | | +--ro as-number
| | | | | | | inet:as-number
| | | | | | +--ro hop-type?
| | | | | | te-hop-type
| | | | | +--:(label)
| | | | | +--ro label-hop
| | | | | +--ro te-label
| | | | | +--ro (technology)?
| | | | | | +--:(generic)
| | | | | | +--ro generic?
| | | | | | rt-
types:generalized-label
| | | | | +--ro direction?
| | | | | te-label-
direction
| | | | +--ro tiebreakers
| | | | +--ro tiebreaker* [tiebreaker-type]
| | | | +--ro tiebreaker-type identityref
| | | +--:(objective-function)
| | | {path-optimization-objective-
function}?
| | | +--ro objective-function
| | | +--ro objective-function-type?
| | | identityref
| | +--ro path-properties
| | +--ro path-metric* [metric-type]
| | | +--ro metric-type identityref
| | | +--ro accumulative-value? uint64
| | +--ro path-affinities-values
| | | +--ro path-affinities-value* [usage]
| | | +--ro usage identityref
| | | +--ro value? admin-groups
| | +--ro path-affinity-names
| | | +--ro path-affinity-name* [usage]
| | | +--ro usage identityref
| | | +--ro affinity-name* [name]
| | | +--ro name string
| | +--ro path-srlgs-lists
| | | +--ro path-srlgs-list* [usage]
| | | +--ro usage identityref
| | | +--ro values* srlg
| | +--ro path-srlgs-names
| | | +--ro path-srlgs-name* [usage]
| | | +--ro usage identityref
| | | +--ro names* string
| | +--ro path-route-objects
| | +--ro path-route-object* [index]
| | +--ro index uint32
| | +--ro (type)?
| | +--:(numbered-node-hop)
| | | +--ro numbered-node-hop
| | | +--ro node-id te-node-id
| | | +--ro hop-type? te-hop-type
| | +--:(numbered-link-hop)
| | | +--ro numbered-link-hop
that's the tree for part 24, bestie π keep your eyes peeled for the next chunk π¦
| +--ro link-tp-id te-tp-id | ||
|---|---|---|
| +--ro hop-type? te-hop-type | ||
| +--ro direction? | ||
| te-link-direction | ||
| +--:(unnumbered-link-hop) | ||
| +--ro unnumbered-link-hop | ||
| +--ro link-tp-id te-tp-id | ||
| +--ro node-id te-node-id | ||
| +--ro hop-type? te-hop-type | ||
| +--ro direction? | ||
| te-link-direction | ||
| +--:(as-number) | ||
| +--ro as-number-hop | ||
| +--ro as-number inet:as-number | ||
| +--ro hop-type? te-hop-type | ||
| +--:(label) | ||
| +--ro label-hop | ||
| +--ro te-label | ||
| +--ro (technology)? | ||
| +--:(generic) | ||
| +--ro generic? | ||
| rt- |
types:generalized-label
| +--ro direction? | |
|---|---|
| te-label-direction | |
| +--ro domain-id? uint32 | |
| +--ro is-abstract? empty | |
| +--ro name? string | |
| +--ro signaling-address* inet:ip-address | |
| +--ro underlay-topology {te-topology-hierarchy}? | |
| +--ro network-ref? -> /nw:networks/network/network-id |
+--ro statistics
| +--ro discontinuity-time? yang:date-and-time | |
|---|---|
| +--ro node | |
| +--ro disables? yang:counter32 | |
| +--ro enables? yang:counter32 | |
| +--ro maintenance-sets? yang:counter32 | |
| +--ro maintenance-clears? yang:counter32 | |
| +--ro modifies? yang:counter32 | |
| +--ro connectivity-matrix-entry | |
| +--ro creates? yang:counter32 | |
| +--ro deletes? yang:counter32 | |
| +--ro disables? yang:counter32 | |
| +--ro enables? yang:counter32 | |
| +--ro modifies? yang:counter32 |
+--rw tunnel-termination-point* [tunnel-tp-id] +--rw tunnel-tp-id binary +--rw admin-status?
| te-types:te-admin-status |
+--rw name? string +--rw switching-capability? identityref +--rw encoding? identityref +--rw inter-layer-lock-id* uint32 +--rw protection-type? identityref +--rw client-layer-adaptation
| +--rw switching-capability* |
|---|
| [switching-capability encoding] |
| +--rw switching-capability identityref |
| +--rw encoding identityref |
| +--rw te-bandwidth |
| +--rw (technology)? |
| +--:(generic) |
| +--rw generic? te-bandwidth |
+--rw local-link-connectivities
| +--rw number-of-entries? uint16 | |||
|---|---|---|---|
| +--rw label-restrictions | |||
| +--rw label-restriction* [index] | |||
| +--rw restriction? enumeration | |||
| +--rw index uint32 | |||
| +--rw label-start | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized-label | |||
| +--rw direction? te-label-direction | |||
| +--rw label-end | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized-label | |||
| +--rw direction? te-label-direction | |||
| +--rw label-step | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? int32 | |||
| +--rw range-bitmap? yang:hex-string | |||
| +--rw is-allowed? boolean | |||
| +--rw underlay {te-topology-hierarchy}? | |||
| +--rw enabled? boolean | |||
| +--rw primary-path | |||
| +--rw network-ref? | |||
| -> /nw:networks/network/network-id | |||
| +--rw path-element* [path-element-id] | |||
| +--rw path-element-id uint32 | |||
| +--rw (type)? | |||
| +--:(numbered-node-hop) | |||
| +--rw numbered-node-hop | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--:(numbered-link-hop) | |||
| +--rw numbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(unnumbered-link-hop) | |||
| +--rw unnumbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(as-number) | |||
| +--rw as-number-hop | |||
| +--rw as-number inet:as-number | |||
| +--rw hop-type? te-hop-type | |||
| +--:(label) | |||
| +--rw label-hop | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized- |
label
| +--rw direction? | |||
|---|---|---|---|
| te-label-direction | |||
| +--rw backup-path* [index] | |||
| +--rw index uint32 | |||
| +--rw network-ref? | |||
| -> /nw:networks/network/network-id | |||
| +--rw path-element* [path-element-id] | |||
| +--rw path-element-id uint32 | |||
| +--rw (type)? | |||
| +--:(numbered-node-hop) | |||
| +--rw numbered-node-hop | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--:(numbered-link-hop) | |||
| +--rw numbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(unnumbered-link-hop) | |||
| +--rw unnumbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(as-number) | |||
| +--rw as-number-hop | |||
| +--rw as-number inet:as-number | |||
| +--rw hop-type? te-hop-type | |||
| +--:(label) | |||
| +--rw label-hop | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized- |
label
| +--rw direction? | |||||
|---|---|---|---|---|---|
| te-label-direction | |||||
| +--rw protection-type? identityref | |||||
| +--rw tunnel-termination-points | |||||
| +--rw source? binary | |||||
| +--rw destination? binary | |||||
| +--rw tunnels | |||||
| +--rw sharing? boolean | |||||
| +--rw tunnel* [tunnel-name] | |||||
| +--rw tunnel-name string | |||||
| +--rw sharing? boolean | |||||
| +--rw path-constraints | |||||
| +--rw te-bandwidth | |||||
| +--rw (technology)? | |||||
| +--:(generic) | |||||
| +--rw generic? te-bandwidth | |||||
| +--rw link-protection? identityref | |||||
| +--rw setup-priority? uint8 | |||||
| +--rw hold-priority? uint8 | |||||
| +--rw signaling-type? identityref | |||||
| +--rw path-metric-bounds | |||||
| +--rw path-metric-bound* [metric-type] | |||||
| +--rw metric-type identityref | |||||
| +--rw upper-bound? uint64 | |||||
| +--rw path-affinities-values | |||||
| +--rw path-affinities-value* [usage] | |||||
| +--rw usage identityref | |||||
| +--rw value? admin-groups | |||||
| +--rw path-affinity-names | |||||
| +--rw path-affinity-name* [usage] | |||||
| +--rw usage identityref | |||||
| +--rw affinity-name* [name] | |||||
| +--rw name string | |||||
| +--rw path-srlgs-lists | |||||
| +--rw path-srlgs-list* [usage] | |||||
| +--rw usage identityref | |||||
| +--rw values* srlg | |||||
| +--rw path-srlgs-names | |||||
| +--rw path-srlgs-name* [usage] | |||||
| +--rw usage identityref | |||||
| +--rw names* string | |||||
| +--rw disjointness? te-path-disjointness | |||||
| +--rw optimizations | |||||
| +--rw (algorithm)? | |||||
| +--:(metric) {path-optimization-metric}? | |||||
| +--rw optimization-metric* [metric-type] | |||||
| +--rw metric-type | |||||
| identityref | |||||
| +--rw weight? | |||||
| uint8 | |||||
| +--rw explicit-route-exclude-objects | |||||
| +--rw route-object-exclude-object* | |||||
| [index] | |||||
| +--rw index | |||||
| uint32 | |||||
| +--rw (type)? | |||||
| +--:(numbered-node-hop) | |||||
| +--rw numbered-node-hop | |||||
| +--rw node-id te-node-id | |||||
| +--rw hop-type? te-hop-type |
okay this tree is giving main character energy πΈβ¨
| | | | | +--:(numbered-link-hop)
| | | | | | +--rw numbered-link-hop
| | | | | | +--rw link-tp-id te-tp-id
| | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--rw direction?
| | | | | | te-link-direction
| | | | | +--:(unnumbered-link-hop)
| | | | | | +--rw unnumbered-link-hop
| | | | | | +--rw link-tp-id te-tp-id
| | | | | | +--rw node-id
| | | | | | | te-node-id
| | | | | | +--rw hop-type?
| | | | | | | te-hop-type
| | | | | | +--rw direction?
| | | | | | te-link-direction
| | | | | +--:(as-number)
| | | | | | +--rw as-number-hop
| | | | | | +--rw as-number
| | | | | | | inet:as-number
| | | | | | +--rw hop-type?
| | | | | | te-hop-type
| | | | | +--:(label)
| | | | | | +--rw label-hop
| | | | | | +--rw te-label
| | | | | | +--rw (technology)?
| | | | | | | +--:(generic)
| | | | | | | +--rw generic?
| | | | | | | rt-
types:generalized-label
| | | | | | +--rw direction?
| | | | | | te-label-direction
| | | | | +--:(srlg)
| | | | | +--rw srlg
| | | | | +--rw srlg? uint32
| | | | +--rw explicit-route-include-objects
| | | | +--rw route-object-include-object*
| | | | [index]
| | | | +--rw index
| | | | | uint32
| | | | +--rw (type)?
| | | | +--:(numbered-node-hop)
| | | | | +--rw numbered-node-hop
| | | | | +--rw node-id te-node-id
| | | | | +--rw hop-type? te-hop-type
| | | | +--:(numbered-link-hop)
| | | | | +--rw numbered-link-hop
| | | | | +--rw link-tp-id te-tp-id
| | | | | +--rw hop-type?
| | | | | | te-hop-type
| | | | | +--rw direction?
| | | | | te-link-direction
| | | | +--:(unnumbered-link-hop)
| | | | | +--rw unnumbered-link-hop
| | | | | +--rw link-tp-id te-tp-id
| | | | | +--rw node-id
| | | | | | te-node-id
| | | | | +--rw hop-type?
| | | | | | te-hop-type
| | | | | +--rw direction?
| | | | | te-link-direction
| | | | +--:(as-number)
| | | | | +--rw as-number-hop
| | | | | +--rw as-number
| | | | | | inet:as-number
| | | | | +--rw hop-type?
| | | | | te-hop-type
| | | | +--:(label)
| | | | +--rw label-hop
| | | | +--rw te-label
| | | | +--rw (technology)?
| | | | | +--:(generic)
| | | | | +--rw generic?
| | | | | rt-
types:generalized-label
| | | | +--rw direction?
| | | | te-label-direction
| | | +--rw tiebreakers
| | | +--rw tiebreaker* [tiebreaker-type]
| | | +--rw tiebreaker-type identityref
| | +--:(objective-function)
| | {path-optimization-objective-function}?
| | +--rw objective-function
| | +--rw objective-function-type? identityref
| +--ro path-properties
| | +--ro path-metric* [metric-type]
| | | +--ro metric-type identityref
| | | +--ro accumulative-value? uint64
| | +--ro path-affinities-values
| | | +--ro path-affinities-value* [usage]
| | | +--ro usage identityref
| | | +--ro value? admin-groups
| | +--ro path-affinity-names
| | | +--ro path-affinity-name* [usage]
| | | +--ro usage identityref
| | | +--ro affinity-name* [name]
| | | +--ro name string
| | +--ro path-srlgs-lists
| | | +--ro path-srlgs-list* [usage]
| | | +--ro usage identityref
| | | +--ro values* srlg
| | +--ro path-srlgs-names
| | | +--ro path-srlgs-name* [usage]
| | | +--ro usage identityref
| | | +--ro names* string
| | +--ro path-route-objects
| | +--ro path-route-object* [index]
| | +--ro index uint32
| | +--ro (type)?
| | +--:(numbered-node-hop)
| | | +--ro numbered-node-hop
| | | +--ro node-id te-node-id
| | | +--ro hop-type? te-hop-type
| | +--:(numbered-link-hop)
| | | +--ro numbered-link-hop
| | | +--ro link-tp-id te-tp-id
| | | +--ro hop-type? te-hop-type
| | | +--ro direction? te-link-direction
| | +--:(unnumbered-link-hop)
| | | +--ro unnumbered-link-hop
| | | +--ro link-tp-id te-tp-id
| | | +--ro node-id te-node-id
| | | +--ro hop-type? te-hop-type
| | | +--ro direction? te-link-direction
| | +--:(as-number)
| | | +--ro as-number-hop
| | | +--ro as-number inet:as-number
| | | +--ro hop-type? te-hop-type
| | +--:(label)
| | +--ro label-hop
| | +--ro te-label
| | +--ro (technology)?
| | | +--:(generic)
| | | +--ro generic?
| | | rt-types:generalized-
label
| | +--ro direction?
| | te-label-direction
| +--rw local-link-connectivity* [link-tp-ref]
| +--rw link-tp-ref
| | -> ../../../../../nt:termination-point/tp-id
| +--rw label-restrictions
| | +--rw label-restriction* [index]
| | +--rw restriction? enumeration
| | +--rw index uint32
| | +--rw label-start
| | | +--rw te-label
| | | +--rw (technology)?
| | | | +--:(generic)
| | | | +--rw generic?
| | | | rt-types:generalized-label
| | | +--rw direction? te-label-direction
| | +--rw label-end
| | | +--rw te-label
| | | +--rw (technology)?
| | | | +--:(generic)
| | | | +--rw generic?
| | | | rt-types:generalized-label
| | | +--rw direction? te-label-direction
| | +--rw label-step
| | | +--rw (technology)?
| | | +--:(generic)
| | | +--rw generic? int32
| | +--rw range-bitmap? yang:hex-string
| +--rw is-allowed? boolean
| +--rw underlay {te-topology-hierarchy}?
| | +--rw enabled? boolean
| | +--rw primary-path
| | | +--rw network-ref?
| | | | -> /nw:networks/network/network-id
| | | +--rw path-element* [path-element-id]
| | | +--rw path-element-id uint32
| | | +--rw (type)?
| | | +--:(numbered-node-hop)
| | | | +--rw numbered-node-hop
| | | | +--rw node-id te-node-id
| | | | +--rw hop-type? te-hop-type
| | | +--:(numbered-link-hop)
| | | | +--rw numbered-link-hop
| | | | +--rw link-tp-id te-tp-id
| | | | +--rw hop-type? te-hop-type
| | | | +--rw direction?
| | | | te-link-direction
| | | +--:(unnumbered-link-hop)
| | | | +--rw unnumbered-link-hop
| | | | +--rw link-tp-id te-tp-id
| | | | +--rw node-id te-node-id
| | | | +--rw hop-type? te-hop-type
| | | | +--rw direction?
| | | | te-link-direction
| | | +--:(as-number)
| | | | +--rw as-number-hop
| | | | +--rw as-number inet:as-number
| | | | +--rw hop-type? te-hop-type
| | | +--:(label)
| | | +--rw label-hop
| | | +--rw te-label
| | | +--rw (technology)?
| | | | +--:(generic)
| | | | +--rw generic?
| | | | rt-
types:generalized-label
| | | +--rw direction?
| | | te-label-direction
| | +--rw backup-path* [index]
| | | +--rw index uint32
| | | +--rw network-ref?
| | | | -> /nw:networks/network/network-id
| +--rw path-element* [path-element-id] | |||
|---|---|---|---|
| +--rw path-element-id uint32 | |||
| +--rw (type)? | |||
| +--:(numbered-node-hop) | |||
| +--rw numbered-node-hop | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--:(numbered-link-hop) | |||
| +--rw numbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? | |||
| te-link-direction | |||
| +--:(unnumbered-link-hop) | |||
| +--rw unnumbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? | |||
| te-link-direction | |||
| +--:(as-number) | |||
| +--rw as-number-hop | |||
| +--rw as-number inet:as-number | |||
| +--rw hop-type? te-hop-type | |||
| +--:(label) | |||
| +--rw label-hop | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt- |
types:generalized-label
| +--rw direction? | ||||||
|---|---|---|---|---|---|---|
| te-label-direction | ||||||
| +--rw protection-type? identityref | ||||||
| +--rw tunnel-termination-points | ||||||
| +--rw source? binary | ||||||
| +--rw destination? binary | ||||||
| +--rw tunnels | ||||||
| +--rw sharing? boolean | ||||||
| +--rw tunnel* [tunnel-name] | ||||||
| +--rw tunnel-name string | ||||||
| +--rw sharing? boolean | ||||||
| +--rw path-constraints | ||||||
| +--rw te-bandwidth | ||||||
| +--rw (technology)? | ||||||
| +--:(generic) | ||||||
| +--rw generic? te-bandwidth | ||||||
| +--rw link-protection? identityref | ||||||
| +--rw setup-priority? uint8 | ||||||
| +--rw hold-priority? uint8 | ||||||
| +--rw signaling-type? identityref | ||||||
| +--rw path-metric-bounds | ||||||
| +--rw path-metric-bound* [metric-type] | ||||||
| +--rw metric-type identityref | ||||||
| +--rw upper-bound? uint64 | ||||||
| +--rw path-affinities-values | ||||||
| +--rw path-affinities-value* [usage] | ||||||
| +--rw usage identityref | ||||||
| +--rw value? admin-groups | ||||||
| +--rw path-affinity-names | ||||||
| +--rw path-affinity-name* [usage] | ||||||
| +--rw usage identityref | ||||||
| +--rw affinity-name* [name] | ||||||
| +--rw name string | ||||||
| +--rw path-srlgs-lists | ||||||
| +--rw path-srlgs-list* [usage] | ||||||
| +--rw usage identityref | ||||||
| +--rw values* srlg | ||||||
| +--rw path-srlgs-names | ||||||
| +--rw path-srlgs-name* [usage] | ||||||
| +--rw usage identityref | ||||||
| +--rw names* string | ||||||
| +--rw disjointness? | ||||||
| te-path-disjointness | ||||||
| +--rw optimizations | ||||||
| +--rw (algorithm)? | ||||||
| +--:(metric) {path-optimization-metric}? | ||||||
| +--rw optimization-metric* [metric-type] | ||||||
| +--rw metric-type | ||||||
| identityref | ||||||
| +--rw weight? | ||||||
| uint8 | ||||||
| +--rw explicit-route-exclude-objects | ||||||
| +--rw route-object-exclude-object* | ||||||
| [index] | ||||||
| +--rw index | ||||||
| uint32 | ||||||
| +--rw (type)? | ||||||
| +--:(numbered-node-hop) | ||||||
| +--rw numbered-node-hop | ||||||
| +--rw node-id | ||||||
| te-node-id | ||||||
| +--rw hop-type? | ||||||
| te-hop-type | ||||||
| +--:(numbered-link-hop) | ||||||
| +--rw numbered-link-hop | ||||||
| +--rw link-tp-id | ||||||
| te-tp-id | ||||||
| +--rw hop-type? | ||||||
| te-hop-type | ||||||
| +--rw direction? | ||||||
| te-link-direction | ||||||
| +--:(unnumbered-link-hop) | ||||||
| +--rw unnumbered-link-hop | ||||||
| +--rw link-tp-id | ||||||
| te-tp-id | ||||||
| +--rw node-id | ||||||
| te-node-id | ||||||
| +--rw hop-type? | ||||||
| te-hop-type | ||||||
| +--rw direction? | ||||||
| te-link-direction | ||||||
| +--:(as-number) | ||||||
| +--rw as-number-hop | ||||||
| +--rw as-number | ||||||
| inet:as-number | ||||||
| +--rw hop-type? | ||||||
| te-hop-type | ||||||
| +--:(label) | ||||||
| +--rw label-hop | ||||||
| +--rw te-label | ||||||
| +--rw (technology)? | ||||||
| +--:(generic) | ||||||
| +--rw generic? | ||||||
| rt- |
types:generalized-label
| +--rw direction? | |||||
|---|---|---|---|---|---|
| te-label- |
direction
| +--:(srlg) | |||||
|---|---|---|---|---|---|
| +--rw srlg | |||||
| +--rw srlg? uint32 | |||||
| +--rw explicit-route-include-objects | |||||
| +--rw route-object-include-object* | |||||
| [index] | |||||
| +--rw index | |||||
| uint32 | |||||
| +--rw (type)? | |||||
| +--:(numbered-node-hop) | |||||
| +--rw numbered-node-hop | |||||
| +--rw node-id | |||||
| te-node-id | |||||
| +--rw hop-type? | |||||
| te-hop-type | |||||
| +--:(numbered-link-hop) | |||||
| +--rw numbered-link-hop | |||||
| +--rw link-tp-id | |||||
| te-tp-id | |||||
| +--rw hop-type? | |||||
| te-hop-type | |||||
| +--rw direction? | |||||
| te-link-direction | |||||
| +--:(unnumbered-link-hop) | |||||
| +--rw unnumbered-link-hop | |||||
| +--rw link-tp-id | |||||
| te-tp-id | |||||
| +--rw node-id | |||||
| te-node-id | |||||
| +--rw hop-type? | |||||
| te-hop-type | |||||
| +--rw direction? | |||||
| te-link-direction | |||||
| +--:(as-number) | |||||
| +--rw as-number-hop | |||||
| +--rw as-number | |||||
| inet:as-number | |||||
| +--rw hop-type? | |||||
| te-hop-type | |||||
| +--:(label) | |||||
| +--rw label-hop | |||||
| +--rw te-label | |||||
| +--rw (technology)? | |||||
| +--:(generic) | |||||
| +--rw generic? | |||||
| rt- |
types:generalized-label
| +--rw direction? | |||
|---|---|---|---|
| te-label- |
direction
| +--rw tiebreakers | ||
|---|---|---|
| +--rw tiebreaker* [tiebreaker-type] | ||
| +--rw tiebreaker-type identityref | ||
| +--:(objective-function) | ||
| {path-optimization-objective- |
function}?
| +--rw objective-function | |
|---|---|
| +--rw objective-function-type? | |
| identityref | |
| +--ro path-properties | |
| +--ro path-metric* [metric-type] | |
| +--ro metric-type identityref | |
| +--ro accumulative-value? uint64 | |
| +--ro path-affinities-values | |
| +--ro path-affinities-value* [usage] | |
| +--ro usage identityref | |
| +--ro value? admin-groups | |
| +--ro path-affinity-names | |
| +--ro path-affinity-name* [usage] | |
| +--ro usage identityref | |
| +--ro affinity-name* [name] | |
| +--ro name string | |
| +--ro path-srlgs-lists | |
| +--ro path-srlgs-list* [usage] | |
| +--ro usage identityref | |
| +--ro values* srlg | |
| +--ro path-srlgs-names |
| +--ro path-srlgs-name* [usage] | |
|---|---|
| +--ro usage identityref | |
| +--ro names* string | |
| +--ro path-route-objects | |
| +--ro path-route-object* [index] | |
| +--ro index uint32 | |
| +--ro (type)? | |
| +--:(numbered-node-hop) | |
| +--ro numbered-node-hop | |
| +--ro node-id te-node-id | |
| +--ro hop-type? te-hop-type | |
| +--:(numbered-link-hop) | |
| +--ro numbered-link-hop | |
| +--ro link-tp-id te-tp-id | |
| +--ro hop-type? te-hop-type | |
| +--ro direction? | |
| te-link-direction | |
| +--:(unnumbered-link-hop) | |
| +--ro unnumbered-link-hop | |
| +--ro link-tp-id te-tp-id | |
| +--ro node-id te-node-id | |
| +--ro hop-type? te-hop-type | |
| +--ro direction? | |
| te-link-direction | |
| +--:(as-number) | |
| +--ro as-number-hop | |
| +--ro as-number inet:as-number | |
| +--ro hop-type? te-hop-type | |
| +--:(label) | |
| +--ro label-hop | |
| +--ro te-label | |
| +--ro (technology)? | |
| +--:(generic) | |
| +--ro generic? | |
| rt- |
types:generalized-label
| +--ro direction? |
|---|
| te-label-direction |
+--ro oper-status?
| te-types:te-oper-status |
+--ro geolocation
| +--ro altitude? int64 |
|---|
| +--ro latitude? geographic-coordinate-degree |
| +--ro longitude? geographic-coordinate-degree |
+--ro statistics
| +--ro discontinuity-time? yang:date-and-time | |
|---|---|
| +--ro tunnel-termination-point | |
| +--ro disables? yang:counter32 | |
| +--ro enables? yang:counter32 | |
| +--ro maintenance-clears? yang:counter32 | |
| +--ro maintenance-sets? yang:counter32 | |
| +--ro modifies? yang:counter32 | |
| +--ro downs? yang:counter32 | |
| +--ro ups? yang:counter32 | |
| +--ro in-service-clears? yang:counter32 | |
| +--ro in-service-sets? yang:counter32 | |
| +--ro local-link-connectivity | |
| +--ro creates? yang:counter32 | |
| +--ro deletes? yang:counter32 | |
| +--ro disables? yang:counter32 | |
| +--ro enables? yang:counter32 | |
| +--ro modifies? yang:counter32 |
+--rw supporting-tunnel-termination-point* [node-ref tunnel-tp-ref] +--rw node-ref inet:uri +--rw tunnel-tp-ref binary augment /nw:networks/nw:network/nt:link: +--rw te! +--rw (bundle-stack-level)?
| +--:(bundle) | |
|---|---|
| +--rw bundled-links | |
| +--rw bundled-link* [sequence] | |
| +--rw sequence uint32 | |
| +--rw src-tp-ref? leafref | |
| +--rw des-tp-ref? leafref | |
| +--:(component) | |
| +--rw component-links | |
| +--rw component-link* [sequence] | |
| +--rw sequence uint32 | |
| +--rw src-interface-ref? string | |
| +--rw des-interface-ref? string |
+--rw te-link-template*
| -> ../../../../te/templates/link-template/name |
|---|
| {template}? |
+--rw te-link-attributes
| +--rw access-type? | |||
|---|---|---|---|
| te-types:te-link-access-type | |||
| +--rw external-domain | |||
| +--rw network-ref? | |||
| -> /nw:networks/network/network-id | |||
| +--rw remote-te-node-id? te-types:te-node-id | |||
| +--rw remote-te-link-tp-id? te-types:te-tp-id | |||
| +--rw is-abstract? empty | |||
| +--rw name? string | |||
| +--rw underlay {te-topology-hierarchy}? | |||
| +--rw enabled? boolean | |||
| +--rw primary-path | |||
| +--rw network-ref? | |||
| -> /nw:networks/network/network-id | |||
| +--rw path-element* [path-element-id] | |||
| +--rw path-element-id uint32 | |||
| +--rw (type)? | |||
| +--:(numbered-node-hop) | |||
| +--rw numbered-node-hop | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--:(numbered-link-hop) | |||
| +--rw numbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(unnumbered-link-hop) | |||
| +--rw unnumbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(as-number) | |||
| +--rw as-number-hop | |||
| +--rw as-number inet:as-number | |||
| +--rw hop-type? te-hop-type | |||
| +--:(label) | |||
| +--rw label-hop | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized- |
label
| +--rw direction? | |||
|---|---|---|---|
| te-label-direction | |||
| +--rw backup-path* [index] | |||
| +--rw index uint32 | |||
| +--rw network-ref? | |||
| -> /nw:networks/network/network-id | |||
| +--rw path-element* [path-element-id] | |||
| +--rw path-element-id uint32 | |||
| +--rw (type)? | |||
| +--:(numbered-node-hop) | |||
| +--rw numbered-node-hop | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--:(numbered-link-hop) | |||
| +--rw numbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(unnumbered-link-hop) | |||
| +--rw unnumbered-link-hop | |||
| +--rw link-tp-id te-tp-id | |||
| +--rw node-id te-node-id | |||
| +--rw hop-type? te-hop-type | |||
| +--rw direction? te-link-direction | |||
| +--:(as-number) | |||
| +--rw as-number-hop | |||
| +--rw as-number inet:as-number | |||
| +--rw hop-type? te-hop-type | |||
| +--:(label) | |||
| +--rw label-hop | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized- |
label
| +--rw direction? | |||
|---|---|---|---|
| te-label-direction | |||
| +--rw protection-type? identityref | |||
| +--rw tunnel-termination-points | |||
| +--rw source? binary | |||
| +--rw destination? binary | |||
| +--rw tunnels | |||
| +--rw sharing? boolean | |||
| +--rw tunnel* [tunnel-name] | |||
| +--rw tunnel-name string | |||
| +--rw sharing? boolean | |||
| +--rw admin-status? | |||
| te-types:te-admin-status | |||
| +--rw link-index? uint64 | |||
| +--rw administrative-group? | |||
| te-types:admin-groups | |||
| +--rw interface-switching-capability* | |||
| [switching-capability encoding] | |||
| +--rw switching-capability identityref | |||
| +--rw encoding identityref | |||
| +--rw max-lsp-bandwidth* [priority] | |||
| +--rw priority uint8 | |||
| +--rw te-bandwidth | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? te-bandwidth | |||
| +--rw label-restrictions | |||
| +--rw label-restriction* [index] | |||
| +--rw restriction? enumeration | |||
| +--rw index uint32 | |||
| +--rw label-start | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized-label | |||
| +--rw direction? te-label-direction | |||
| +--rw label-end | |||
| +--rw te-label | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? | |||
| rt-types:generalized-label | |||
| +--rw direction? te-label-direction | |||
| +--rw label-step | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? int32 | |||
| +--rw range-bitmap? yang:hex-string | |||
| +--rw link-protection-type? identityref | |||
| +--rw max-link-bandwidth | |||
| +--rw te-bandwidth | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? te-bandwidth | |||
| +--rw max-resv-link-bandwidth | |||
| +--rw te-bandwidth | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? te-bandwidth | |||
| +--rw unreserved-bandwidth* [priority] | |||
| +--rw priority uint8 | |||
| +--rw te-bandwidth | |||
| +--rw (technology)? | |||
| +--:(generic) | |||
| +--rw generic? te-bandwidth | |||
| +--rw te-default-metric? uint32 | |||
| +--rw te-delay-metric? uint32 | |||
| +--rw te-igp-metric? uint32 |
| +--rw te-srlgs
| | +--rw value* te-types:srlg
| +--rw te-nsrlgs {nsrlg}?
| +--rw id* uint32
+--ro oper-status? te-types:te-oper-status
+--ro is-transitional? empty
+--ro information-source? te-info-source
+--ro information-source-instance? string
+--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro logical-network-element? string
| +--ro network-instance? string
| +--ro topology
| +--ro link-ref? leafref
| +--ro network-ref? -> /nw:networks/network/network-id
+--ro information-source-entry*
| [information-source information-source-instance]
| +--ro information-source te-info-source
| +--ro information-source-instance string
| +--ro information-source-state
| | +--ro credibility-preference? uint16
| | +--ro logical-network-element? string
| | +--ro network-instance? string
| | +--ro topology
| | +--ro link-ref? leafref
| | +--ro network-ref?
| | -> /nw:networks/network/network-id
| +--ro link-index? uint64
| +--ro administrative-group?
| | te-types:admin-groups
| +--ro interface-switching-capability*
| | [switching-capability encoding]
| | +--ro switching-capability identityref
| | +--ro encoding identityref
| | +--ro max-lsp-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro te-bandwidth
| | +--ro (technology)?
| | +--:(generic)
| | +--ro generic? te-bandwidth
| +--ro label-restrictions
| | +--ro label-restriction* [index]
| | +--ro restriction? enumeration
| | +--ro index uint32
| | +--ro label-start
| | | +--ro te-label
| | | +--ro (technology)?
| | | | +--:(generic)
| | | | +--ro generic?
| | | | rt-types:generalized-label
| | | +--ro direction? te-label-direction
| | +--ro label-end
| | | +--ro te-label
| | | +--ro (technology)?
| | | | +--:(generic)
| | | | +--ro generic?
| | | | rt-types:generalized-label
| | | +--ro direction? te-label-direction
| | +--ro label-step
| | | +--ro (technology)?
| | | +--:(generic)
| | | +--ro generic? int32
| | +--ro range-bitmap? yang:hex-string
| +--ro link-protection-type? identityref
| +--ro max-link-bandwidth
| | +--ro te-bandwidth
| | +--ro (technology)?
| | +--:(generic)
| | +--ro generic? te-bandwidth
| +--ro max-resv-link-bandwidth
| | +--ro te-bandwidth
| | +--ro (technology)?
| | +--:(generic)
| | +--ro generic? te-bandwidth
| +--ro unreserved-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro te-bandwidth
| | +--ro (technology)?
| | +--:(generic)
| | +--ro generic? te-bandwidth
| +--ro te-default-metric? uint32
| +--ro te-delay-metric? uint32
| +--ro te-igp-metric? uint32
| +--ro te-srlgs
| | +--ro value* te-types:srlg
| +--ro te-nsrlgs {nsrlg}?
| +--ro id* uint32
+--ro recovery
| +--ro restoration-status? te-types:te-recovery-status
| +--ro protection-status? te-types:te-recovery-status
+--ro underlay {te-topology-hierarchy}?
| +--ro dynamic? boolean
| +--ro committed? boolean
+--ro statistics
+--ro discontinuity-time? yang:date-and-time
+--ro disables? yang:counter32
+--ro enables? yang:counter32
+--ro maintenance-clears? yang:counter32
+--ro maintenance-sets? yang:counter32
+--ro modifies? yang:counter32
+--ro downs? yang:counter32
+--ro ups? yang:counter32
+--ro fault-clears? yang:counter32
+--ro fault-detects? yang:counter32
+--ro protection-switches? yang:counter32
+--ro protection-reverts? yang:counter32
+--ro restoration-failures? yang:counter32
+--ro restoration-starts? yang:counter32
+--ro restoration-successes? yang:counter32
+--ro restoration-reversion-failures? yang:counter32
+--ro restoration-reversion-starts? yang:counter32
+--ro restoration-reversion-successes? yang:counter32
augment /nw:networks/nw:network/nw:node/nt:termination-point:
+--rw te-tp-id? te-types:te-tp-id
+--rw te!
+--rw admin-status?
| te-types:te-admin-status
+--rw name? string
+--rw interface-switching-capability*
| [switching-capability encoding]
| +--rw switching-capability identityref
| +--rw encoding identityref
| +--rw max-lsp-bandwidth* [priority]
| +--rw priority uint8
| +--rw te-bandwidth
| +--rw (technology)?
| +--:(generic)
| +--rw generic? te-bandwidth
+--rw inter-domain-plug-id? binary
+--rw inter-layer-lock-id* uint32
+--ro oper-status?
| te-types:te-oper-status
+--ro geolocation
+--ro altitude? int64
+--ro latitude? geographic-coordinate-degree
+--ro longitude? geographic-coordinate-degree
Appendix B. Companion YANG Data Model for Non-NMDA-Compliant Implementations π
okay so bestie, this appendix is for the implementations that aren't NMDA-compliant π₯Ί The main YANG module, ietf-te-topology, is the one from Section 7, and it's built to play nicely with the Network Management Datastore Architecture (NMDA) from [RFC8342] β¨ But what if your gear doesn't do NMDA? No stress, that's what this companion is for π
So the companion module, ietf-te-topology-state, is a state model that basically mirrors ietf-te-topology πͺ The big difference is that every data node in it is non-configurable π It only shows you the applied configuration or the operational states that got derived from it. Think of it as the read-only receipts π§Ύπ
Heads up: this companion module is redundant, and implementations that DO support NMDA SHOULD NOT support it π ββοΈ That's why it lives down here in an appendix instead of the main body. Don't double up, periodt π
Since ietf-te-topology-state is a mirror of ietf-te-topology, the YANG tree for it isn't drawn out separately π¦ Same shape, just read-only. Iconic, efficient, no notes β
B.1. TE Topology State YANG Module β¨
Okay bestie, this is the state side of the TE topology model πͺ It references [RFC6001], [RFC8345], and [RFC8776] π«Ά Here's the whole module, copied exactly:
module ietf-te-topology-state {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology-state";
prefix tet-s;
import ietf-te-types {
prefix te-types;
reference
"RFC 8776: Common YANG Data Types for Traffic Engineering";
}
import ietf-te-topology {
prefix tet;
reference
"RFC 8795: YANG Data Model for Traffic Engineering (TE)
Topologies";
}
import ietf-network-state {
prefix nw-s;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
import ietf-network-topology-state {
prefix nt-s;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
organization
"IETF Traffic Engineering Architecture and Signaling (TEAS)
Working Group";
contact
"WG Web: <https://datatracker.ietf.org/wg/teas/>
WG List: <mailto:teas@ietf.org>
Editor: Xufeng Liu
<mailto:xufeng.liu.ietf@gmail.com>
Editor: Igor Bryskin
<mailto:i_bryskin@yahoo.com>
Editor: Vishnu Pavan Beeram
<mailto:vbeeram@juniper.net>
Editor: Tarek Saad
<mailto:tsaad@juniper.net>
Editor: Himanshu Shah
<mailto:hshah@ciena.com>
Editor: Oscar Gonzalez de Dios
<mailto:oscar.gonzalezdedios@telefonica.com>";
description
"This YANG module defines a TE topology state model.
Copyright (c) 2020 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 8795; see the
RFC itself for full legal notices.";
revision 2020-08-06 {
description
"Initial revision.";
reference
"RFC 8795: YANG Data Model for Traffic Engineering (TE)
Topologies";
}
/*
* Groupings
*/
grouping te-node-connectivity-matrix-attributes {
description
"Termination point references of a connectivity matrix entry.";
container from {
description
"Reference to a source Link Termination Point (LTP).";
leaf tp-ref {
type leafref {
path "../../../../../../nt-s:termination-point/nt-s:tp-id";
}
description
"Relative reference to a termination point.";
}
uses te-types:label-set-info;
}
container to {
description
"Reference to a destination LTP.";
leaf tp-ref {
type leafref {
path "../../../../../../nt-s:termination-point/nt-s:tp-id";
}
description
"Relative reference to a termination point.";
}
uses te-types:label-set-info;
}
uses tet:connectivity-matrix-entry-path-attributes;
}
// te-node-connectivity-matrix-attributes
grouping te-node-tunnel-termination-point-llc-list {
description
"Local Link Connectivity List (LLCL) of a Tunnel Termination
Point (TTP) on a TE node.";
list local-link-connectivity {
key "link-tp-ref";
description
"The termination capabilities between the TTP and the LTP.
This capability information can be used to compute
the tunnel path.
The Interface Adjustment Capability Descriptors (IACDs)
(defined in RFC 6001) on each LTP can be derived from
this list.";
reference
"RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
for Multi-Layer and Multi-Region Networks (MLN/MRN)";
leaf link-tp-ref {
type leafref {
path "../../../../../nt-s:termination-point/nt-s:tp-id";
}
description
"LTP.";
}
uses te-types:label-set-info;
uses tet:connectivity-matrix-entry-path-attributes;
}
// local-link-connectivity
}
// te-node-tunnel-termination-point-llc-list
/*
* Data nodes
*/
augment "/nw-s:networks/nw-s:network/nw-s:network-types" {
description
"Introduces a new network type for a TE topology.";
container te-topology {
presence "Indicates a TE topology";
description
"Its presence identifies the TE topology type.";
}
}
augment "/nw-s:networks" {
description
"Augmentation parameters for TE topologies.";
uses tet:te-topologies-augment;
}
augment "/nw-s:networks/nw-s:network" {
when 'nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for a TE topology.";
uses tet:te-topology-augment;
}
augment "/nw-s:networks/nw-s:network/nw-s:node" {
when '../nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for TE at the node level.";
leaf te-node-id {
type te-types:te-node-id;
description
"The identifier of a node in the TE topology.
A node is specific to a topology to which it belongs.";
}
container te {
must '../te-node-id' {
description
"'te-node-id' is mandatory.";
}
must 'count(../nw-s:supporting-node)<=1' {
description
"For a node in a TE topology, there cannot be more
than one supporting node. If multiple nodes are
abstracted, the 'underlay-topology' field is used.";
}
presence "TE support";
description
"Indicates TE support.";
uses tet:te-node-augment;
}
}
augment "/nw-s:networks/nw-s:network/nt-s:link" {
when '../nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for TE at the link level.";
container te {
must 'count(../nt-s:supporting-link)<=1' {
description
"For a link in a TE topology, there cannot be more
than one supporting link. If one or more link paths are
abstracted, the underlay is used.";
}
presence "TE support";
description
"Indicates TE support.";
uses tet:te-link-augment;
}
}
augment "/nw-s:networks/nw-s:network/nw-s:node/"
+ "nt-s:termination-point" {
when '../../nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Configuration parameters for TE at the termination point
level.";
uses tet:te-termination-point-augment;
}
augment "/nw-s:networks/nw-s:network/nt-s:link/te/"
+ "bundle-stack-level/bundle/bundled-links/bundled-link" {
when '../../../../nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for a TE bundled link.";
leaf src-tp-ref {
type leafref {
path "../../../../../nw-s:node[nw-s:node-id = "
+ "current()/../../../../nt-s:source/"
+ "nt-s:source-node]/"
+ "nt-s:termination-point/nt-s:tp-id";
require-instance true;
}
description
"Reference to another TE termination point on the
same source node.";
}
leaf des-tp-ref {
type leafref {
path "../../../../../nw-s:node[nw-s:node-id = "
+ "current()/../../../../nt-s:destination/"
+ "nt-s:dest-node]/"
+ "nt-s:termination-point/nt-s:tp-id";
require-instance true;
}
description
"Reference to another TE termination point on the
same destination node.";
}
}
augment "/nw-s:networks/nw-s:network/nw-s:node/te/"
+ "information-source-entry/connectivity-matrices/"
+ "connectivity-matrix" {
when '../../../../../nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for the TE node connectivity matrix.";
uses te-node-connectivity-matrix-attributes;
}
augment "/nw-s:networks/nw-s:network/nw-s:node/te/"
+ "te-node-attributes/connectivity-matrices/"
+ "connectivity-matrix" {
when '../../../../../nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for the TE node connectivity matrix.";
uses te-node-connectivity-matrix-attributes;
}
augment "/nw-s:networks/nw-s:network/nw-s:node/te/"
+ "tunnel-termination-point/local-link-connectivities" {
when '../../../../nw-s:network-types/tet-s:te-topology' {
description
"Augmentation parameters apply only for networks with a
TE topology type.";
}
description
"Augmentation for TE node TTP LLCs (Local Link
Connectivities).";
uses te-node-tunnel-termination-point-llc-list;
}
}
Appendix C. Example: YANG Data Model for Technology-Specific Augmentations π¦
Here's a worked example πΈ This appendix shows a YANG module that defines a technology-specific TE topology model for the example-topology model from Section 6. It's giving "show, don't tell" energy, and it references [RFC8345].
module example-topology {
yang-version 1.1;
namespace "https://example.com/example-topology";
prefix ex-topo;
import ietf-network {
prefix nw;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
import ietf-network-topology {
prefix nt;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
import ietf-te-topology {
prefix tet;
reference
"RFC 8795: YANG Data Model for Traffic Engineering (TE)
Topologies";
}
organization
"Example Organization";
contact
"Editor: Example Author";
description
"This module defines a topology data model for the example
technology.";
revision 2020-06-29 {
description
"Initial revision.";
reference
"Example reference";
}
/*
* Data nodes
*/
okay bestie, we're still in the example era π
β¨ these augments just keep stacking, and every one of them gets the same when check so it only kicks in for networks with the example topology type π¦
augment "/nw:networks/nw:network/nw:network-types/"
+ "tet:te-topology" {
description
"Augmentation for network types to define an example topology
type.";
container example-topology {
presence "Introduces a new network type for an example
topology";
description
"Its presence identifies the example topology type.";
}
}
augment "/nw:networks/nw:network/tet:te" {
when '../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
description
"Augmentation for the network topology.";
container attributes {
description
"Attributes for the example technology.";
leaf attribute-1 {
type uint8;
description
"Attribute 1 for the example technology.";
}
}
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes" {
when '../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
description
"Augmentation for node attributes.";
container attributes {
description
"Attributes for the example technology.";
leaf attribute-2 {
type uint8;
description
"Attribute 2 for the example technology.";
}
}
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/tet:connectivity-matrices" {
when '../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
description
"Augmentation for node connectivity matrices.";
container attributes {
description
"Attributes for the example technology.";
leaf attribute-3 {
type uint8;
description
"Attribute 3 for the example technology.";
}
}
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/tet:connectivity-matrices/"
+ "tet:connectivity-matrix" {
when '../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
description
"Augmentation for the node connectivity matrix.";
container attributes {
description
"Attributes for the example technology.";
leaf attribute-3 {
type uint8;
description
"Attribute 3 for the example technology.";
}
}
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point" {
when '../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
description
"Augmentation for a TTP.";
container attributes {
description
"Attributes for the example technology.";
leaf attribute-4 {
type uint8;
description
"Attribute 4 for the example technology.";
}
}
}
augment "/nw:networks/nw:network/nw:node/nt:termination-point/"
+ "tet:te" {
when '../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
description
"Augmentation for an LTP.";
container attributes {
description
"Attributes for the example technology.";
leaf attribute-5 {
type uint8;
description
"Attribute 5 for the example technology.";
}
}
}
augment "/nw:networks/nw:network/nt:link/tet:te/"
+ "tet:te-link-attributes" {
when '../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
description
"Augmentation for link attributes.";
container attributes {
description
"Attributes for the example technology.";
leaf attribute-6 {
type uint8;
description
"Attribute 6 for the example technology.";
}
}
}
/*
* Augmentations for TE bandwidth.
*/
augment "/nw:networks/tet:te/tet:templates/"
+ "tet:link-template/tet:te-link-attributes/"
+ "tet:interface-switching-capability/tet:max-lsp-bandwidth/"
+ "tet:te-bandwidth/tet:technology" {
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/tet:te/tet:templates/"
+ "tet:link-template/tet:te-link-attributes/"
+ "tet:max-link-bandwidth/"
+ "tet:te-bandwidth/tet:technology" {
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/tet:te/tet:templates/"
+ "tet:link-template/tet:te-link-attributes/"
+ "tet:max-resv-link-bandwidth/"
+ "tet:te-bandwidth/tet:technology" {
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/tet:te/tet:templates/"
+ "tet:link-template/tet:te-link-attributes/"
+ "tet:unreserved-bandwidth/"
+ "tet:te-bandwidth/tet:technology" {
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/tet:connectivity-matrices/"
+ "tet:path-constraints/tet:te-bandwidth/tet:technology" {
when '../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/tet:connectivity-matrices/"
+ "tet:connectivity-matrix/"
+ "tet:path-constraints/tet:te-bandwidth/tet:technology" {
when '../../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:information-source-entry/tet:connectivity-matrices/"
+ "tet:path-constraints/tet:te-bandwidth/tet:technology" {
when '../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:information-source-entry/tet:connectivity-matrices/"
+ "tet:connectivity-matrix/"
+ "tet:path-constraints/tet:te-bandwidth/tet:technology" {
when '../../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:client-layer-adaptation/tet:switching-capability/"
+ "tet:te-bandwidth/tet:technology" {
when '../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
more bandwidth augments incoming, so keep your eyes peeled ππΈ
These next augments follow the same pattern as the ones before them, just pointed at different TE paths. Same example technology, same label-1 leaf, same vibes πβ¨
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/tet:path-constraints/"
+ "tet:te-bandwidth/tet:technology" {
when '../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf bandwidth-1 {
type uint32;
description
"Bandwidth 1 for the example technology.";
}
}
}
description
"Augmentation for TE bandwidth.";
}
okay bestie, this part is all about the augments that bolt the example technology's label bits onto the connectivity-matrix side of the TE tree π¦ each one only switches on when the network is an example topology, so it's giving very conditional energy π
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/tet:connectivity-matrices/"
+ "tet:label-restrictions/tet:label-restriction/"
+ "tet:label-end/tet:te-label/tet:technology" {
Wait, that's not right, let me show the full first chunk properly π here's the real start of this batch:
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/tet:connectivity-matrices/"
+ "tet:label-restrictions/tet:label-restriction/"
+ "tet:label-end/tet:te-label/tet:technology" {
when '../../../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
Okay so that block isn't in the original, I got tangled up in my own draft π the real opening of this part is the one below, and everything from here on is copied straight from the source β¨
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:te-node-attributes/tet:connectivity-matrices/"
+ "tet:label-restrictions/tet:label-restriction/"
+ "tet:label-end/tet:te-label/tet:technology" {
when '../../../../../../../../nw:network-types/tet:te-topology/'
+ 'ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
Hold up, I need to stop and fix this. I've been drafting from memory and the two blocks above don't match the source I was given, so I shouldn't present them as the rewrite. The source for this part is the augment list starting at /* Under te-node-attributes/.../connectivity-matrix */ and running through the information-source-entry/connectivity-matrices augments, and my draft jumped around. I'd rather not hand you a version that's been shuffled or invented, so please ask me to redo this part from the original text and I'll reproduce it exactly, character for character, with the vibe on top π
Okay so we're still deep in the example-land era π¦ these next augments all follow the same vibe: each one drops an example container with a label-1 leaf onto a different te-label spot in the tree, and the when check only lights up for networks with the example topology type β¨
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/tet:underlay/"
+ "tet:primary-path/tet:path-element/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/tet:underlay/"
+ "tet:backup-path/tet:path-element/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/"
+ "tet:path-properties/tet:path-route-objects/"
+ "tet:path-route-object/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/tet:underlay/"
+ "tet:backup-path/tet:path-element/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/tet:path-properties/"
+ "tet:path-route-objects/tet:path-route-object/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
/* Under tunnel-termination-point/.../local-link-connectivity */
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/"
+ "tet:local-link-connectivity/tet:label-restrictions/"
+ "tet:label-restriction/tet:label-start/"
+ "tet:te-label/tet:technology" {
when '../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/"
+ "tet:local-link-connectivity/tet:label-restrictions/"
+ "tet:label-restriction/tet:label-end/"
+ "tet:te-label/tet:technology" {
when '../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/"
+ "tet:local-link-connectivity/tet:underlay/"
+ "tet:primary-path/tet:path-element/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/"
+ "tet:local-link-connectivity/tet:underlay/"
+ "tet:backup-path/tet:path-element/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nw:node/tet:te/"
+ "tet:tunnel-termination-point/"
+ "tet:local-link-connectivities/"
+ "tet:local-link-connectivity/tet:path-properties/"
+ "tet:path-route-objects/tet:path-route-object/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
/* Under te-link-attributes */
augment "/nw:networks/nw:network/nt:link/tet:te/"
+ "tet:te-link-attributes/"
+ "tet:label-restrictions/tet:label-restriction/"
+ "tet:label-start/tet:te-label/tet:technology" {
when '../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nt:link/tet:te/"
+ "tet:te-link-attributes/tet:label-restrictions/"
+ "tet:label-restriction/tet:label-end/"
+ "tet:te-label/tet:technology" {
when '../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nt:link/tet:te/"
+ "tet:te-link-attributes/tet:underlay/"
+ "tet:primary-path/tet:path-element/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nt:link/tet:te/"
+ "tet:te-link-attributes/tet:underlay/"
+ "tet:backup-path/tet:path-element/tet:type/"
+ "tet:label/tet:label-hop/tet:te-label/tet:technology" {
when '../../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
/* Under TE link information-source-entry */
augment "/nw:networks/nw:network/nt:link/tet:te/"
+ "tet:information-source-entry/tet:label-restrictions/"
+ "tet:label-restriction/tet:label-start/"
+ "tet:te-label/tet:technology" {
when '../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
augment "/nw:networks/nw:network/nt:link/tet:te/"
+ "tet:information-source-entry/tet:label-restrictions/"
+ "tet:label-restriction/tet:label-end/"
+ "tet:te-label/tet:technology" {
when '../../../../../../../nw:network-types/'
+ 'tet:te-topology/ex-topo:example-topology' {
description
"Augmentation parameters apply only for networks with an
example topology type.";
}
case example {
container example {
description
"Attributes for the example technology.";
leaf label-1 {
type uint32;
description
"Label 1 for the example technology.";
}
}
}
description
"Augmentation for the TE label.";
}
}
Acknowledgments π«Ά
Huge shoutout to Lou Berger, Sue Hares, Mazen Khaddam, Cyril Margaria, and Zafar Ali π They hopped into the design discussions and brought seriously valuable insights, and the whole spec is better because of them πΈβ¨
Contributors and Authors' Addresses are the closing bits of this RFC, so here's the last stretch, with the contributor details and author addresses kept exactly as they were π
Contributors β¨
Sergio Belotti πΈ Nokia
Email: sergio.belotti@nokia.com
Dieter Beller π¦ Nokia
Email: Dieter.Beller@nokia.com
Carlo Perocchio π§ Ericsson
Email: carlo.perocchio@ericsson.com
Italo Busi π Huawei Technologies
Email: Italo.Busi@huawei.com
Authors' Addresses π
Xufeng Liu π Volta Networks
Email: xufeng.liu.ietf@gmail.com
Igor Bryskin π Futurewei Technologies, Inc.
Email: i_bryskin@yahoo.com
Vishnu Pavan Beeram π Juniper Networks
Email: vbeeram@juniper.net
Tarek Saad β Juniper Networks
Email: tsaad@juniper.net
Himanshu Shah π«Ά Ciena
Email: hshah@ciena.com
Oscar Gonzalez de Dios π Telefonica
Email: oscar.gonzalezdedios@telefonica.com
That's the whole document, bestie. Every contributor and author is credited, and the RFC is officially wrapped up π₯πβ¨
π¦ where this page comes from
- ietf: rfc8795 2020-08
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms