draft-ietf-teas-yang-te-topo-00.txt   draft-ietf-teas-yang-te-topo-01.txt 
TEAS Working Group X. Liu TEAS Working Group Xufeng Liu
Internet-Draft Ericsson Internet Draft Ericsson
Intended status: Standards Track I. Bryskin Intended status: Standards Track Igor Bryskin
Expires: November 08, 2015 ADVA Optical Networking ADVA Optical Networking
V. Beeram Vishnu Pavan Beeram
Juniper Networks Juniper Networks
T. Saad Tarek Saad
Cisco Systems Inc. Cisco Systems Inc
H. Shah Himanshu Shah
Ciena Ciena
May 08, 2015 Oscar Gonzalez De Dios
Telefonica
YANG Data Model for TE Topologies Expires: January 6, 2016 July 6, 2015
draft-ietf-teas-yang-te-topo-00
Abstract YANG Data Model for TE Topologies
draft-ietf-teas-yang-te-topo-01
This document defines a YANG data model for representing and Status of this Memo
manipulating TE Topologies.
Status of This Memo This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
This Internet-Draft is submitted in full conformance with the Internet-Drafts are working documents of the Internet Engineering
provisions of BCP 78 and BCP 79. Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are draft documents valid for a maximum of six
Task Force (IETF). Note that other groups may also distribute months and may be updated, replaced, or obsoleted by other documents
working documents as Internet-Drafts. The list of current Internet- at any time. It is inappropriate to use Internet-Drafts as
Drafts is at http://datatracker.ietf.org/drafts/current/. reference material or to cite them other than as "work in progress."
Internet-Drafts are draft documents valid for a maximum of six months The list of current Internet-Drafts can be accessed at
and may be updated, replaced, or obsoleted by other documents at any http://www.ietf.org/ietf/1id-abstracts.txt
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on November 08, 2015. The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html
Copyright Notice This Internet-Draft will expire on January 6, 2016.
Copyright (c) 2015 IETF Trust and the persons identified as the Copyright Notice
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Copyright (c) 2015 IETF Trust and the persons identified as the
Provisions Relating to IETF Documents document authors. All rights reserved.
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with
respect to this document. Code Components extracted from this
document must include Simplified BSD License text as described in
Section 4.e of the Trust Legal Provisions and are provided without
warranty as described in the Simplified BSD License.
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 Abstract
1.1. Tree Structure - Legend . . . . . . . . . . . . . . . . . 2
1.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3
1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4
2. Design Considerations . . . . . . . . . . . . . . . . . . . . 4
2.1. Generic extensible Model . . . . . . . . . . . . . . . . 4
2.1.1. Generic TE Link Attributes . . . . . . . . . . . . . 4
2.1.2. Generic TE Node Attributes . . . . . . . . . . . . . 4
2.1.3. TED Information Sources . . . . . . . . . . . . . . . 4
2.2. Overlay/Underlay Relationship . . . . . . . . . . . . . . 5
2.3. Scheduling Parameters . . . . . . . . . . . . . . . . . . 5
2.4. Abstract TE Topologies . . . . . . . . . . . . . . . . . 5
2.5. Open Items . . . . . . . . . . . . . . . . . . . . . . . 6
3. Tree Structure . . . . . . . . . . . . . . . . . . . . . . . 6
3.1. TE Topology Yang Module . . . . . . . . . . . . . . . . . 29
4. Normative References . . . . . . . . . . . . . . . . . . . . 49
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49
1. Introduction This document defines a YANG data model for representing, retrieving
and manipulating TE Topologies. The model serves as a base model
that other technology specific TE Topology models can augment.
YANG [RFC6020] a data definition language that was introduced to Conventions used in this document
define the contents of a conceptual data store that allows networked
devices to be managed using NETCONF [RFC6241]. YANG is proving
relevant beyond its initial confines, as bindings to other interfaces
(e.g. ReST) and encoding other than XML (e.g. JSON) are being
defined. Furthermore, YANG data models can be used as the basis of
implementation for other interface, such as CLI and programmatic
APIs. This document defines a YANG data model for representing and
manipulating TE Topologies. This model contains technology agnostic
TE Topology building blocks that can be augmented and used by other
technology-specific TE Topology models.
1.1. Tree Structure - Legend The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC-2119 [RFC2119].
A simplified graphical representation of the data model is presented Table of Contents
in Section 3 of this document. The following notations are used for
the YANG model data tree representation.
<status> <flags> <name> <opts> <type> 1. Introduction...................................................3
1.1. Terminology...............................................3
1.2. Tree Structure - Legend...................................4
1.3. Prefixes in Data Node Names...............................4
2. Characterizing TE Topologies...................................5
3. Model Applicability............................................6
3.1. Native TE Topologies......................................6
3.2. Customized TE Topologies..................................8
4. Modeling Considerations.......................................10
4.1. Generic extensible Model.................................10
4.2. Model Structure..........................................10
4.3. Topology Identifiers.....................................11
4.4. Generic TE Link Attributes...............................12
4.5. Generic TE Node Attributes...............................12
4.6. TED Information Sources..................................13
4.7. Overlay/Underlay Relationship............................14
4.8. Scheduling Parameters....................................15
4.9. Templates................................................15
4.10. Notifications...........................................16
4.11. Open Items..............................................17
5. Tree Structure................................................17
6. TE Topology Yang Module.......................................42
7. Security Considerations.......................................78
8. IANA Considerations...........................................78
9. References....................................................78
9.1. Normative References.....................................78
9.2. Informative References...................................79
10. Acknowledgments..............................................79
<status> is one of: 1. Introduction
+ for current
x for deprecated
o for obsolete
<flags> is one of: The Traffic Engineering Database (TED) is an essential component of
rw for read-write configuration data Traffic Engineered (TE) systems that are based on MPLS-TE [RFC2702]
ro for read-only non-configuration data and GMPLS [RFC3945]. The TED is a collection of all TE information
-x for execution rpcs about all TE nodes and TE links in the network. The TE Topology is a
-n for notifications schematic arrangement of TE nodes and TE links present in a given
TED. There could be one or more TE Topologies present in a given
Traffic Engineered system. The TE Topology is the topology on which
path computational algorithms are run to compute Traffic Engineered
Paths (TE Paths).
<name> is the name of the node This document defines a YANG [RFC6020] data model for representing
and manipulating TE Topologies. This model contains technology
agnostic TE Topology building blocks that can be augmented and used
by other technology-specific TE Topology models.
If the node is augmented into the tree from another module, its name 1.1. Terminology
is printed as <prefix>:<name>
<opts> is one of: TED: The Traffic Engineering Database is a collection of all TE
? for an optional leaf or node information about all TE nodes and TE links in a given network.
! for a presence container
* for a leaf-list or list
Brackets [<keys>] for a list's keys
Curly braces {<condition>} for optional feature that make node
conditional
Colon : for marking case nodes
Ellipses ("...") subtree contents not shown
Parentheses enclose choice and case nodes, and case nodes are TE-Topology: The TE Topology is a schematic arrangement of TE nodes
also marked with a colon (":"). and TE links in a given TED. It forms the basis for a graph suitable
for TE path computations.
<type> is the name of the type for leafs and leaf-lists. Native TE Topology: Native TE Topology is a topology that is native
to a given provider network. This is the topology on which path
computational algorithms are run to compute TE Paths.
1.2. Prefixes in Data Node Names Customized TE Topology: Customized TE Topology is a custom topology
that is produced by a provider for a given Client. This topology
typically augments the Client's Native TE Topology. Path
computational algorithms aren't typically run on the Customized TE
Topology; they are run on the Client's augmented Native TE Topology.
In this document, names of data nodes and other data model objects 1.2. Tree Structure - Legend
are prefixed using the standard prefix associated with the
corresponding YANG imported modules, as shown in Table 1.
+--------+-----------------+-----------+ A simplified graphical representation of the data model is presented
| Prefix | YANG module | Reference | in Section 5 of this document. The following notations are used for
+--------+-----------------+-----------+ the YANG model data tree representation.
| yang | ietf-yang-types | [RFC6991] |
| inet | ietf-inet-types | [RFC6991] |
+--------+-----------------+-----------+
Table 1: Prefixes and corresponding YANG modules <status> <flags> <name> <opts> <type>
1.3. Terminology <status> is one of:
+ for current
x for deprecated
o for obsolete
In this document, the key words "MUST", "MUST NOT", "REQUIRED", <flags> is one of:
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", rw for read-write configuration data
and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 ro for read-only non-configuration data
[RFC2119]. -x for execution rpcs
-n for notifications
2. Design Considerations <name> is the name of the node
2.1. Generic extensible Model If the node is augmented into the tree from another module,
its name is printed as <prefix>:<name>
The TE Topology model proposed in this document is meant to be <opts> is one of:
technology agnostic. Other technology specific TE Topology models ? for an optional leaf or node
can augment and use the building blocks provided by the proposed ! for a presence container
model. * for a leaf-list or list
Brackets [<keys>] for a list's keys
Curly braces {<condition>} for optional feature that make
node conditional
2.1.1. Generic TE Link Attributes Colon : for marking case nodes
Ellipses ("...") subtree contents not shown
The model covers the definitions for generic TE Link attributes - Parentheses enclose choice and case nodes, and case nodes are
bandwidth, admin groups, SRLGs, switching capabilities, TE metric also marked with a colon (":").
extensions etc.
2.1.2. Generic TE Node Attributes <type> is the name of the type for leafs and leaf-lists.
The model covers the definitions for generic TE Node attributes like 1.3. Prefixes in Data Node Names
connectivity matrix.
+--rw connectivity-matrix* [id] In this document, names of data nodes and other data model objects
+--rw id uint32 are prefixed using the standard prefix associated with the
+--rw from-link corresponding YANG imported modules, as shown in Table 1.
+--rw topo-ref? leafref
+--rw node-ref? leafref
+--rw link-end-ref? leafref
+--rw to-link
+--rw topo-ref? leafref
+--rw node-ref? leafref
+--rw link-end-ref? leafref
+--rw is-allowed? Boolean
2.1.3. TED Information Sources +--------+-----------------+-----------+
| Prefix | YANG module | Reference |
+--------+-----------------+-----------+
| yang | ietf-yang-types | [RFC6991] |
| inet | ietf-inet-types | [RFC6991] |
+--------+-----------------+-----------+
The model allows each TE topological element to have multiple TE Table 1: Prefixes and corresponding YANG modules
information sources (OSPF-TE, ISIS-TE, BGP-LS, User-Configured,
Other). Each information source is associated with a credibility
preference to indicate precedence.
The model captures overlay and underlay relationship for TE nodes/ 2. Characterizing TE Topologies
links. For example - in networks where multiple TE Topologies are
built hierarchically, this model allows the user to start from a
specific topological element in the top most topology and traverse
all the way down to the supporting topological elements in the bottom
most topology.
2.2. Overlay/Underlay Relationship The data model proposed by this document takes the following
characteristics of TE Topologies into account:
+--rw node* [te-node-id] - TE Topology is an abstract control-plane representation of the
: data-plane topology. Hence attributes specific to the data-plane
+--rw te-node-attributes must make their way into the corresponding TE Topology modeling.
: The TE Topology comprises of dynamic auto-discovered data (data
+--rw underlay-topology? leafref {te-topology-hierarchy}? that may change frequently - example: unreserved bandwidth
available on data-plane links) as well as fairly static data (data
that rarely changes- examples: layer network identification,
switching and adaptation capabilities and limitations, fate
sharing, administrative colors) associated with data-plane nodes
and links. It is possible for a single TE Topology to encompass TE
information at multiple switching layers.
+--rw link* [source-te-node-id source-te-link-id dest-te-node-id - TE Topologies are protocol independent. Information about
dest-te-link-id] topological elements may be learnt via link-state protocols, but
: the topology can exist without being dependent on any particular
+--rw te-link-attributes protocol.
+--rw underlay! {te-topology-hierarchy}?
+--rw underlay-path
:
+--rw underlay-backup-path
:
+--rw underlay-protection-type? uint16
+--rw underlay-trail-src
:
+--rw underlay-trail-des
:
2.3. Scheduling Parameters - TE Topology may not be congruent to the routing topology (topology
constructed based on routing adjacencies) in a given TE System.
There isn't always a one-to-one association between a TE-link and
a routing adjacency. For example, the presence of a TE link
between a pair of nodes doesn't necessarily imply the existence of
a routing-adjacency between these nodes.
The model allows time scheduling parameters to be specified for each - Each TE Topological element has an information source associated
topological element. These parameters allow the provider to present with it. In some scenarios, there could be more than one
different topological views to the client at different time slots. information source associated with each topological element.
+--rw schedules* [schedule-id] - TE Topologies can be hierarchical. Each node and link of a given
| +--rw schedule-id uint32 TE Topology can be associated with respective underlay topology.
| +--rw start? yang:date-and-time This means that each node and link of a given TE Topology can be
| +--rw schedule-duration? string associated with an independent stack of supporting TE Topologies.
| +--rw repeat-interval? string
2.4. Abstract TE Topologies - TE Topologies can be customized. TE topologies of a given network
presented by the network provider to its client could be
customized on per-client request basis. This customization could
be performed by provider, by client or by provider/client
negotiation. The relationship between a customized topology (as
presented to the client) and provider's native topology (as known
in its entirety to the provider itself) could be captured as
hierarchical (overlay-underlay), but otherwise the two topologies
are decoupled from each other.
The model allows the provider to present the network in abstract 3. Model Applicability
terms on per client basis and facilitates the notion of "TE Topology
as a service". These topologies are typically decoupled from the
actual network topology and are supposed to be fully comprehensible
by the clients and contain sufficient information for the client path
computers to select service paths according to the client policies.
The model also allows the client to request changes to the abstract
TE Topology that is presented to it and thus manipulate it.
2.5. Open Items 3.1. Native TE Topologies
o Relationship with "generic network topology" model: The generic The model discussed in this draft can be used to represent and
network topology building blocks are discussed in [YANG-NET-TOPO]. retrieve native TE topologies on a given TE system.
This version of the document does not use any of those building
blocks. The authors would like to explore the possibility of
doing that in future revisions of this document.
o Incremental notifications: The model proposed in this version does +---+ +---+ +---+ +---+ +---+
not cover incremental notifications. The authors intend to add | R1|-------| R2|--------| R3|---------| R4|---------| R5|
this in future revisions of the document. +---+ +---+ +---+ +---+ +---+
| / \ / \ /
| / \ / \ /
| / \ / \ /
| / \ / \ /
| / \ / \ /
+---+ +---+ +---+ +---+
| R6|-------------| R7| | R8|---------| R9|
+---+ +---+ +---+ +---+
3. Tree Structure Figure 1a: Example Network Topology
module: ietf-te-topology ---------------
+--rw te-topologies | Native | | [ ] TE Node
| +--rw topology* [te-topology-id] | TE-Topology | | +++ TE Link
| | +--rw te-topology-id te-topology-id --------------- o--------------
| | +--rw topology-types __________________
| | | +--rw te-topology! [R1] ++++ [R2] ++++ [R3] ++++ [R4] ++++ [R5]
| | +--rw node* [te-node-id] + + + + + +
| | | +--rw te-node-id te-node-id + + + + + +
| | | +--rw te-node-template? leafref + + ++ ++
| | | +--rw te-node-attributes [R6] +++++++++ [R7] [R8] ++++ [R9]
| | | +--rw schedules* [schedule-id]
| | | | +--rw schedule-id uint32
| | | | +--rw start? yang:date-and-time
| | | | +--rw schedule-duration? string
| | | | +--rw repeat-interval? string
| | | +--rw name? inet:domain-name
| | | +--rw signaling-address* inet:ip-address
| | | +--rw flag* flag-type
| | | +--rw is-abstract? boolean
| | | +--rw underlay-topology? leafref
{te-topology-hierarchy}?
| | | +--rw te-link* [te-link-id]
| | | | +--rw te-link-id te-link-id
| | | | +--rw (stack-level)?
| | | | +--:(bundle)
| | | | | +--rw bundled-links
| | | | | +--rw bundled-link* [sequence]
| | | | | +--rw sequence uint32
| | | | | +--rw te-link-ref? leafref
| | | | +--:(component)
| | | | +--rw component-links
| | | | +--rw component-link* [sequence]
| | | | +--rw sequence uint32
| | | | +--rw component-link-ref? leafref
| | | +--rw connectivity-matrix* [id]
| | | | +--rw id uint32
| | | | +--rw from-link
| | | | | +--rw topo-ref? leafref
| | | | | +--rw node-ref? leafref
| | | | | +--rw link-end-ref? leafref
| | | | +--rw to-link
| | | | | +--rw topo-ref? leafref
| | | | | +--rw node-ref? leafref
| | | | | +--rw link-end-ref? leafref
| | | | +--rw is-allowed? boolean
| | | +--rw ted
| | | +--rw te-router-id-ipv4? inet:ipv4-address
| | | +--rw te-router-id-ipv6? inet:ipv6-address
| | | +--rw ipv4-local-address* [ipv4-prefix]
| | | | +--rw ipv4-prefix inet:ipv4-prefix
| | | +--rw ipv6-local-address* [ipv6-prefix]
| | | | +--rw ipv6-prefix inet:ipv6-prefix
| | | | +--rw prefix-option? uint8
| | | +--rw pcc-capabilities? pcc-capabilities
| | +--rw link* [source-te-node-id source-te-link-id
dest-te-node-id dest-te-link-id]
| | +--rw source-te-node-id leafref
| | +--rw source-te-link-id leafref
| | +--rw dest-te-node-id leafref
| | +--rw dest-te-link-id leafref
| | +--rw te-link-template? leafref
| | +--rw te-link-attributes
| | +--rw schedules* [schedule-id]
| | | +--rw schedule-id uint32
| | | +--rw start? yang:date-and-time
| | | +--rw schedule-duration? string
| | | +--rw repeat-interval? string
| | +--rw name? string
| | +--rw flag* flag-type
| | +--rw is-abstract? boolean
| | +--rw underlay! {te-topology-hierarchy}?
| | | +--rw underlay-path
| | | | +--rw topology-id? leafref
| | | | +--rw path-element* [path-element-id]
| | | | +--rw path-element-id uint32
| | | | +--rw loose? boolean
| | | | +--rw (element-type)?
| | | | +--:(numbered-link)
| | | | | +--rw link-ip-address? inet:ip-address
| | | | +--:(unnumbered-link)
| | | | | +--rw link-node-id? uint32
| | | | | +--rw te-link-id? uint32
| | | | +--:(node)
| | | | | +--rw te-node-id? uint32
| | | | +--:(label)
| | | | +--rw label? uint32
| | | +--rw underlay-backup-path
| | | | +--rw topology-id? leafref
| | | | +--rw path-element* [path-element-id]
| | | | +--rw path-element-id uint32
| | | | +--rw loose? boolean
| | | | +--rw (element-type)?
| | | | +--:(numbered-link)
| | | | | +--rw link-ip-address? inet:ip-address
| | | | +--:(unnumbered-link)
| | | | | +--rw link-node-id? uint32
| | | | | +--rw te-link-id? uint32
| | | | +--:(node)
| | | | | +--rw te-node-id? uint32
| | | | +--:(label)
| | | | +--rw label? uint32
| | | +--rw underlay-protection-type? uint16
| | | +--rw underlay-trail-src
| | | | +--rw topo-ref? leafref
| | | | +--rw node-ref? leafref
| | | | +--rw link-end-ref? leafref
| | | +--rw underlay-trail-des
| | | +--rw topo-ref? leafref
| | | +--rw node-ref? leafref
| | | +--rw link-end-ref? leafref
| | +--rw ted
| | +--rw admin-status? enumeration
| | +--rw oper-status? enumeration
| | +--rw area-id? binary
| | +--rw performance-metric-throttle
{te-performance-metric}?
| | | +--rw unidirectional-delay-offset? uint32
| | | +--rw measure-interval? uint32
| | | +--rw advertisement-interval? uint32
| | | +--rw suppression-interval? uint32
| | | +--rw threshold-out
| | | | +--rw unidirectional-delay? uint32
| | | | +--rw unidirectional-min-delay? uint32
| | | | +--rw unidirectional-max-delay? uint32
| | | | +--rw unidirectional-delay-variation? uint32
| | | | +--rw unidirectional-packet-loss? decimal64
| | | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | | +--rw unidirectional-available-bandwidth?
decimal64
| | | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | | +--rw threshold-in
| | | | +--rw unidirectional-delay?
uint32
| | | | +--rw unidirectional-min-delay?
uint32
| | | | +--rw unidirectional-max-delay?
uint32
| | | | +--rw unidirectional-delay-variation?
uint32
| | | | +--rw unidirectional-packet-loss?
decimal64
| | | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | | +--rw unidirectional-available-bandwidth?
decimal64
| | | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | | +--rw threshold-accelerated-advertisement
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss? decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw information-source? enumeration
| | +--rw credibility-preference? uint16
| | +--rw link-index? uint64
| | +--rw administrative-group* [sequence]
| | | +--rw sequence uint32
| | | +--rw ag-element? uint32
| | +--rw max-link-bandwidth? decimal64
| | +--rw max-resv-link-bandwidth? decimal64
| | +--rw unreserved-bandwidth* [priority]
| | | +--rw priority uint8
| | | +--rw bandwidth? decimal64
| | +--rw te-default-metric? uint32
| | +--rw performance-metric {te-performance-metric}?
| | | +--rw measurement
| | | | +--rw unidirectional-delay? uint32
| | | | +--rw unidirectional-min-delay? uint32
| | | | +--rw unidirectional-max-delay? uint32
| | | | +--rw unidirectional-delay-variation? uint32
| | | | +--rw unidirectional-packet-loss? decimal64
| | | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | | +--rw unidirectional-available-bandwidth?
decimal64
| | | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | | +--rw normality
| | | +--rw unidirectional-delay?
performance-metric-normality
| | | +--rw unidirectional-min-delay?
performance-metric-normality
| | | +--rw unidirectional-max-delay?
performance-metric-normality
| | | +--rw unidirectional-delay-variation?
performance-metric-normality
| | | +--rw unidirectional-packet-loss?
performance-metric-normality
| | | +--rw unidirectional-residual-bandwidth?
performance-metric-normality
| | | +--rw unidirectional-available-bandwidth?
performance-metric-normality
| | | +--rw unidirectional-utilized-bandwidth?
performance-metric-normality
| | +--rw link-protection-type?
enumeration
| | +--rw interface-switching-capabilities*
[switching-capability]
| | | +--rw switching-capability
ted:switching-capabilities
| | | +--rw encoding?
ted:encoding-type
| | | +--rw max-lsp-bandwidth* [priority]
| | | | +--rw priority uint8
| | | | +--rw bandwidth? decimal64
| | | +--rw packet-switch-capable
| | | | +--rw minimum-lsp-bandwidth? decimal64
| | | | +--rw interface-mtu? uint16
| | | +--rw time-division-multiplex-capable
| | | +--rw minimum-lsp-bandwidth? decimal64
| | | +--rw indication? enumeration
| | +--rw srlg
| | | +--rw srlg-values* [srlg-value]
| | | +--rw srlg-value uint32
| | +--rw alt-information-sources* [information-source]
| | +--rw information-source enumeration
| | +--rw credibility-preference? uint16
| | +--rw link-index? uint64
| | +--rw administrative-group* [sequence]
| | | +--rw sequence uint32
| | | +--rw ag-element? uint32
| | +--rw max-link-bandwidth? decimal64
| | +--rw max-resv-link-bandwidth? decimal64
| | +--rw unreserved-bandwidth* [priority]
| | | +--rw priority uint8
| | | +--rw bandwidth? decimal64
| | +--rw te-default-metric? uint32
| | +--rw performance-metric
{te-performance-metric}?
| | | +--rw measurement
| | | | +--rw unidirectional-delay? uint32
| | | | +--rw unidirectional-min-delay? uint32
| | | | +--rw unidirectional-max-delay? uint32
| | | | +--rw unidirectional-delay-variation?
uint32
| | | | +--rw unidirectional-packet-loss?
decimal64
| | | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | | +--rw unidirectional-available-bandwidth?
decimal64
| | | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | | +--rw normality
| | | +--rw unidirectional-delay?
performance-metric-normality
| | | +--rw unidirectional-min-delay?
performance-metric-normality
| | | +--rw unidirectional-max-delay?
performance-metric-normality
| | | +--rw unidirectional-delay-variation?
performance-metric-normality
| | | +--rw unidirectional-packet-loss?
performance-metric-normality
| | | +--rw unidirectional-residual-bandwidth?
performance-metric-normality
| | | +--rw unidirectional-available-bandwidth?
performance-metric-normality
| | | +--rw unidirectional-utilized-bandwidth?
performance-metric-normality
| | +--rw link-protection-type?
enumeration Figure 1b: Native TE Topology as seen on Node R3
| | +--rw interface-switching-capabilities*
[switching-capability]
| | | +--rw switching-capability
ted:switching-capabilities
| | | +--rw encoding?
ted:encoding-type
| | | +--rw max-lsp-bandwidth* [priority]
| | | | +--rw priority uint8
| | | | +--rw bandwidth? decimal64
| | | +--rw packet-switch-capable
| | | | +--rw minimum-lsp-bandwidth? decimal64
| | | | +--rw interface-mtu? uint16
| | | +--rw time-division-multiplex-capable
| | | +--rw minimum-lsp-bandwidth? decimal64
| | | +--rw indication? enumeration
| | +--rw srlg
| | +--rw srlg-values* [srlg-value]
| | +--rw srlg-value uint32
| +--rw node-template* [name]
| | +--rw name te-template-name
| | +--rw te-node-attributes
| | +--rw schedules* [schedule-id]
| | | +--rw schedule-id uint32
| | | +--rw start? yang:date-and-time
| | | +--rw schedule-duration? string
| | | +--rw repeat-interval? string
| | +--rw name? inet:domain-name
| | +--rw signaling-address* inet:ip-address
| | +--rw flag* flag-type
| | +--rw is-abstract? boolean
| | +--rw underlay-topology? leafref
{te-topology-hierarchy}?
| | +--rw te-link* [te-link-id]
| | | +--rw te-link-id te-link-id
| | | +--rw (stack-level)?
| | | +--:(bundle)
| | | | +--rw bundled-links
| | | | +--rw bundled-link* [sequence]
| | | | +--rw sequence uint32
| | | | +--rw te-link-ref? leafref
| | | +--:(component)
| | | +--rw component-links
| | | +--rw component-link* [sequence]
| | | +--rw sequence uint32
| | | +--rw component-link-ref? leafref
| | +--rw connectivity-matrix* [id]
| | | +--rw id uint32
| | | +--rw from-link
| | | | +--rw topo-ref? leafref
| | | | +--rw node-ref? leafref
| | | | +--rw link-end-ref? leafref
| | | +--rw to-link
| | | | +--rw topo-ref? leafref
| | | | +--rw node-ref? leafref
| | | | +--rw link-end-ref? leafref
| | | +--rw is-allowed? boolean
| | +--rw ted
| | +--rw te-router-id-ipv4? inet:ipv4-address
| | +--rw te-router-id-ipv6? inet:ipv6-address
| | +--rw ipv4-local-address* [ipv4-prefix]
| | | +--rw ipv4-prefix inet:ipv4-prefix
| | +--rw ipv6-local-address* [ipv6-prefix]
| | | +--rw ipv6-prefix inet:ipv6-prefix
| | | +--rw prefix-option? uint8
| | +--rw pcc-capabilities? pcc-capabilities
| +--rw link-template* [name]
| +--rw name te-template-name
| +--rw te-link-attributes
| +--rw schedules* [schedule-id]
| | +--rw schedule-id uint32
| | +--rw start? yang:date-and-time
| | +--rw schedule-duration? string
| | +--rw repeat-interval? string
| +--rw name? string
| +--rw flag* flag-type
| +--rw is-abstract? boolean
| +--rw underlay! {te-topology-hierarchy}?
| | +--rw underlay-path
| | | +--rw topology-id? leafref
| | | +--rw path-element* [path-element-id]
| | | +--rw path-element-id uint32
| | | +--rw loose? boolean
| | | +--rw (element-type)?
| | | +--:(numbered-link)
| | | | +--rw link-ip-address? inet:ip-address
| | | +--:(unnumbered-link)
| | | | +--rw link-node-id? uint32
| | | | +--rw te-link-id? uint32
| | | +--:(node)
| | | | +--rw te-node-id? uint32
| | | +--:(label)
| | | +--rw label? uint32
| | +--rw underlay-backup-path
| | | +--rw topology-id? leafref
| | | +--rw path-element* [path-element-id]
| | | +--rw path-element-id uint32
| | | +--rw loose? boolean
| | | +--rw (element-type)?
| | | +--:(numbered-link)
| | | | +--rw link-ip-address? inet:ip-address
| | | +--:(unnumbered-link)
| | | | +--rw link-node-id? uint32
| | | | +--rw te-link-id? uint32
| | | +--:(node)
| | | | +--rw te-node-id? uint32
| | | +--:(label)
| | | +--rw label? uint32
| | +--rw underlay-protection-type? uint16
| | +--rw underlay-trail-src
| | | +--rw topo-ref? leafref
| | | +--rw node-ref? leafref
| | | +--rw link-end-ref? leafref
| | +--rw underlay-trail-des
| | +--rw topo-ref? leafref
| | +--rw node-ref? leafref
| | +--rw link-end-ref? leafref
| +--rw ted
| +--rw admin-status? enumeration
| +--rw oper-status? enumeration
| +--rw area-id? binary
| +--rw performance-metric-throttle
{te-performance-metric}?
| | +--rw unidirectional-delay-offset? uint32
| | +--rw measure-interval? uint32
| | +--rw advertisement-interval? uint32
| | +--rw suppression-interval? uint32
| | +--rw threshold-out
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss? decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw threshold-in
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss? decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw threshold-accelerated-advertisement
| | +--rw unidirectional-delay? uint32
| | +--rw unidirectional-min-delay? uint32
| | +--rw unidirectional-max-delay? uint32
| | +--rw unidirectional-delay-variation? uint32
| | +--rw unidirectional-packet-loss? decimal64
| | +--rw unidirectional-residual-bandwidth?
decimal64
| | +--rw unidirectional-available-bandwidth?
decimal64
| | +--rw unidirectional-utilized-bandwidth?
decimal64
| +--rw information-source? enumeration
| +--rw credibility-preference? uint16
| +--rw link-index? uint64
| +--rw administrative-group* [sequence]
| | +--rw sequence uint32
| | +--rw ag-element? uint32
| +--rw max-link-bandwidth? decimal64
| +--rw max-resv-link-bandwidth? decimal64
| +--rw unreserved-bandwidth* [priority]
| | +--rw priority uint8
| | +--rw bandwidth? decimal64
| +--rw te-default-metric? uint32
| +--rw performance-metric {te-performance-metric}?
| | +--rw measurement
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss? decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw normality
| | +--rw unidirectional-delay?
performance-metric-normality
| | +--rw unidirectional-min-delay?
performance-metric-normality Consider the network topology depicted in Figure 1a (R1 .. R9 are
| | +--rw unidirectional-max-delay? nodes representing routers). An implementation MAY choose to
performance-metric-normality construct a native TE Topology using all nodes and links present in
| | +--rw unidirectional-delay-variation? the given TED as depicted in Figure 1b. The data model proposed in
performance-metric-normality this document can be used to retrieve/represent this TE topology.
| | +--rw unidirectional-packet-loss?
performance-metric-normality
| | +--rw unidirectional-residual-bandwidth?
performance-metric-normality
| | +--rw unidirectional-available-bandwidth?
performance-metric-normality
| | +--rw unidirectional-utilized-bandwidth?
performance-metric-normality
| +--rw link-protection-type? enumeration
| +--rw interface-switching-capabilities*
[switching-capability]
| | +--rw switching-capability
ted:switching-capabilities
| | +--rw encoding? ted:encoding-type
| | +--rw max-lsp-bandwidth* [priority]
| | | +--rw priority uint8
| | | +--rw bandwidth? decimal64
| | +--rw packet-switch-capable
| | | +--rw minimum-lsp-bandwidth? decimal64
| | | +--rw interface-mtu? uint16
| | +--rw time-division-multiplex-capable
| | +--rw minimum-lsp-bandwidth? decimal64
| | +--rw indication? enumeration
| +--rw srlg
| | +--rw srlg-values* [srlg-value]
| | +--rw srlg-value uint32
| +--rw alt-information-sources* [information-source]
| +--rw information-source enumeration
| +--rw credibility-preference? uint16
| +--rw link-index? uint64
| +--rw administrative-group* [sequence]
| | +--rw sequence uint32
| | +--rw ag-element? uint32
| +--rw max-link-bandwidth? decimal64
| +--rw max-resv-link-bandwidth? decimal64
| +--rw unreserved-bandwidth* [priority]
| | +--rw priority uint8
| | +--rw bandwidth? decimal64
| +--rw te-default-metric? uint32
| +--rw performance-metric {te-performance-metric}?
| | +--rw measurement
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss? decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw normality
| | +--rw unidirectional-delay?
performance-metric-normality
| | +--rw unidirectional-min-delay?
performance-metric-normality
| | +--rw unidirectional-max-delay?
performance-metric-normality
| | +--rw unidirectional-delay-variation?
performance-metric-normality
| | +--rw unidirectional-packet-loss?
performance-metric-normality
| | +--rw unidirectional-residual-bandwidth?
performance-metric-normality
| | +--rw unidirectional-available-bandwidth?
performance-metric-normality
| | +--rw unidirectional-utilized-bandwidth?
performance-metric-normality
| +--rw link-protection-type? enumeration
| +--rw interface-switching-capabilities*
[switching-capability]
| | +--rw switching-capability
ted:switching-capabilities
| | +--rw encoding? ted:encoding-type
| | +--rw max-lsp-bandwidth* [priority]
| | | +--rw priority uint8
| | | +--rw bandwidth? decimal64
| | +--rw packet-switch-capable
| | | +--rw minimum-lsp-bandwidth? decimal64
| | | +--rw interface-mtu? uint16
| | +--rw time-division-multiplex-capable
| | +--rw minimum-lsp-bandwidth? decimal64
| | +--rw indication? enumeration
| +--rw srlg
| +--rw srlg-values* [srlg-value]
| +--rw srlg-value uint32
+--ro te-topologies-state
+--ro topology* [te-topology-id]
+--ro te-topology-id te-topology-id
+--ro server-provided? boolean
+--ro topology-types
| +--ro te-topology!
+--ro node* [te-node-id]
| +--ro te-node-id te-node-id
| +--ro te-node-template? leafref
| +--ro te-node-attributes
| | +--ro schedules* [schedule-id]
| | | +--ro schedule-id uint32
| | | +--ro start? yang:date-and-time
| | | +--ro schedule-duration? string
| | | +--ro repeat-interval? string
| | +--ro name? inet:domain-name
| | +--ro signaling-address* inet:ip-address
| | +--ro flag* flag-type
| | +--ro is-abstract? boolean
| | +--ro underlay-topology? leafref
{te-topology-hierarchy}?
| | +--ro te-link* [te-link-id]
| | | +--ro te-link-id te-link-id
| | | +--ro (stack-level)?
| | | +--:(bundle)
| | | | +--ro bundled-links
| | | | +--ro bundled-link* [sequence]
| | | | +--ro sequence uint32
| | | | +--ro te-link-ref? leafref
| | | +--:(component)
| | | +--ro component-links
| | | +--ro component-link* [sequence]
| | | +--ro sequence uint32
| | | +--ro component-link-ref? leafref
| | +--ro connectivity-matrix* [id]
| | | +--ro id uint32
| | | +--ro from-link
| | | | +--ro topo-ref? leafref
| | | | +--ro node-ref? leafref
| | | | +--ro link-end-ref? leafref
| | | +--ro to-link
| | | | +--ro topo-ref? leafref
| | | | +--ro node-ref? leafref
| | | | +--ro link-end-ref? leafref
| | | +--ro is-allowed? boolean
| | +--ro ted
| | +--ro te-router-id-ipv4? inet:ipv4-address
| | +--ro te-router-id-ipv6? inet:ipv6-address
| | +--ro ipv4-local-address* [ipv4-prefix]
| | | +--ro ipv4-prefix inet:ipv4-prefix
| | +--ro ipv6-local-address* [ipv6-prefix]
| | | +--ro ipv6-prefix inet:ipv6-prefix
| | | +--ro prefix-option? uint8
| | +--ro pcc-capabilities? pcc-capabilities
| +--ro te-node-state-attributes
| +--ro information-source? enumeration
| +--ro credibility-preference? uint16
+--ro link* [source-te-node-id source-te-link-id
dest-te-node-id dest-te-link-id]
+--ro source-te-node-id leafref
+--ro source-te-link-id leafref
+--ro dest-te-node-id leafref
+--ro dest-te-link-id leafref
+--ro te-link-template? leafref
+--ro te-link-attributes
| +--ro schedules* [schedule-id]
| | +--ro schedule-id uint32
| | +--ro start? yang:date-and-time
| | +--ro schedule-duration? string
| | +--ro repeat-interval? string
| +--ro name? string
| +--ro flag* flag-type
| +--ro is-abstract? boolean
| +--ro underlay! {te-topology-hierarchy}?
| | +--ro underlay-path
| | | +--ro topology-id? leafref
| | | +--ro path-element* [path-element-id]
| | | +--ro path-element-id uint32
| | | +--ro loose? boolean
| | | +--ro (element-type)?
| | | +--:(numbered-link)
| | | | +--ro link-ip-address? inet:ip-address
| | | +--:(unnumbered-link)
| | | | +--ro link-node-id? uint32
| | | | +--ro te-link-id? uint32
| | | +--:(node)
| | | | +--ro te-node-id? uint32
| | | +--:(label)
| | | +--ro label? uint32
| | +--ro underlay-backup-path
| | | +--ro topology-id? leafref
| | | +--ro path-element* [path-element-id]
| | | +--ro path-element-id uint32
| | | +--ro loose? boolean
| | | +--ro (element-type)?
| | | +--:(numbered-link)
| | | | +--ro link-ip-address? inet:ip-address
| | | +--:(unnumbered-link)
| | | | +--ro link-node-id? uint32
| | | | +--ro te-link-id? uint32
| | | +--:(node)
| | | | +--ro te-node-id? uint32
| | | +--:(label)
| | | +--ro label? uint32
| | +--ro underlay-protection-type? uint16
| | +--ro underlay-trail-src
| | | +--ro topo-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro underlay-trail-des
| | | +--ro topo-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro dynamic? boolean
| | +--ro committed? boolean
| +--ro ted
| +--ro admin-status? enumeration
| +--ro oper-status? enumeration
| +--ro area-id? binary
| +--ro performance-metric-throttle {te-performance-metric}?
| | +--ro unidirectional-delay-offset? uint32
| | +--ro measure-interval? uint32
| | +--ro advertisement-interval? uint32
| | +--ro suppression-interval? uint32
| | +--ro threshold-out
| | | +--ro unidirectional-delay? uint32
| | | +--ro unidirectional-min-delay? uint32
| | | +--ro unidirectional-max-delay? uint32
| | | +--ro unidirectional-delay-variation? uint32
| | | +--ro unidirectional-packet-loss?
decimal64
| | | +--ro unidirectional-residual-bandwidth?
decimal64
| | | +--ro unidirectional-available-bandwidth?
decimal64
| | | +--ro unidirectional-utilized-bandwidth?
decimal64
| | +--ro threshold-in
| | | +--ro unidirectional-delay? uint32
| | | +--ro unidirectional-min-delay? uint32
| | | +--ro unidirectional-max-delay? uint32
| | | +--ro unidirectional-delay-variation? uint32
| | | +--ro unidirectional-packet-loss? decimal64
| | | +--ro unidirectional-residual-bandwidth?
decimal64
| | | +--ro unidirectional-available-bandwidth?
decimal64
| | | +--ro unidirectional-utilized-bandwidth?
decimal64 :
| | +--ro threshold-accelerated-advertisement TE info distributed via ISIS-TE : TE info distributed via OSPF-TE
| | +--ro unidirectional-delay? uint32 :
| | +--ro unidirectional-min-delay? uint32 +---+ +---+ +---+ +---+ +---+
| | +--ro unidirectional-max-delay? uint32 | R1|-------| R2|--------| R3|---------| R4|---------| R5|
| | +--ro unidirectional-delay-variation? uint32 +---+ +---+ +---+ +---+ +---+
| | +--ro unidirectional-packet-loss? decimal64 | / : \ / \ /
| | +--ro unidirectional-residual-bandwidth? | / : \ / \ /
decimal64 | / : \ / \ /
| | +--ro unidirectional-available-bandwidth? | / : \ / \ /
decimal64 | / : \ / \ /
| | +--ro unidirectional-utilized-bandwidth? +---+ +---+ : +---+ +---+
decimal64 | R6|-------------| R7| : | R8|---------| R9|
| +--ro information-source? enumeration +---+ +---+ : +---+ +---+
| +--ro credibility-preference? uint16 :
| +--ro link-index? uint64
| +--ro administrative-group* [sequence]
| | +--ro sequence uint32
| | +--ro ag-element? uint32
| +--ro max-link-bandwidth? decimal64
| +--ro max-resv-link-bandwidth? decimal64
| +--ro unreserved-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro te-default-metric? uint32
| +--ro performance-metric {te-performance-metric}?
| | +--ro measurement
| | | +--ro unidirectional-delay? uint32
| | | +--ro unidirectional-min-delay? uint32
| | | +--ro unidirectional-max-delay? uint32
| | | +--ro unidirectional-delay-variation? uint32
| | | +--ro unidirectional-packet-loss? decimal64
| | | +--ro unidirectional-residual-bandwidth?
decimal64
| | | +--ro unidirectional-available-bandwidth?
decimal64
| | | +--ro unidirectional-utilized-bandwidth?
decimal64
| | +--ro normality
| | +--ro unidirectional-delay?
performance-metric-normality
| | +--ro unidirectional-min-delay?
performance-metric-normality
| | +--ro unidirectional-max-delay?
performance-metric-normality
| | +--ro unidirectional-delay-variation?
performance-metric-normality
| | +--ro unidirectional-packet-loss?
performance-metric-normality Figure 2a: Example Network Topology
| | +--ro unidirectional-residual-bandwidth?
performance-metric-normality
| | +--ro unidirectional-available-bandwidth?
performance-metric-normality
| | +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
| +--ro link-protection-type? enumeration
| +--ro interface-switching-capabilities*
[switching-capability]
| | +--ro switching-capability
ted:switching-capabilities
| | +--ro encoding?
ted:encoding-type
| | +--ro max-lsp-bandwidth* [priority]
| | | +--ro priority uint8
| | | +--ro bandwidth? decimal64
| | +--ro packet-switch-capable
| | | +--ro minimum-lsp-bandwidth? decimal64
| | | +--ro interface-mtu? uint16
| | +--ro time-division-multiplex-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro indication? enumeration
| +--ro srlg
| | +--ro srlg-values* [srlg-value]
| | +--ro srlg-value uint32
| +--ro alt-information-sources* [information-source]
| +--ro information-source enumeration
| +--ro credibility-preference? uint16
| +--ro link-index? uint64
| +--ro administrative-group* [sequence]
| | +--ro sequence uint32
| | +--ro ag-element? uint32
| +--ro max-link-bandwidth? decimal64
| +--ro max-resv-link-bandwidth? decimal64
| +--ro unreserved-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro te-default-metric? uint32
| +--ro performance-metric
{te-performance-metric}?
| | +--ro measurement
| | | +--ro unidirectional-delay? uint32
| | | +--ro unidirectional-min-delay? uint32
| | | +--ro unidirectional-max-delay? uint32
| | | +--ro unidirectional-delay-variation?
uint32
| | | +--ro unidirectional-packet-loss?
decimal64 ----------------------- : -----------------------
| | | +--ro unidirectional-residual-bandwidth? |Native TE Topology | : |Native TE Topology |
decimal64 |Info-Source: ISIS-TE | : |Info-Source: OSPF-TE |
| | | +--ro unidirectional-available-bandwidth? ----------------------- : -----------------------
decimal64 :
| | | +--ro unidirectional-utilized-bandwidth? [R1] ++++ [R2] ++++ [R3] : [R3'] ++++ [R4] ++++ [R5]
decimal64 + + : + + + +
| | +--ro normality + + : + + + +
| | +--ro unidirectional-delay? + + : ++ ++
performance-metric-normality [R6] +++++++++ [R7] : [R8] ++++ [R9]
| | +--ro unidirectional-min-delay?
performance-metric-normality
| | +--ro unidirectional-max-delay?
performance-metric-normality
| | +--ro unidirectional-delay-variation?
performance-metric-normality
| | +--ro unidirectional-packet-loss?
performance-metric-normality
| | +--ro unidirectional-residual-bandwidth?
performance-metric-normality
| | +--ro unidirectional-available-bandwidth?
performance-metric-normality
| | +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
| +--ro link-protection-type? enumeration
| +--ro interface-switching-capabilities*
[switching-capability]
| | +--ro switching-capability
ted:switching-capabilities
| | +--ro encoding? ted:encoding-type
| | +--ro max-lsp-bandwidth* [priority]
| | | +--ro priority uint8
| | | +--ro bandwidth? decimal64
| | +--ro packet-switch-capable
| | | +--ro minimum-lsp-bandwidth? decimal64
| | | +--ro interface-mtu? uint16
| | +--ro time-division-multiplex-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro indication? enumeration
| +--ro srlg
| +--ro srlg-values* [srlg-value]
| +--ro srlg-value uint32
+--ro te-link-state-attributes
+--ro information-source? enumeration
+--ro credibility-preference? uint16
notifications:
+---n te-node-event
| +--ro event-type? te-topology-event-type
| +--ro topo-ref? leafref
| +--ro node-ref? leafref
| +--ro te-topology!
| +--ro te-node-attributes
| +--ro schedules* [schedule-id]
| | +--ro schedule-id uint32
| | +--ro start? yang:date-and-time
| | +--ro schedule-duration? string
| | +--ro repeat-interval? string
| +--ro name? inet:domain-name
| +--ro signaling-address* inet:ip-address
| +--ro flag* flag-type
| +--ro is-abstract? boolean
| +--ro underlay-topology? leafref {te-topology-hierarchy}?
| +--ro te-link* [te-link-id]
| | +--ro te-link-id te-link-id
| | +--ro (stack-level)?
| | +--:(bundle)
| | | +--ro bundled-links
| | | +--ro bundled-link* [sequence]
| | | +--ro sequence uint32
| | | +--ro te-link-ref? leafref
| | +--:(component)
| | +--ro component-links
| | +--ro component-link* [sequence]
| | +--ro sequence uint32
| | +--ro component-link-ref? leafref
| +--ro connectivity-matrix* [id]
| | +--ro id uint32
| | +--ro from-link
| | | +--ro topo-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro to-link
| | | +--ro topo-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro is-allowed? boolean
| +--ro ted
| +--ro te-router-id-ipv4? inet:ipv4-address
| +--ro te-router-id-ipv6? inet:ipv6-address
| +--ro ipv4-local-address* [ipv4-prefix]
| | +--ro ipv4-prefix inet:ipv4-prefix
| +--ro ipv6-local-address* [ipv6-prefix]
| | +--ro ipv6-prefix inet:ipv6-prefix
| | +--ro prefix-option? uint8
| +--ro pcc-capabilities? pcc-capabilities
+---n te-link-event
+--ro event-type? te-topology-event-type
+--ro topo-ref? leafref
+--ro source-te-node-id-ref? leafref
+--ro source-te-link-id-ref? leafref
+--ro dest-te-node-id-ref? leafref
+--ro dest-te-link-id-ref? leafref
+--ro te-topology!
+--ro te-link-attributes
+--ro schedules* [schedule-id]
| +--ro schedule-id uint32
| +--ro start? yang:date-and-time
| +--ro schedule-duration? string
| +--ro repeat-interval? string
+--ro name? string
+--ro flag* flag-type
+--ro is-abstract? boolean
+--ro underlay! {te-topology-hierarchy}?
| +--ro underlay-path
| | +--ro topology-id? leafref
| | +--ro path-element* [path-element-id]
| | +--ro path-element-id uint32
| | +--ro loose? boolean
| | +--ro (element-type)?
| | +--:(numbered-link)
| | | +--ro link-ip-address? inet:ip-address
| | +--:(unnumbered-link)
| | | +--ro link-node-id? uint32
| | | +--ro te-link-id? uint32
| | +--:(node)
| | | +--ro te-node-id? uint32
| | +--:(label)
| | +--ro label? uint32
| +--ro underlay-backup-path
| | +--ro topology-id? leafref
| | +--ro path-element* [path-element-id]
| | +--ro path-element-id uint32
| | +--ro loose? boolean
| | +--ro (element-type)?
| | +--:(numbered-link)
| | | +--ro link-ip-address? inet:ip-address
| | +--:(unnumbered-link)
| | | +--ro link-node-id? uint32
| | | +--ro te-link-id? uint32
| | +--:(node)
| | | +--ro te-node-id? uint32
| | +--:(label)
| | +--ro label? uint32
| +--ro underlay-protection-type? uint16
| +--ro underlay-trail-src
| | +--ro topo-ref? leafref
| | +--ro node-ref? leafref
| | +--ro link-end-ref? leafref
| +--ro underlay-trail-des
| | +--ro topo-ref? leafref
| | +--ro node-ref? leafref
| | +--ro link-end-ref? leafref
| +--ro dynamic? boolean
| +--ro committed? boolean
+--ro ted
+--ro admin-status? enumeration
+--ro oper-status? enumeration
+--ro area-id? binary
+--ro performance-metric-throttle{te-performance-metric}?
| +--ro unidirectional-delay-offset? uint32
| +--ro measure-interval? uint32
| +--ro advertisement-interval? uint32
| +--ro suppression-interval? uint32
| +--ro threshold-out
| | +--ro unidirectional-delay? uint32
| | +--ro unidirectional-min-delay? uint32
| | +--ro unidirectional-max-delay? uint32
| | +--ro unidirectional-delay-variation? uint32
| | +--ro unidirectional-packet-loss?
decimal64
| | +--ro unidirectional-residual-bandwidth?
decimal64
| | +--ro unidirectional-available-bandwidth?
decimal64
| | +--ro unidirectional-utilized-bandwidth?
decimal64
| +--ro threshold-in
| | +--ro unidirectional-delay? uint32
| | +--ro unidirectional-min-delay? uint32
| | +--ro unidirectional-max-delay? uint32
| | +--ro unidirectional-delay-variation? uint32
| | +--ro unidirectional-packet-loss? decimal64
| | +--ro unidirectional-residual-bandwidth? decimal64
| | +--ro unidirectional-available-bandwidth? decimal64
| | +--ro unidirectional-utilized-bandwidth? decimal64
| +--ro threshold-accelerated-advertisement
| +--ro unidirectional-delay? uint32
| +--ro unidirectional-min-delay? uint32
| +--ro unidirectional-max-delay? uint32
| +--ro unidirectional-delay-variation? uint32
| +--ro unidirectional-packet-loss? decimal64
| +--ro unidirectional-residual-bandwidth? decimal64
| +--ro unidirectional-available-bandwidth? decimal64
| +--ro unidirectional-utilized-bandwidth? decimal64
+--ro information-source? enumeration
+--ro credibility-preference? uint16
+--ro link-index? uint64
+--ro administrative-group* [sequence]
| +--ro sequence uint32
| +--ro ag-element? uint32
+--ro max-link-bandwidth? decimal64
+--ro max-resv-link-bandwidth? decimal64
+--ro unreserved-bandwidth* [priority]
| +--ro priority uint8
| +--ro bandwidth? decimal64
+--ro te-default-metric? uint32
+--ro performance-metric {te-performance-metric}?
| +--ro measurement
| | +--ro unidirectional-delay? uint32
| | +--ro unidirectional-min-delay? uint32
| | +--ro unidirectional-max-delay? uint32
| | +--ro unidirectional-delay-variation? uint32
| | +--ro unidirectional-packet-loss? decimal64
| | +--ro unidirectional-residual-bandwidth? decimal64
| | +--ro unidirectional-available-bandwidth? decimal64
| | +--ro unidirectional-utilized-bandwidth? decimal64
| +--ro normality
| +--ro unidirectional-delay?
performance-metric-normality
| +--ro unidirectional-min-delay?
performance-metric-normality
| +--ro unidirectional-max-delay?
performance-metric-normality
| +--ro unidirectional-delay-variation?
performance-metric-normality
| +--ro unidirectional-packet-loss?
performance-metric-normality
| +--ro unidirectional-residual-bandwidth?
performance-metric-normality
| +--ro unidirectional-available-bandwidth?
performance-metric-normality
| +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
+--ro link-protection-type? enumeration
+--ro interface-switching-capabilities*
[switching-capability]
| +--ro switching-capability ted:switching-capabilities
| +--ro encoding? ted:encoding-type
| +--ro max-lsp-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro packet-switch-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro interface-mtu? uint16
| +--ro time-division-multiplex-capable
| +--ro minimum-lsp-bandwidth? decimal64
| +--ro indication? enumeration
+--ro srlg
| +--ro srlg-values* [srlg-value]
| +--ro srlg-value uint32
+--ro alt-information-sources* [information-source]
+--ro information-source enumeration
+--ro credibility-preference? uint16
+--ro link-index? uint64
+--ro administrative-group* [sequence]
| +--ro sequence uint32
| +--ro ag-element? uint32
+--ro max-link-bandwidth? decimal64
+--ro max-resv-link-bandwidth? decimal64
+--ro unreserved-bandwidth* [priority]
| +--ro priority uint8
| +--ro bandwidth? decimal64
+--ro te-default-metric? uint32
+--ro performance-metric {te-performance-metric}?
| +--ro measurement
| | +--ro unidirectional-delay? uint32
| | +--ro unidirectional-min-delay? uint32
| | +--ro unidirectional-max-delay? uint32
| | +--ro unidirectional-delay-variation? uint32
| | +--ro unidirectional-packet-loss? decimal64
| | +--ro unidirectional-residual-bandwidth?
decimal64
| | +--ro unidirectional-available-bandwidth?
decimal64
| | +--ro unidirectional-utilized-bandwidth?
decimal64
| +--ro normality
| +--ro unidirectional-delay?
performance-metric-normality
| +--ro unidirectional-min-delay?
performance-metric-normality
| +--ro unidirectional-max-delay?
performance-metric-normality
| +--ro unidirectional-delay-variation?
performance-metric-normality
| +--ro unidirectional-packet-loss?
performance-metric-normality
| +--ro unidirectional-residual-bandwidth?
performance-metric-normality Figure 2b: Native TE Topologies as seen on Node R3
| +--ro unidirectional-available-bandwidth?
performance-metric-normality
| +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
+--ro link-protection-type? enumeration
+--ro interface-switching-capabilities*
[switching-capability]
| +--ro switching-capability
ted:switching-capabilities
| +--ro encoding? ted:encoding-type
| +--ro max-lsp-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro packet-switch-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro interface-mtu? uint16
| +--ro time-division-multiplex-capable
| +--ro minimum-lsp-bandwidth? decimal64
| +--ro indication? enumeration
+--ro srlg
+--ro srlg-values* [srlg-value]
+--ro srlg-value uint32
3.1. TE Topology Yang Module Consider the case of the topology being split in a way that some
nodes participate in OSPF-TE while others participate in ISIS-TE
(Figure 2a). An implementation MAY choose to construct separate TE
Topologies based on the information source. The native TE Topologies
constructed using only nodes and links that were learnt via a
specific information source are depicted in Figure 2b. The data
model proposed in this document can be used to retrieve/represent
these TE topologies.
<CODE BEGINS> file "ietf-te-topology@2015-03-23.yang" Similarly, the data model can be used to represent/retrieve a TE
module ietf-te-topology { Topology that is constructed using only nodes and links that belong
yang-version 1; to a particular technology layer. The data model is flexible enough
namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology"; to retrieve and represent many such native TE Topologies.
// replace with IANA namespace when assigned
prefix "tet"; 3.2. Customized TE Topologies
import ietf-yang-types { The model discussed in this draft can be used to represent, retrieve
prefix "yang"; and manipulate customized TE Topologies. The model allows the
} provider to present the network in abstract TE Terms on a per client
basis. These customized topologies contain sufficient information
for the path computing client to select paths according to its
policies.
import ietf-inet-types { | +---+ /-\
prefix "inet"; | | | Router ( ) WDM
} | +---+ Node \-/ node
|
o----------------------------_____
__
+---+ /-\ /-\ /-\ +---+
| R1|-------( A )--------( C )---------( E )---------| R3|
+---+ \-/ \-/ \-/ +---+
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
+---+ /-\ /-\ /-\ +---+
| R2|---------( B )---------( D )---------( F )---------| R4|
+---+ \-/ \-/ \-/ +---+
import ted { Figure 3: Example packet optical topology
prefix "ted";
}
import ietf-interfaces { Consider the network topology depicted in Figure 3. This is a
prefix "if"; typical packet optical transport deployment scenario where the WDM
} layer network domain serves as a Server Network Domain providing
transport connectivity to the packet layer network Domain (Client
Network Domain). Nodes R1, R2, R3 and R4 are IP routers that are
connected to an Optical WDM transport network. A, B, C, D, E and F
are WDM nodes that constitute the Server Network Domain.
organization "TBD"; | ***** B-F WDM Path
contact "TBD"; | @@@@@ B-E WDM Path
description "TE topology model"; | $$$$$ A-E WDM Path
o--------------------_
revision "2015-03-23" { +---+ /-\ $$$$$$$$ /-\ $$$$$$$$$ /-\ +---+
description "Initial revision"; | R1|-------( A )--------( C )---------( E )---------| R3|
reference "TBD"; +---+ \-/ @\-/ @@@@@@@@@ \-/ +---+
} @/ \ / \
@/ \ / \
@/ \ / \
@/ \ / \
@/ \ / \
+---+ /-\ ********* /-\ ********* /-\ +---+
| R2|---------( B )---------( D )---------( F )---------| R4|
+---+ \-/ \-/ \-/ +---+
/* Figure 4a: Paths within the provider domain
* Features
*/
feature te-topology-hierarchy { ++++++++ [A] ++++++++++++++++++++ [E] +++++++++
description +++++
"This feature indicates that the system allows underlay ++++
and/or overlay TE topology hierarchy."; ++++
} ++++
++++
++++++++ [B] ++++++++++++++++++++ [F] +++++++++
/* Figure 4b: Customized TE Topology provided to the Client
* Typedefs
*/
typedef te-topology-id { [R1] ++++++++ [A] ++++++++++++++++++++ [E] +++++++++ [R3]
type string { +++++
pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*'; ++++
} ++++
description ++++
"An identifier for a topology."; ++++
} [R2] ++++++++ [B] ++++++++++++++++++++ [F] +++++++++ [R4]
typedef te-template-name { Figure 4c: Customized TE Topology merged with the Client's Native TE
type string { Topology
pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
}
description
"A type for the name of a TE node template or TE link
template.";
}
typedef te-node-id { The goal here is to augment the Client TE Topology with a customized
type inet:ip-address; TE Topology provided by the WDM network. Given the availability of
description the paths A-E, B-F and B-E (Figure 4a), a customized TE Topology as
"An identifier for a node in a topology. depicted in Figure 4b is provided to the Client. This customized TE
The identifier is represented as an IPv4 or IPv6 address. Topology is merged with the Client's Native TE Topology and the
resulting topology is depicted in Figure 4c.
The identifier SHOULD be chosen such that the same node in a The data model proposed in this document can be used to
real network topology will always be identified through the retrieve/represent/manipulate the customized TE Topology depicted in
same identifier, even if the model is instantiated in Figure 4b.
separate datastores. An implementation MAY choose to capture
semantics in the identifier, for example to indicate the type
of node and/or the type of topology that the node is a part
of.";
}
typedef te-link-id { 4. Modeling Considerations
type union {
type uint32; // Unnumbered
type inet:ip-address; // IPv4 or IPv6 address
}
description
"An identifier for a TE link on a node.
The identifier may be opaque.
The identifier SHOULD be chosen such that the same TP in a
real network topology will always be identified through the
same identifier, even if the model is instantiated in
separate datastores. An implementation MAY choose to capture
semantics in the identifier, for example to indicate the type
of TP and/or the type of node and topology that the TP is a
part of.";
}
typedef te-topology-event-type { 4.1. Generic extensible Model
type enumeration {
enum "add" { The TE Topology model proposed in this document is meant to be
value 0; technology agnostic. Other technology specific TE Topology models
description can augment and use the building blocks provided by the proposed
"A TE node or te-link has model.
been added";
} +-------------------+
enum "remove" { | Generic |
value 1; | TE Topology Model |
description +-------------------+
"A TE node or te-link has |
been removed"; +-------------+-------------+-------------+
} | | | |
enum "update" { V V V V
value 2; +------------+ +------------+
description | Technology | | Technology |
"A TE node or te-link has | Specific | ...................... | Specific |
been updated"; | TE Topology| | TE Topology|
} | Model 1 | | Model n |
+------------+ +------------+
Figure 5: Extending the generic model
4.2. Model Structure
The high-level model structure proposed by this document is as shown
below:
+--rw te-topologies
| +--rw topology* [provider-id client-id te-topology-id]
| | ..........
| | +--rw node* [te-node-id]
| | | ..........
| | | +--rw te-link* [te-link-id]
| | | ..........
| | +--rw link* [source-te-node-id source-te-link-id dest-te-
node-id dest-te-link-id]
| | | ..........
| +--rw node-template* [name] {template}?
| | ..........
| +--rw link-template* [name] {template}?
| | ..........
+--ro te-topologies-state
+--ro topology* [provider-id client-id te-topology-id]
| ..........
+--ro node* [te-node-id]
| | ..........
| +--ro te-node-state
| ..........
+--ro link* [source-te-node-id source-te-link-id dest-te-
node-id dest-te-link-id]
| | ..........
| +--ro te-link-state
| ..........
notifications:
+---n te-node-event
| ..........
+---n te-link-event
..........
4.3. Topology Identifiers
The TE-Topology is uniquely identified by a key that has 3
constituents - te-topology-id, provider-id and client-id. The
combination of provider-id and te-topology-id uniquely identifies a
native TE Topology on a given provider. The client-id is used only
when Customized TE Topologies come into play; a value of "0" is used
as the client-id for native TE Topologies.
+--rw topology* [provider-id client-id te-topology-id]
| +--rw provider-id te-global-id
| +--rw client-id te-global-id
| +--rw te-topology-id te-topology-id
4.4. Generic TE Link Attributes
The model covers the definitions for generic TE Link attributes -
bandwidth, admin groups, SRLGs, switching capabilities, TE metric
extensions etc.
+--rw te-link-attributes
| ..........
| +--rw performance-metric-throttle {te-performance-metric}?
| | ..........
| +--rw administrative-group? te-types:admin-groups
| +--rw max-link-bandwidth? decimal64
| +--rw max-resv-link-bandwidth? decimal64
| +--rw unreserved-bandwidth* [priority]
| | ..........
| +--rw te-default-metric? uint32
| +--rw performance-metric {te-performance-metric}?
| | ..........
| +--rw link-protection-type? enumeration
| +--rw interface-switching-capabilities* [switching-capability]
| | ..........
| +--rw te-srlgs
| | ..........
4.5. Generic TE Node Attributes
The model covers the definitions for generic TE Node attributes. The
definition of a generic connectivity matrix is shown below:
+--rw te-node-attributes
| ..........
| +--rw connectivity-matrix* [id]
| +--rw id uint32
| +--rw from-link
| | +--rw provider-id-ref? leafref
| | +--rw client-id-ref? leafref
| | +--rw topology-id-ref? leafref
| | +--rw node-ref? leafref
| | +--rw link-end-ref? leafref
| +--rw to-link
| | +--rw provider-id-ref? leafref
| | +--rw client-id-ref? leafref
| | +--rw topology-id-ref? leafref
| | +--rw node-ref? leafref
| | +--rw link-end-ref? leafref
| +--rw is-allowed? Boolean
4.6. TED Information Sources
The model allows each TE topological element to have multiple TE
information sources (OSPF-TE, ISIS-TE, BGP-LS, User-Configured,
System-Processed, Other). Each information source is associated with
a credibility preference to indicate precedence. In scenarios where
a customized TE Topology is merged into a Client's native TE
Topology, the merged topological elements would point to the
corresponding customized TE Topology as its information source.
+--ro te-topologies-state
+--ro topology* [provider-id client-id te-topology-id]
| ..........
+--ro node* [te-node-id]
| ..........
| +--ro te-node-state
| +--ro information-source? enumeration
| +--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro topology
| | +--ro provider-id-ref? leafref
| | +--ro client-id-ref? leafref
| | +--ro topology-id-ref? leafref
| +--ro routing-instance? string
+--ro te-topologies-state
+--ro topology* [provider-id client-id te-topology-id]
| ..........
+--ro link* [source-te-node-id source-te-link-id dest-te-
node-id dest-te-link-id]
| ..........
| +--ro te-link-state
| +--ro information-source? enumeration
| +--ro information-source-state
| | +--ro credibility-preference? uint16
| | +--ro topology
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | +--ro routing-instance? string
| +--ro alt-information-sources* [information-source]
| +--ro information-source
enumeration
| +--ro information-source-state
| | +--ro credibility-preference? uint16
| | +--ro topology
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | +--ro routing-instance? string
| | ..........
4.7. Overlay/Underlay Relationship
The model captures overlay and underlay relationship for TE
nodes/links. For example - in networks where multiple TE Topologies
are built hierarchically, this model allows the user to start from a
specific topological element in the top most topology and traverse
all the way down to the supporting topological elements in the
bottom most topology.
This relationship is captured via the "underlay-topology" field for
the node and via the "underlay" field for the link. The use of these
fields is optional and this functionality is tagged as a "feature"
("te-topology-hierarchy").
+--rw node* [te-node-id]
| ..........
| +--rw te-node-attributes
| | ..........
| | +--rw underlay-topology {te-topology-hierarchy}?
| | | +--rw provider-id-ref? leafref
| | | +--rw client-id-ref? leafref
| | | +--rw topology-id-ref? leafref
+--rw link* [source-te-node-id source-te-link-id dest-te-node-id
dest-te-link-id]
| ..........
| +--rw te-link-attributes
| | .......
| | +--rw underlay! {te-topology-hierarchy}?
| | | +--rw underlay-primary-path
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | | +--rw path-element* [path-element-id]
| | | | ..........
| | | +--rw underlay-backup-path* [index]
| | | | +--rw index uint32
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | | +--rw path-element* [path-element-id]
| | | | ..........
| | | +--rw underlay-protection-type? uint16
| | | +--rw underlay-trail-src
| | | ..........
| | | +--rw underlay-trail-des
| | | ..........
4.8. Scheduling Parameters
The model allows time scheduling parameters to be specified for each
topological element or for the topology as a whole. These parameters
allow the provider to present different topological views to the
client at different time slots. The use of "scheduling parameters"
is optional and this functionality is tagged as a "feature"
("configuration-schedule"). [Editor's Note: The notion of
"scheduling parameters" has wider applicability. The expectation is
that this will eventually be discussed in a separate document.]
+--rw schedules* [schedule-id] {configuration-schedule}?
| +--rw schedule-id uint32
| +--rw start? yang:date-and-time
| +--rw schedule-duration? string
| +--rw repeat-interval? string
4.9. Templates
The data model provides the users with the ability to define
templates and apply them to link and node configurations. The use of
"template" configuration is optional and this functionality is
tagged as a "feature" ("template").
+--rw topology* [provider-id client-id te-topology-id]
| ...........
| +--rw node* [te-node-id]
| | +--rw te-node-template? leafref {template}?
| | ..........
| +--rw link* [source-te-node-id source-te-link-id dest-te-node-
id dest-te-link-id]
| +--rw te-link-template? leafref {template}?
| ..........
|
+--rw node-template* [name] {template}?
| +--rw name te-template-name
| +--rw priority? uint16
| +--rw reference-change-policy? enumeration
| +--rw te-node-template* leafref
| +--rw te-node-attributes
| ..........
+--rw link-template* [name] {template}?
+--rw name te-template-name
+--rw priority? uint16
+--rw reference-change-policy? enumeration
+--rw te-link-template* leafref
+--rw te-link-attributes
..........
A template can be constructed using multiple other templates. When
two or more templates specify values for the same configuration
field, the value from the template with the highest priority is
used. The reference-change-policy specifies the action that needs to
be taken when the template changes on a configuration node that has
a reference to this template. The choices of action include taking
no action, rejecting the change to the template and applying the
change to the corresponding configuration. [Editor's Note: The
notion of "templates" has wider applicability. It is possible for
this to be discussed in a separate document.]
4.10. Notifications
Notifications are a key component of any topology data model.
[YANG-PUSH] defines a subscription and push mechanism for YANG
datastores. This mechanism currently allows the user to:
- Subscribe notifications on a per client basis
- Specify subtree filters or xpath filters so that only interested
contents will be sent.
- Specify either periodic or on-demand notifications.
The authors would like to recommend the use of this mechanism for
the TE-Topology notifications. They would also like to suggest the
following extensions to [YANG-PUSH]
- Specify specific entities that will trigger the push
notifications. These entities can be specified by xpath, like the
way a filter is specified.
- Specify or limit the triggering event type, e.g. "add", "delete",
"modify", or "all". The system sends the push notifications only
when such events happen on the triggering entities.
- Have an option to request either "incremental" or "full"
notifications for an entity. For "incremental", the notification
will contain only the changed attributes.
4.11. Open Items
- Augmenting [YANG-NET-TOPO]: The generic network topology building
blocks are discussed in [YANG-NET-TOPO]. This version of the
document does not use any of those constructs. The next revision
of this document should augment these constructs.
- Coordinating changes to [YANG-PUSH]: The changes to [YANG-PUSH]
discussed in Section 4.10 will need to be coordinated with the
authors of that draft.
5. Tree Structure
module: ietf-te-topology
+--rw te-topologies
| +--rw topology* [provider-id client-id te-topology-id]
| | +--rw provider-id te-global-id
| | +--rw client-id te-global-id
| | +--rw te-topology-id te-topology-id
| | +--rw schedules* [schedule-id] {configuration-schedule}?
| | | +--rw schedule-id uint32
| | | +--rw start? yang:date-and-time
| | | +--rw schedule-duration? string
| | | +--rw repeat-interval? string
| | +--rw topology-types
| | | +--rw te-topology!
| | +--rw node* [te-node-id]
| | | +--rw te-node-id te-node-id
| | | +--rw te-node-template? leafref {template}?
| | | +--rw te-node-attributes
| | | | +--rw schedules* [schedule-id] {configuration-
schedule}?
| | | | | +--rw schedule-id uint32
| | | | | +--rw start? yang:date-and-time
| | | | | +--rw schedule-duration? string
| | | | | +--rw repeat-interval? string
| | | | +--rw name? inet:domain-name
| | | | +--rw signaling-address* inet:ip-address
| | | | +--rw flag* flag-type
| | | | +--rw is-abstract? boolean
| | | | +--rw underlay-topology {te-topology-hierarchy}?
| | | | | +--rw provider-id-ref? leafref
| | | | | +--rw client-id-ref? leafref
| | | | | +--rw topology-id-ref? leafref
| | | | +--rw connectivity-matrix* [id]
| | | | +--rw id uint32
| | | | +--rw from-link
| | | | | +--rw provider-id-ref? leafref
| | | | | +--rw client-id-ref? leafref
| | | | | +--rw topology-id-ref? leafref
| | | | | +--rw node-ref? leafref
| | | | | +--rw link-end-ref? leafref
| | | | +--rw to-link
| | | | | +--rw provider-id-ref? leafref
| | | | | +--rw client-id-ref? leafref
| | | | | +--rw topology-id-ref? leafref
| | | | | +--rw node-ref? leafref
| | | | | +--rw link-end-ref? leafref
| | | | +--rw is-allowed? boolean
| | | +--rw te-link* [te-link-id]
| | | +--rw te-link-id te-link-id
| | | +--rw (stack-level)?
| | | +--:(bundle)
| | | | +--rw bundled-links
| | | | +--rw bundled-link* [sequence]
| | | | +--rw sequence uint32
| | | | +--rw te-link-ref? leafref
| | | +--:(component)
| | | +--rw component-links
| | | +--rw component-link* [sequence]
| | | +--rw sequence uint32
| | | +--rw component-link-ref? leafref
| | +--rw link* [source-te-node-id source-te-link-id dest-te-
node-id dest-te-link-id]
| | +--rw source-te-node-id leafref
| | +--rw source-te-link-id leafref
| | +--rw dest-te-node-id leafref
| | +--rw dest-te-link-id leafref
| | +--rw te-link-template? leafref {template}?
| | +--rw te-link-attributes
| | +--rw schedules* [schedule-id] {configuration-
schedule}?
| | | +--rw schedule-id uint32
| | | +--rw start? yang:date-and-time
| | | +--rw schedule-duration? string
| | | +--rw repeat-interval? string
| | +--rw name? string
| | +--rw flag* flag-type
| | +--rw is-abstract? boolean
| | +--rw underlay! {te-topology-hierarchy}?
| | | +--rw underlay-primary-path
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | | +--rw path-element* [path-element-id]
| | | | +--rw path-element-id uint32
| | | | +--rw (type)?
| | | | +--:(ipv4-address)
| | | | | +--rw v4-address? inet:ipv4-
address
| | | | | +--rw v4-prefix-length? uint8
| | | | | +--rw v4-loose? boolean
| | | | +--:(ipv6-address)
| | | | | +--rw v6-address? inet:ipv6-
address
| | | | | +--rw v6-prefix-length? uint8
| | | | | +--rw v6-loose? boolean
| | | | +--:(as-number)
| | | | | +--rw as-number? uint16
| | | | +--:(unnumbered-link)
| | | | | +--rw router-id? inet:ip-
address
| | | | | +--rw interface-id? uint32
| | | | +--:(label)
| | | | +--rw value? uint32
| | | +--rw underlay-backup-path* [index]
| | | | +--rw index uint32
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | | +--rw path-element* [path-element-id]
| | | | +--rw path-element-id uint32
| | | | +--rw (type)?
| | | | +--:(ipv4-address)
| | | | | +--rw v4-address? inet:ipv4-
address
| | | | | +--rw v4-prefix-length? uint8
| | | | | +--rw v4-loose? boolean
| | | | +--:(ipv6-address)
| | | | | +--rw v6-address? inet:ipv6-
address
| | | | | +--rw v6-prefix-length? uint8
| | | | | +--rw v6-loose? boolean
| | | | +--:(as-number)
| | | | | +--rw as-number? uint16
| | | | +--:(unnumbered-link)
| | | | | +--rw router-id? inet:ip-
address
| | | | | +--rw interface-id? uint32
| | | | +--:(label)
| | | | +--rw value? uint32
| | | +--rw underlay-protection-type? uint16
| | | +--rw underlay-trail-src
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | | +--rw node-ref? leafref
| | | | +--rw link-end-ref? leafref
| | | +--rw underlay-trail-des
| | | +--rw provider-id-ref? leafref
| | | +--rw client-id-ref? leafref
| | | +--rw topology-id-ref? leafref
| | | +--rw node-ref? leafref
| | | +--rw link-end-ref? leafref
| | +--rw admin-status? enumeration
| | +--rw performance-metric-throttle {te-performance-
metric}?
| | | +--rw unidirectional-delay-offset?
uint32
| | | +--rw measure-interval?
uint32
| | | +--rw advertisement-interval?
uint32
| | | +--rw suppression-interval?
uint32
| | | +--rw threshold-out
| | | | +--rw unidirectional-delay?
uint32
| | | | +--rw unidirectional-min-delay?
uint32
| | | | +--rw unidirectional-max-delay?
uint32
| | | | +--rw unidirectional-delay-variation?
uint32
| | | | +--rw unidirectional-packet-loss?
decimal64
| | | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | | +--rw unidirectional-available-bandwidth?
decimal64
| | | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | | +--rw threshold-in
| | | | +--rw unidirectional-delay?
uint32
| | | | +--rw unidirectional-min-delay?
uint32
| | | | +--rw unidirectional-max-delay?
uint32
| | | | +--rw unidirectional-delay-variation?
uint32
| | | | +--rw unidirectional-packet-loss?
decimal64
| | | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | | +--rw unidirectional-available-bandwidth?
decimal64
| | | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | | +--rw threshold-accelerated-advertisement
| | | +--rw unidirectional-delay?
uint32
| | | +--rw unidirectional-min-delay?
uint32
| | | +--rw unidirectional-max-delay?
uint32
| | | +--rw unidirectional-delay-variation?
uint32
| | | +--rw unidirectional-packet-loss?
decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw link-index? uint64
| | +--rw administrative-group? te-
types:admin-groups
| | +--rw max-link-bandwidth? decimal64
| | +--rw max-resv-link-bandwidth? decimal64
| | +--rw unreserved-bandwidth* [priority]
| | | +--rw priority uint8
| | | +--rw bandwidth? decimal64
| | +--rw te-default-metric? uint32
| | +--rw performance-metric {te-performance-metric}?
| | | +--rw measurement
| | | | +--rw unidirectional-delay?
uint32
| | | | +--rw unidirectional-min-delay?
uint32
| | | | +--rw unidirectional-max-delay?
uint32
| | | | +--rw unidirectional-delay-variation?
uint32
| | | | +--rw unidirectional-packet-loss?
decimal64
| | | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | | +--rw unidirectional-available-bandwidth?
decimal64
| | | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | | +--rw normality
| | | +--rw unidirectional-delay?
performance-metric-normality
| | | +--rw unidirectional-min-delay?
performance-metric-normality
| | | +--rw unidirectional-max-delay?
performance-metric-normality
| | | +--rw unidirectional-delay-variation?
performance-metric-normality
| | | +--rw unidirectional-packet-loss?
performance-metric-normality
| | | +--rw unidirectional-residual-bandwidth?
performance-metric-normality
| | | +--rw unidirectional-available-bandwidth?
performance-metric-normality
| | | +--rw unidirectional-utilized-bandwidth?
performance-metric-normality
| | +--rw link-protection-type? enumeration
| | +--rw interface-switching-capabilities* [switching-
capability]
| | | +--rw switching-capability
identityref
| | | +--rw encoding?
identityref
| | | +--rw max-lsp-bandwidth* [priority]
| | | | +--rw priority uint8
| | | | +--rw bandwidth? decimal64
| | | +--rw packet-switch-capable
| | | | +--rw minimum-lsp-bandwidth? decimal64
| | | | +--rw interface-mtu? uint16
| | | +--rw time-division-multiplex-capable
| | | +--rw minimum-lsp-bandwidth? decimal64
| | | +--rw indication? enumeration
| | +--rw te-srlgs
| | +--rw values* te-types:srlg
| +--rw node-template* [name] {template}?
| | +--rw name te-template-name
| | +--rw priority? uint16
| | +--rw reference-change-policy? enumeration
| | +--rw te-node-template* leafref
| | +--rw te-node-attributes
| | | +--rw schedules* [schedule-id] {configuration-schedule}?
| | | | +--rw schedule-id uint32
| | | | +--rw start? yang:date-and-time
| | | | +--rw schedule-duration? string
| | | | +--rw repeat-interval? string
| | | +--rw name? inet:domain-name
| | | +--rw signaling-address* inet:ip-address
| | | +--rw flag* flag-type
| | | +--rw is-abstract? boolean
| | | +--rw underlay-topology {te-topology-hierarchy}?
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | +--rw connectivity-matrix* [id]
| | | +--rw id uint32
| | | +--rw from-link
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | | +--rw node-ref? leafref
| | | | +--rw link-end-ref? leafref
| | | +--rw to-link
| | | | +--rw provider-id-ref? leafref
| | | | +--rw client-id-ref? leafref
| | | | +--rw topology-id-ref? leafref
| | | | +--rw node-ref? leafref
| | | | +--rw link-end-ref? leafref
| | | +--rw is-allowed? boolean
| | +--rw te-link* [te-link-id]
| | +--rw te-link-id te-link-id
| | +--rw (stack-level)?
| | +--:(bundle)
| | | +--rw bundled-links
| | | +--rw bundled-link* [sequence]
| | | +--rw sequence uint32
| | | +--rw te-link-ref? leafref
| | +--:(component)
| | +--rw component-links
| | +--rw component-link* [sequence]
| | +--rw sequence uint32
| | +--rw component-link-ref? leafref
| +--rw link-template* [name] {template}?
| +--rw name te-template-name
| +--rw priority? uint16
| +--rw reference-change-policy? enumeration
| +--rw te-link-template* leafref
| +--rw te-link-attributes
| +--rw schedules* [schedule-id] {configuration-schedule}?
| | +--rw schedule-id uint32
| | +--rw start? yang:date-and-time
| | +--rw schedule-duration? string
| | +--rw repeat-interval? string
| +--rw name? string
| +--rw flag* flag-type
| +--rw is-abstract? boolean
| +--rw underlay! {te-topology-hierarchy}?
| | +--rw underlay-primary-path
| | | +--rw provider-id-ref? leafref
| | | +--rw client-id-ref? leafref
| | | +--rw topology-id-ref? leafref
| | | +--rw path-element* [path-element-id]
| | | +--rw path-element-id uint32
| | | +--rw (type)?
| | | +--:(ipv4-address)
| | | | +--rw v4-address? inet:ipv4-
address
| | | | +--rw v4-prefix-length? uint8
| | | | +--rw v4-loose? boolean
| | | +--:(ipv6-address)
| | | | +--rw v6-address? inet:ipv6-
address
| | | | +--rw v6-prefix-length? uint8
| | | | +--rw v6-loose? boolean
| | | +--:(as-number)
| | | | +--rw as-number? uint16
| | | +--:(unnumbered-link)
| | | | +--rw router-id? inet:ip-address
| | | | +--rw interface-id? uint32
| | | +--:(label)
| | | +--rw value? uint32
| | +--rw underlay-backup-path* [index]
| | | +--rw index uint32
| | | +--rw provider-id-ref? leafref
| | | +--rw client-id-ref? leafref
| | | +--rw topology-id-ref? leafref
| | | +--rw path-element* [path-element-id]
| | | +--rw path-element-id uint32
| | | +--rw (type)?
| | | +--:(ipv4-address)
| | | | +--rw v4-address? inet:ipv4-
address
| | | | +--rw v4-prefix-length? uint8
| | | | +--rw v4-loose? boolean
| | | +--:(ipv6-address)
| | | | +--rw v6-address? inet:ipv6-
address
| | | | +--rw v6-prefix-length? uint8
| | | | +--rw v6-loose? boolean
| | | +--:(as-number)
| | | | +--rw as-number? uint16
| | | +--:(unnumbered-link)
| | | | +--rw router-id? inet:ip-address
| | | | +--rw interface-id? uint32
| | | +--:(label)
| | | +--rw value? uint32
| | +--rw underlay-protection-type? uint16
| | +--rw underlay-trail-src
| | | +--rw provider-id-ref? leafref
| | | +--rw client-id-ref? leafref
| | | +--rw topology-id-ref? leafref
| | | +--rw node-ref? leafref
| | | +--rw link-end-ref? leafref
| | +--rw underlay-trail-des
| | +--rw provider-id-ref? leafref
| | +--rw client-id-ref? leafref
| | +--rw topology-id-ref? leafref
| | +--rw node-ref? leafref
| | +--rw link-end-ref? leafref
| +--rw admin-status? enumeration
| +--rw performance-metric-throttle {te-performance-
metric}?
| | +--rw unidirectional-delay-offset? uint32
| | +--rw measure-interval? uint32
| | +--rw advertisement-interval? uint32
| | +--rw suppression-interval? uint32
| | +--rw threshold-out
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss?
decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw threshold-in
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss?
decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw threshold-accelerated-advertisement
| | +--rw unidirectional-delay? uint32
| | +--rw unidirectional-min-delay? uint32
| | +--rw unidirectional-max-delay? uint32
| | +--rw unidirectional-delay-variation? uint32
| | +--rw unidirectional-packet-loss?
decimal64
| | +--rw unidirectional-residual-bandwidth?
decimal64
| | +--rw unidirectional-available-bandwidth?
decimal64
| | +--rw unidirectional-utilized-bandwidth?
decimal64
| +--rw link-index? uint64
| +--rw administrative-group? te-
types:admin-groups
| +--rw max-link-bandwidth? decimal64
| +--rw max-resv-link-bandwidth? decimal64
| +--rw unreserved-bandwidth* [priority]
| | +--rw priority uint8
| | +--rw bandwidth? decimal64
| +--rw te-default-metric? uint32
| +--rw performance-metric {te-performance-metric}?
| | +--rw measurement
| | | +--rw unidirectional-delay? uint32
| | | +--rw unidirectional-min-delay? uint32
| | | +--rw unidirectional-max-delay? uint32
| | | +--rw unidirectional-delay-variation? uint32
| | | +--rw unidirectional-packet-loss?
decimal64
| | | +--rw unidirectional-residual-bandwidth?
decimal64
| | | +--rw unidirectional-available-bandwidth?
decimal64
| | | +--rw unidirectional-utilized-bandwidth?
decimal64
| | +--rw normality
| | +--rw unidirectional-delay?
performance-metric-normality
| | +--rw unidirectional-min-delay?
performance-metric-normality
| | +--rw unidirectional-max-delay?
performance-metric-normality
| | +--rw unidirectional-delay-variation?
performance-metric-normality
| | +--rw unidirectional-packet-loss?
performance-metric-normality
| | +--rw unidirectional-residual-bandwidth?
performance-metric-normality
| | +--rw unidirectional-available-bandwidth?
performance-metric-normality
| | +--rw unidirectional-utilized-bandwidth?
performance-metric-normality
| +--rw link-protection-type? enumeration
| +--rw interface-switching-capabilities* [switching-
capability]
| | +--rw switching-capability identityref
| | +--rw encoding? identityref
| | +--rw max-lsp-bandwidth* [priority]
| | | +--rw priority uint8
| | | +--rw bandwidth? decimal64
| | +--rw packet-switch-capable
| | | +--rw minimum-lsp-bandwidth? decimal64
| | | +--rw interface-mtu? uint16
| | +--rw time-division-multiplex-capable
| | +--rw minimum-lsp-bandwidth? decimal64
| | +--rw indication? enumeration
| +--rw te-srlgs
| +--rw values* te-types:srlg
+--ro te-topologies-state
+--ro topology* [provider-id client-id te-topology-id]
+--ro provider-id te-global-id
+--ro client-id te-global-id
+--ro te-topology-id te-topology-id
+--ro server-provided? boolean
+--ro topology-types
| +--ro te-topology!
+--ro node* [te-node-id]
| +--ro te-node-id te-node-id
| +--ro te-node-template? leafref {template}?
| +--ro te-node-attributes
| | +--ro schedules* [schedule-id] {configuration-
schedule}?
| | | +--ro schedule-id uint32
| | | +--ro start? yang:date-and-time
| | | +--ro schedule-duration? string
| | | +--ro repeat-interval? string
| | +--ro name? inet:domain-name
| | +--ro signaling-address* inet:ip-address
| | +--ro flag* flag-type
| | +--ro is-abstract? boolean
| | +--ro underlay-topology {te-topology-hierarchy}?
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | +--ro connectivity-matrix* [id]
| | +--ro id uint32
| | +--ro from-link
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro to-link
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro is-allowed? boolean
| +--ro te-link* [te-link-id]
| | +--ro te-link-id te-link-id
| | +--ro (stack-level)?
| | +--:(bundle)
| | | +--ro bundled-links
| | | +--ro bundled-link* [sequence]
| | | +--ro sequence uint32
| | | +--ro te-link-ref? leafref
| | +--:(component)
| | +--ro component-links
| | +--ro component-link* [sequence]
| | +--ro sequence uint32
| | +--ro component-link-ref? leafref
| +--ro te-node-state
| +--ro information-source? enumeration
| +--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro topology
| | +--ro provider-id-ref? leafref
| | +--ro client-id-ref? leafref
| | +--ro topology-id-ref? leafref
| +--ro routing-instance? string
+--ro link* [source-te-node-id source-te-link-id dest-te-
node-id dest-te-link-id]
+--ro source-te-node-id leafref
+--ro source-te-link-id leafref
+--ro dest-te-node-id leafref
+--ro dest-te-link-id leafref
+--ro te-link-template? leafref {template}?
+--ro te-link-attributes
| +--ro schedules* [schedule-id] {configuration-
schedule}?
| | +--ro schedule-id uint32
| | +--ro start? yang:date-and-time
| | +--ro schedule-duration? string
| | +--ro repeat-interval? string
| +--ro name? string
| +--ro flag* flag-type
| +--ro is-abstract? boolean
| +--ro underlay! {te-topology-hierarchy}?
| | +--ro underlay-primary-path
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro path-element* [path-element-id]
| | | +--ro path-element-id uint32
| | | +--ro (type)?
| | | +--:(ipv4-address)
| | | | +--ro v4-address? inet:ipv4-
address
| | | | +--ro v4-prefix-length? uint8
| | | | +--ro v4-loose? boolean
| | | +--:(ipv6-address)
| | | | +--ro v6-address? inet:ipv6-
address
| | | | +--ro v6-prefix-length? uint8
| | | | +--ro v6-loose? boolean
| | | +--:(as-number)
| | | | +--ro as-number? uint16
| | | +--:(unnumbered-link)
| | | | +--ro router-id? inet:ip-
address
| | | | +--ro interface-id? uint32
| | | +--:(label)
| | | +--ro value? uint32
| | +--ro underlay-backup-path* [index]
| | | +--ro index uint32
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro path-element* [path-element-id]
| | | +--ro path-element-id uint32
| | | +--ro (type)?
| | | +--:(ipv4-address)
| | | | +--ro v4-address? inet:ipv4-
address
| | | | +--ro v4-prefix-length? uint8
| | | | +--ro v4-loose? boolean
| | | +--:(ipv6-address)
| | | | +--ro v6-address? inet:ipv6-
address
| | | | +--ro v6-prefix-length? uint8
| | | | +--ro v6-loose? boolean
| | | +--:(as-number)
| | | | +--ro as-number? uint16
| | | +--:(unnumbered-link)
| | | | +--ro router-id? inet:ip-
address
| | | | +--ro interface-id? uint32
| | | +--:(label)
| | | +--ro value? uint32
| | +--ro underlay-protection-type? uint16
| | +--ro underlay-trail-src
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro underlay-trail-des
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro dynamic? boolean
| | +--ro committed? boolean
| +--ro admin-status? enumeration
| +--ro performance-metric-throttle {te-performance-
metric}?
| | +--ro unidirectional-delay-offset?
uint32
| | +--ro measure-interval?
uint32
| | +--ro advertisement-interval?
uint32
| | +--ro suppression-interval?
uint32
| | +--ro threshold-out
| | | +--ro unidirectional-delay?
uint32
| | | +--ro unidirectional-min-delay?
uint32
| | | +--ro unidirectional-max-delay?
uint32
| | | +--ro unidirectional-delay-variation?
uint32
| | | +--ro unidirectional-packet-loss?
decimal64
| | | +--ro unidirectional-residual-bandwidth?
decimal64
| | | +--ro unidirectional-available-bandwidth?
decimal64
| | | +--ro unidirectional-utilized-bandwidth?
decimal64
| | +--ro threshold-in
| | | +--ro unidirectional-delay?
uint32
| | | +--ro unidirectional-min-delay?
uint32
| | | +--ro unidirectional-max-delay?
uint32
| | | +--ro unidirectional-delay-variation?
uint32
| | | +--ro unidirectional-packet-loss?
decimal64
| | | +--ro unidirectional-residual-bandwidth?
decimal64
| | | +--ro unidirectional-available-bandwidth?
decimal64
| | | +--ro unidirectional-utilized-bandwidth?
decimal64
| | +--ro threshold-accelerated-advertisement
| | +--ro unidirectional-delay?
uint32
| | +--ro unidirectional-min-delay?
uint32
| | +--ro unidirectional-max-delay?
uint32
| | +--ro unidirectional-delay-variation?
uint32
| | +--ro unidirectional-packet-loss?
decimal64
| | +--ro unidirectional-residual-bandwidth?
decimal64
| | +--ro unidirectional-available-bandwidth?
decimal64
| | +--ro unidirectional-utilized-bandwidth?
decimal64
| +--ro link-index? uint64
| +--ro administrative-group? te-
types:admin-groups
| +--ro max-link-bandwidth? decimal64
| +--ro max-resv-link-bandwidth? decimal64
| +--ro unreserved-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro te-default-metric? uint32
| +--ro performance-metric {te-performance-metric}?
| | +--ro measurement
| | | +--ro unidirectional-delay?
uint32
| | | +--ro unidirectional-min-delay?
uint32
| | | +--ro unidirectional-max-delay?
uint32
| | | +--ro unidirectional-delay-variation?
uint32
| | | +--ro unidirectional-packet-loss?
decimal64
| | | +--ro unidirectional-residual-bandwidth?
decimal64
| | | +--ro unidirectional-available-bandwidth?
decimal64
| | | +--ro unidirectional-utilized-bandwidth?
decimal64
| | +--ro normality
| | +--ro unidirectional-delay?
performance-metric-normality
| | +--ro unidirectional-min-delay?
performance-metric-normality
| | +--ro unidirectional-max-delay?
performance-metric-normality
| | +--ro unidirectional-delay-variation?
performance-metric-normality
| | +--ro unidirectional-packet-loss?
performance-metric-normality
| | +--ro unidirectional-residual-bandwidth?
performance-metric-normality
| | +--ro unidirectional-available-bandwidth?
performance-metric-normality
| | +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
| +--ro link-protection-type? enumeration
| +--ro interface-switching-capabilities* [switching-
capability]
| | +--ro switching-capability
identityref
| | +--ro encoding?
identityref
| | +--ro max-lsp-bandwidth* [priority]
| | | +--ro priority uint8
| | | +--ro bandwidth? decimal64
| | +--ro packet-switch-capable
| | | +--ro minimum-lsp-bandwidth? decimal64
| | | +--ro interface-mtu? uint16
| | +--ro time-division-multiplex-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro indication? enumeration
| +--ro te-srlgs
| +--ro values* te-types:srlg
+--ro te-link-state
+--ro oper-status? enumeration
+--ro information-source? enumeration
+--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro topology
| | +--ro provider-id-ref? leafref
| | +--ro client-id-ref? leafref
| | +--ro topology-id-ref? leafref
| +--ro routing-instance? string
+--ro alt-information-sources* [information-source]
+--ro information-source
enumeration
+--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro topology
| | +--ro provider-id-ref? leafref
| | +--ro client-id-ref? leafref
| | +--ro topology-id-ref? leafref
| +--ro routing-instance? string
+--ro link-index? uint64
+--ro administrative-group? te-
types:admin-groups
+--ro max-link-bandwidth?
decimal64
+--ro max-resv-link-bandwidth?
decimal64
+--ro unreserved-bandwidth* [priority]
| +--ro priority uint8
| +--ro bandwidth? decimal64
+--ro te-default-metric? uint32
+--ro performance-metric {te-performance-metric}?
| +--ro measurement
| | +--ro unidirectional-delay?
uint32
| | +--ro unidirectional-min-delay?
uint32
| | +--ro unidirectional-max-delay?
uint32
| | +--ro unidirectional-delay-variation?
uint32
| | +--ro unidirectional-packet-loss?
decimal64
| | +--ro unidirectional-residual-bandwidth?
decimal64
| | +--ro unidirectional-available-bandwidth?
decimal64
| | +--ro unidirectional-utilized-bandwidth?
decimal64
| +--ro normality
| +--ro unidirectional-delay?
performance-metric-normality
| +--ro unidirectional-min-delay?
performance-metric-normality
| +--ro unidirectional-max-delay?
performance-metric-normality
| +--ro unidirectional-delay-variation?
performance-metric-normality
| +--ro unidirectional-packet-loss?
performance-metric-normality
| +--ro unidirectional-residual-bandwidth?
performance-metric-normality
| +--ro unidirectional-available-bandwidth?
performance-metric-normality
| +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
+--ro link-protection-type?
enumeration
+--ro interface-switching-capabilities*
[switching-capability]
| +--ro switching-capability
identityref
| +--ro encoding?
identityref
| +--ro max-lsp-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro packet-switch-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro interface-mtu? uint16
| +--ro time-division-multiplex-capable
| +--ro minimum-lsp-bandwidth? decimal64
| +--ro indication? enumeration
+--ro te-srlgs
+--ro values* te-types:srlg
notifications:
+---n te-node-event
| +--ro event-type? te-topology-event-type
| +--ro provider-id-ref? leafref
| +--ro client-id-ref? leafref
| +--ro topology-id-ref? leafref
| +--ro node-ref? leafref
| +--ro te-topology!
| +--ro te-node-attributes
| | +--ro schedules* [schedule-id] {configuration-schedule}?
| | | +--ro schedule-id uint32
| | | +--ro start? yang:date-and-time
| | | +--ro schedule-duration? string
| | | +--ro repeat-interval? string
| | +--ro name? inet:domain-name
| | +--ro signaling-address* inet:ip-address
| | +--ro flag* flag-type
| | +--ro is-abstract? boolean
| | +--ro underlay-topology {te-topology-hierarchy}?
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | +--ro connectivity-matrix* [id]
| | +--ro id uint32
| | +--ro from-link
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro to-link
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro is-allowed? boolean
| +--ro te-link* [te-link-id]
| | +--ro te-link-id te-link-id
| | +--ro (stack-level)?
| | +--:(bundle)
| | | +--ro bundled-links
| | | +--ro bundled-link* [sequence]
| | | +--ro sequence uint32
| | | +--ro te-link-ref? leafref
| | +--:(component)
| | +--ro component-links
| | +--ro component-link* [sequence]
| | +--ro sequence uint32
| | +--ro component-link-ref? leafref
| +--ro te-node-state
| +--ro information-source? enumeration
| +--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro topology
| | +--ro provider-id-ref? leafref
| | +--ro client-id-ref? leafref
| | +--ro topology-id-ref? leafref
| +--ro routing-instance? string
+---n te-link-event
+--ro event-type? te-topology-event-type
+--ro provider-id-ref? leafref
+--ro client-id-ref? leafref
+--ro topology-id-ref? leafref
+--ro source-te-node-id-ref? leafref
+--ro source-te-link-id-ref? leafref
+--ro dest-te-node-id-ref? leafref
+--ro dest-te-link-id-ref? leafref
+--ro te-topology!
+--ro te-link-attributes
| +--ro schedules* [schedule-id] {configuration-schedule}?
| | +--ro schedule-id uint32
| | +--ro start? yang:date-and-time
| | +--ro schedule-duration? string
| | +--ro repeat-interval? string
| +--ro name? string
| +--ro flag* flag-type
| +--ro is-abstract? boolean
| +--ro underlay! {te-topology-hierarchy}?
| | +--ro underlay-primary-path
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro path-element* [path-element-id]
| | | +--ro path-element-id uint32
| | | +--ro (type)?
| | | +--:(ipv4-address)
| | | | +--ro v4-address? inet:ipv4-address
| | | | +--ro v4-prefix-length? uint8
| | | | +--ro v4-loose? boolean
| | | +--:(ipv6-address)
| | | | +--ro v6-address? inet:ipv6-address
| | | | +--ro v6-prefix-length? uint8
| | | | +--ro v6-loose? boolean
| | | +--:(as-number)
| | | | +--ro as-number? uint16
| | | +--:(unnumbered-link)
| | | | +--ro router-id? inet:ip-address
| | | | +--ro interface-id? uint32
| | | +--:(label)
| | | +--ro value? uint32
| | +--ro underlay-backup-path* [index]
| | | +--ro index uint32
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro path-element* [path-element-id]
| | | +--ro path-element-id uint32
| | | +--ro (type)?
| | | +--:(ipv4-address)
| | | | +--ro v4-address? inet:ipv4-address
| | | | +--ro v4-prefix-length? uint8
| | | | +--ro v4-loose? boolean
| | | +--:(ipv6-address)
| | | | +--ro v6-address? inet:ipv6-address
| | | | +--ro v6-prefix-length? uint8
| | | | +--ro v6-loose? boolean
| | | +--:(as-number)
| | | | +--ro as-number? uint16
| | | +--:(unnumbered-link)
| | | | +--ro router-id? inet:ip-address
| | | | +--ro interface-id? uint32
| | | +--:(label)
| | | +--ro value? uint32
| | +--ro underlay-protection-type? uint16
| | +--ro underlay-trail-src
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro underlay-trail-des
| | | +--ro provider-id-ref? leafref
| | | +--ro client-id-ref? leafref
| | | +--ro topology-id-ref? leafref
| | | +--ro node-ref? leafref
| | | +--ro link-end-ref? leafref
| | +--ro dynamic? boolean
| | +--ro committed? boolean
| +--ro admin-status? enumeration
| +--ro performance-metric-throttle {te-performance-metric}?
| | +--ro unidirectional-delay-offset? uint32
| | +--ro measure-interval? uint32
| | +--ro advertisement-interval? uint32
| | +--ro suppression-interval? uint32
| | +--ro threshold-out
| | | +--ro unidirectional-delay? uint32
| | | +--ro unidirectional-min-delay? uint32
| | | +--ro unidirectional-max-delay? uint32
| | | +--ro unidirectional-delay-variation? uint32
| | | +--ro unidirectional-packet-loss? decimal64
| | | +--ro unidirectional-residual-bandwidth? decimal64
| | | +--ro unidirectional-available-bandwidth? decimal64
| | | +--ro unidirectional-utilized-bandwidth? decimal64
| | +--ro threshold-in
| | | +--ro unidirectional-delay? uint32
| | | +--ro unidirectional-min-delay? uint32
| | | +--ro unidirectional-max-delay? uint32
| | | +--ro unidirectional-delay-variation? uint32
| | | +--ro unidirectional-packet-loss? decimal64
| | | +--ro unidirectional-residual-bandwidth? decimal64
| | | +--ro unidirectional-available-bandwidth? decimal64
| | | +--ro unidirectional-utilized-bandwidth? decimal64
| | +--ro threshold-accelerated-advertisement
| | +--ro unidirectional-delay? uint32
| | +--ro unidirectional-min-delay? uint32
| | +--ro unidirectional-max-delay? uint32
| | +--ro unidirectional-delay-variation? uint32
| | +--ro unidirectional-packet-loss? decimal64
| | +--ro unidirectional-residual-bandwidth? decimal64
| | +--ro unidirectional-available-bandwidth? decimal64
| | +--ro unidirectional-utilized-bandwidth? decimal64
| +--ro link-index? uint64
| +--ro administrative-group? te-types:admin-
groups
| +--ro max-link-bandwidth? decimal64
| +--ro max-resv-link-bandwidth? decimal64
| +--ro unreserved-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro te-default-metric? uint32
| +--ro performance-metric {te-performance-metric}?
| | +--ro measurement
| | | +--ro unidirectional-delay? uint32
| | | +--ro unidirectional-min-delay? uint32
| | | +--ro unidirectional-max-delay? uint32
| | | +--ro unidirectional-delay-variation? uint32
| | | +--ro unidirectional-packet-loss? decimal64
| | | +--ro unidirectional-residual-bandwidth? decimal64
| | | +--ro unidirectional-available-bandwidth? decimal64
| | | +--ro unidirectional-utilized-bandwidth? decimal64
| | +--ro normality
| | +--ro unidirectional-delay?
performance-metric-normality
| | +--ro unidirectional-min-delay?
performance-metric-normality
| | +--ro unidirectional-max-delay?
performance-metric-normality
| | +--ro unidirectional-delay-variation?
performance-metric-normality
| | +--ro unidirectional-packet-loss?
performance-metric-normality
| | +--ro unidirectional-residual-bandwidth?
performance-metric-normality
| | +--ro unidirectional-available-bandwidth?
performance-metric-normality
| | +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
| +--ro link-protection-type? enumeration
| +--ro interface-switching-capabilities* [switching-
capability]
| | +--ro switching-capability identityref
| | +--ro encoding? identityref
| | +--ro max-lsp-bandwidth* [priority]
| | | +--ro priority uint8
| | | +--ro bandwidth? decimal64
| | +--ro packet-switch-capable
| | | +--ro minimum-lsp-bandwidth? decimal64
| | | +--ro interface-mtu? uint16
| | +--ro time-division-multiplex-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro indication? enumeration
| +--ro te-srlgs
| +--ro values* te-types:srlg
+--ro te-link-state
+--ro oper-status? enumeration
+--ro information-source? enumeration
+--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro topology
| | +--ro provider-id-ref? leafref
| | +--ro client-id-ref? leafref
| | +--ro topology-id-ref? leafref
| +--ro routing-instance? string
+--ro alt-information-sources* [information-source]
+--ro information-source enumeration
+--ro information-source-state
| +--ro credibility-preference? uint16
| +--ro topology
| | +--ro provider-id-ref? leafref
| | +--ro client-id-ref? leafref
| | +--ro topology-id-ref? leafref
| +--ro routing-instance? string
+--ro link-index? uint64
+--ro administrative-group? te-
types:admin-groups
+--ro max-link-bandwidth? decimal64
+--ro max-resv-link-bandwidth? decimal64
+--ro unreserved-bandwidth* [priority]
| +--ro priority uint8
| +--ro bandwidth? decimal64
+--ro te-default-metric? uint32
+--ro performance-metric {te-performance-metric}?
| +--ro measurement
| | +--ro unidirectional-delay? uint32
| | +--ro unidirectional-min-delay? uint32
| | +--ro unidirectional-max-delay? uint32
| | +--ro unidirectional-delay-variation? uint32
| | +--ro unidirectional-packet-loss?
decimal64
| | +--ro unidirectional-residual-bandwidth?
decimal64
| | +--ro unidirectional-available-bandwidth?
decimal64
| | +--ro unidirectional-utilized-bandwidth?
decimal64
| +--ro normality
| +--ro unidirectional-delay?
performance-metric-normality
| +--ro unidirectional-min-delay?
performance-metric-normality
| +--ro unidirectional-max-delay?
performance-metric-normality
| +--ro unidirectional-delay-variation?
performance-metric-normality
| +--ro unidirectional-packet-loss?
performance-metric-normality
| +--ro unidirectional-residual-bandwidth?
performance-metric-normality
| +--ro unidirectional-available-bandwidth?
performance-metric-normality
| +--ro unidirectional-utilized-bandwidth?
performance-metric-normality
+--ro link-protection-type? enumeration
+--ro interface-switching-capabilities* [switching-
capability]
| +--ro switching-capability identityref
| +--ro encoding? identityref
| +--ro max-lsp-bandwidth* [priority]
| | +--ro priority uint8
| | +--ro bandwidth? decimal64
| +--ro packet-switch-capable
| | +--ro minimum-lsp-bandwidth? decimal64
| | +--ro interface-mtu? uint16
| +--ro time-division-multiplex-capable
| +--ro minimum-lsp-bandwidth? decimal64
| +--ro indication? enumeration
+--ro te-srlgs
+--ro values* te-types:srlg
6. TE Topology Yang Module
<CODE BEGINS>
module ietf-te-topology {
yang-version 1;
namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";
// replace with IANA namespace when assigned
prefix "tet";
import ietf-yang-types {
prefix "yang";
} }
description "TE Event type for notifications";
} // te-topology-event-type
/* import ietf-inet-types {
* Identities prefix "inet";
*/ }
identity flag-identity { import ietf-interfaces {
description "Base type for flags"; prefix "if";
} }
import ietf-te-types {
prefix "te-types";
}
identity undefined-flag { organization "TBD";
base "flag-identity"; contact "TBD";
description "Undefined flag"; description "TE topology model";
}
typedef flag-type { revision "2015-07-02" {
type identityref { description "Initial revision";
base "flag-identity"; reference "TBD";
} }
description "Type for flags";
}
/* /*
* Groupings * Features
*/ */
grouping topo-ref { feature te-topology-hierarchy {
description
"Grouping for an absolute reference to a topology instance.";
leaf topo-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:te-topology-id";
}
description description
"An absolute reference to a topology instance."; "This feature indicates that the system allows underlay
and/or overlay TE topology hierarchy.";
} }
}
grouping link-ref {
description
"Grouping for an absolute reference to a link instance.";
uses topo-ref;
leaf source-te-node-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:te-topology-id = current()/../topo-ref]"
+"/tet:link/tet:source-te-node-id";
} feature te-performance-metric {
description description
"An absolute reference to a link instance."; "This feature indicates that the system supports
TE performance metric defined in
draft-ietf-ospf-te-metric-extensions.";
} }
leaf source-te-link-id-ref {
type leafref { feature configuration-schedule {
path "/tet:te-topologies/tet:topology"
+"[tet:te-topology-id = current()/../topo-ref]"
+"/tet:link/tet:source-te-link-id";
}
description description
"An absolute reference to a link instance."; "This feature indicates that the system supports
configuration scheduling.";
} }
leaf dest-te-node-id-ref {
type leafref { feature template {
path "/tet:te-topologies/tet:topology"
+"[tet:te-topology-id = current()/../topo-ref]"
+"/tet:link/tet:dest-te-node-id";
}
description description
"An absolute reference to a link instance."; "This feature indicates that the system supports
template configuration.";
} }
leaf dest-te-link-id-ref {
type leafref { /*
path "/tet:te-topologies/tet:topology" * Typedefs
+"[tet:te-topology-id = current()/../topo-ref]" */
+"/tet:link/tet:dest-te-link-id";
} typedef te-global-id {
type uint32;
description description
"An absolute reference to a link instance."; "An identifier to uniquely identify an operator, which can be
either a provider or a client.
The definition of this type is taken from RFC6370 and RFC503.
This attribute type is used solely to provide a globally
unique context for TE topologies.";
} }
}
grouping node-ref { typedef te-topology-id {
description type string {
"Grouping for an absolute reference to a node instance."; pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
uses topo-ref;
leaf node-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:te-topology-id = current()/../topo-ref]"
+"/tet:node/tet:te-node-id";
} }
description description
"An absolute reference to a node instance."; "An identifier for a topology.";
} }
}
grouping link-end-ref { typedef te-template-name {
description type string {
"Grouping for an absolute reference to a TE link end, which is pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
the local representation of a TE link on a node.";
uses node-ref;
leaf link-end-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:te-topology-id = current()/../topo-ref]"
+"/tet:node[tet:te-node-id = current()/../node-ref]"
+"/tet:te-node-attributes/tet:te-link/tet:te-link-id";
} }
description description
"Grouping for an absolute reference to a TE link end."; "A type for the name of a TE node template or TE link
template.";
} }
}
grouping te-topology-type { typedef te-node-id {
description type inet:ip-address;
"Identifies the TE topology type.";
container te-topology {
presence "indicates TE topology";
description description
"Its presence identifies the TE topology type."; "An identifier for a node in a topology.
The identifier is represented as an IPv4 or IPv6 address.
The identifier SHOULD be chosen such that the same node in a
real network topology will always be identified through the
same identifier, even if the model is instantiated in
separate
datastores. An implementation MAY choose to capture semantics
in the identifier, for example to indicate the type of node
and/or the type of topology that the node is a part of.";
} }
}
grouping te-path-element { typedef te-link-id {
description type union {
"A group of attributes defining an element in a TE path type uint32; // Unnumbered
such as TE node, TE link, TE aotomic resource or label."; type inet:ip-address; // IPv4 or IPv6 address
leaf loose { }
type boolean; description
description "true if the element is loose."; "An identifier for a TE link on a node.
The identifier may be opaque.
The identifier SHOULD be chosen such that the same TP in a
real network topology will always be identified through the
same identifier, even if the model is instantiated in
separate
datastores. An implementation MAY choose to capture semantics
in the identifier, for example to indicate the type of TP
and/or the type of node and topology that the TP is a part
of.";
} }
choice element-type {
description "Attributes for various element types."; typedef te-topology-event-type {
case numbered-link { type enumeration {
leaf link-ip-address { enum "add" {
type inet:ip-address; value 0;
description "IPv4 or IPv6 address."; description
"A TE node or te-link has
been added";
} }
} enum "remove" {
case unnumbered-link { value 1;
leaf link-node-id {
type uint32;
description description
"Node ID of the node where the link end point resides."; "A TE node or te-link has
been removed";
} }
leaf te-link-id { enum "update" {
type uint32; value 2;
description "Identifies the link end point."; description
"A TE node or te-link has
been updated";
} }
} }
case node { description "TE Event type for notifications";
leaf te-node-id { } // te-topology-event-type
type uint32;
description "Identifies the node."; typedef performance-metric-normality {
type enumeration {
enum "unknown" {
value 0;
description
"Unknown";
} }
} enum "normal" {
case label { value 1;
leaf label { description
type uint32; "Normal";
description "Identifies atomic TE resource or label."; }
enum "abnormal" {
value 2;
description
"Abnormal. The anomalous bit is set.";
} }
} }
description
"Indicates whether a performance metric is normal, abnormal,
or unknown.";
} }
} // te-path-element
grouping config-schedule-attributes { /*
description * Identities
"A list of schedules defining when a particular */
configuration takes effect.";
list schedules {
key "schedule-id";
description "A list of schedule elements.";
leaf schedule-id { identity flag-identity {
type uint32; description "Base type for flags";
description "Identifies the schedule element."; }
identity undefined-flag {
base "flag-identity";
description "Undefined flag";
}
typedef flag-type {
type identityref {
base "flag-identity";
} }
leaf start { description "Type for flags";
type yang:date-and-time; }
description "Start time.";
/*
* Groupings
*/
grouping topo-ref {
description
"Grouping for an absolute reference to a topology instance.";
leaf provider-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:provider-id";
}
description
"An absolute reference to a provider-id.";
} }
leaf schedule-duration { leaf client-id-ref {
type string { type leafref {
pattern path "/tet:te-topologies/tet:topology/tet:client-id";
'P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?(\d+S)?';
} }
description "Schedule duration in ISO 8601 format."; description
"An absolute reference to a client-id.";
} }
leaf repeat-interval { leaf topology-id-ref {
type string { type leafref {
pattern path "/tet:te-topologies/tet:topology/tet:te-topology-id";
'R\d*/P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?'
+ '(\d+S)?';
} }
description "Repeat interval in ISO 8601 format."; description
} "An absolute reference to a te-topology-id.";
} }
} } // topo-ref
grouping information-source-attributes { grouping link-ref {
description description
"The attributes identifying source that has provided the "Grouping for an absolute reference to a link instance.";
related information, and the source credibility."; uses topo-ref;
leaf information-source { leaf source-te-node-id-ref {
type enumeration { type leafref {
enum "unknown" { path "/tet:te-topologies/tet:topology"
description "The source is unknown"; +"[tet:provider-id = current()/../provider-id-ref]"
+"[tet:client-id = current()/../client-id-ref]"
+"[tet:te-topology-id = current()/../topology-id-ref]"
+"/tet:link/tet:source-te-node-id";
} }
enum "locally-configured" { description
description "Configured TE link"; "An absolute reference to a link instance.";
}
leaf source-te-link-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:provider-id = current()/../provider-id-ref]"
+"[tet:client-id = current()/../client-id-ref]"
+"[tet:te-topology-id = current()/../topology-id-ref]"
+"/tet:link/tet:source-te-link-id";
} }
enum "ospfv2" { description
description "OSPFv2"; "An absolute reference to a link instance.";
}
leaf dest-te-node-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:provider-id = current()/../provider-id-ref]"
+"[tet:client-id = current()/../client-id-ref]"
+"[tet:te-topology-id = current()/../topology-id-ref]"
+"/tet:link/tet:dest-te-node-id";
} }
enum "ospfv3" { description
description "OSPFv3"; "An absolute reference to a link instance.";
}
leaf dest-te-link-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:provider-id = current()/../provider-id-ref]"
+"[tet:client-id = current()/../client-id-ref]"
+"[tet:te-topology-id = current()/../topology-id-ref]"
+"/tet:link/tet:dest-te-link-id";
} }
enum "isis" { description
description "ISIS"; "An absolute reference to a link instance.";
}
} // link-ref
grouping node-ref {
description
"Grouping for an absolute reference to a node instance.";
uses topo-ref;
leaf node-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:provider-id = current()/../provider-id-ref]"
+"[tet:client-id = current()/../client-id-ref]"
+"[tet:te-topology-id = current()/../topology-id-ref]"
+"/tet:node/tet:te-node-id";
} }
enum "other" { description
description "Other source"; "An absolute reference to a node instance.";
}
} // node-ref
grouping link-end-ref {
description
"Grouping for an absolute reference to a TE link end, which is
the local representation of a TE link on a node.";
uses node-ref;
leaf link-end-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"[tet:provider-id = current()/../provider-id-ref]"
+"[tet:client-id = current()/../client-id-ref]"
+"[tet:te-topology-id = current()/../topology-id-ref]"
+"/tet:node[tet:te-node-id = current()/../node-ref]"
+"/tet:te-link/tet:te-link-id";
} }
description
"Grouping for an absolute reference to a TE link end.";
} }
} // link-end-ref
grouping te-topology-type {
description description
"Indicates the source of the information."; "Identifies the TE topology type.";
} container te-topology {
leaf credibility-preference { presence "indicates TE topology";
type uint16; description
"Its presence identifies the TE topology type.";
}
} // te-topology-type
grouping te-path-element {
description description
"The preference value to calculate the traffic "A group of attributes defining an element in a TE path
engineering database credibility value used for such as TE node, TE link, TE atomic resource or label.";
tie-break selection between different uses te-types:explicit-route-subobject;
information-source values. } // te-path-element
Higher value is more preferable.";
}
}
grouping te-node-attributes { grouping config-schedule-attributes {
description "Node attributes in a TE topology."; description
container te-node-attributes { "A list of schedules defining when a particular
description "Node attributes in a TE topology."; configuration takes effect.";
uses config-schedule-attributes; list schedules {
leaf name { if-feature configuration-schedule;
type inet:domain-name; key "schedule-id";
description "Node name."; description "A list of schedule elements.";
}
leaf-list signaling-address { leaf schedule-id {
type inet:ip-address; type uint32;
description "Node signaling address."; description "Identifies the schedule element.";
}
leaf start {
type yang:date-and-time;
description "Start time.";
}
leaf schedule-duration {
type string {
pattern
'P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?(\d+S)?';
}
description "Schedule duration in ISO 8601 format.";
}
leaf repeat-interval {
type string {
pattern
'R\d*/P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?'
+ '(\d+S)?';
}
description "Repeat interval in ISO 8601 format.";
}
} }
leaf-list flag { } // config-schedule-attributes
type flag-type;
description "Node operational flags."; grouping information-source-attributes {
description
"The attributes identifying source that has provided the
related information, and the source credibility.";
leaf information-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 "ISIS";
}
enum "system-processed" {
description "System processed entity.";
}
enum "other" {
description "Other source";
}
}
description
"Indicates the source of the information.";
} }
leaf is-abstract { container information-source-state {
type boolean;
description description
"true if the node is abstract, false when the node is "The container contains state attributes related to
actual."; the information source.";
leaf credibility-preference {
type uint16;
description
"The preference value to calculate the traffic
engineering database credibility value used for
tie-break selection between different
information-source values.
Higher value is more preferable.";
}
container topology {
description
"When the information is processed by the system,
the attributes in this container indicate which topology
is used to process to generate the result information.";
leaf provider-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:provider-id";
}
description
"A reference to a provider-id.";
}
leaf client-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:client-id";
}
description
"A reference to a client-id.";
}
leaf topology-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"/tet:te-topology-id";
}
description
"A reference to a te-topology-id.";
}
} // topology
leaf routing-instance {
type string;
description
"When applicable, this is the name of a routing instance
from which the information is learned.";
} // routing-information
} }
leaf underlay-topology { } // information-source-attributes
if-feature te-topology-hierarchy;
type leafref { grouping te-node-attributes {
path "/tet:te-topologies/tet:topology/tet:te-topology-id"; description "Node attributes in a TE topology.";
container te-node-attributes {
description "Node attributes in a TE topology.";
uses config-schedule-attributes;
leaf name {
type inet:domain-name;
description "Node name.";
}
leaf-list signaling-address {
type inet:ip-address;
description "Node signaling address.";
}
leaf-list flag {
type flag-type;
description "Node operational flags.";
}
leaf is-abstract {
type boolean;
description
"true if the node is abstract, false when the node is
actual.";
}
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.";
leaf provider-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:provider-id";
}
description
"A reference to a provider-id.";
}
leaf client-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:client-id";
}
description
"A reference to a client-id.";
}
leaf topology-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology"
+"/tet:te-topology-id";
}
description
"A reference to a te-topology-id.";
}
}
list connectivity-matrix {
key "id";
description
"Represents node's switching limitations, i.e. limitations
in interconnecting network TE links across the node.";
leaf id {
type uint32;
description "Identifies the connectivity-matrix entry.";
}
container from-link {
uses tet:link-end-ref;
description
"Reference to source NTP.";
}
container to-link {
uses tet:link-end-ref;
description
"Reference to destination NTP.";
}
leaf is-allowed {
type boolean;
description
"true - switching is allowed,
false - switching is disallowed.";
}
} }
description
"When an abstract node encapsulates a topology,
this reference points to said topology.";
} }
list te-link { list te-link {
key "te-link-id"; key "te-link-id";
description description
"The local representation of a TE link, which "The local representation of a TE link, which
interconnect TE nodes."; interconnect TE nodes.";
leaf te-link-id { leaf te-link-id {
type te-link-id; type te-link-id;
description description
"TE link identifier."; "TE link identifier.";
} }
choice stack-level { choice stack-level {
description description
"The TE link can be partitioned into bundled "The TE link can be partitioned into bundled
links, or component links."; links, or component links.";
case bundle { case bundle {
container bundled-links { container bundled-links {
description description
"A set of bundled links"; "A set of bundled links";
list bundled-link { list bundled-link {
key "sequence"; key "sequence";
description description
"Specify a bundled interfface that is "Specify a bundled interface that is
further partitioned."; further partitioned.";
leaf sequence { leaf sequence {
type uint32; type uint32;
description description
"Identify the sequence in the bundle."; "Identify the sequence in the bundle.";
} }
leaf te-link-ref { leaf te-link-ref {
type leafref { type leafref {
path "../../../te-link-id"; path "../../../te-link-id";
require-instance "true"; require-instance true;
} }
description description
"Reference to TE link on this node."; "Reference to TE link on this node.";
} }
} }
} }
} }
case component { case component {
container component-links { container component-links {
description description
"A set of component links"; "A set of component links";
list component-link { list component-link {
key "sequence"; key "sequence";
description description
"Specify a component interfface that is "Specify a component interface that is
sufficient to unambiguously identify the sufficient to unambiguously identify the
appropriate resources"; appropriate resources";
leaf sequence { leaf sequence {
type uint32; type uint32;
description description
"Identify the sequence in the bundle."; "Identify the sequence in the bundle.";
} }
leaf component-link-ref { leaf component-link-ref {
type leafref { type leafref {
path "/if:interfaces/if:interface/if:name"; path "/if:interfaces/if:interface/if:name";
require-instance "false"; require-instance false;
} }
description description
"Reference to component link on this "Reference to component link on this
node."; node.";
} }
} }
} }
} }
} }
} }
list connectivity-matrix { } // te-node-attributes
key "id";
grouping te-node-state-attributes {
description "Node state attributes in a TE topology.";
container te-node-state {
description "Node state attributes in a TE topology.";
uses information-source-attributes;
}
} // te-node-state-attributes
grouping te-link-underlay-attributes {
description "Attributes for te-link underlay.";
container underlay-primary-path {
description description
"Represents node's switching limitations, i.e. limitations "The service path on the underlay topology that
in interconnecting network TE links across the node."; supports this link.";
leaf id { leaf provider-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:provider-id";
require-instance false;
}
description
"A reference to a provider-id.";
}
leaf client-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:client-id";
require-instance false;
}
description
"A reference to a client-id.";
}
leaf topology-id-ref {
type leafref {
path "/tet:te-topologies/tet:topology/tet:te-topology-id";
require-instance false;
}
description
"Identifies the topology where the path belongs.";
}
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;
}
} // underlay-primary-path
list underlay-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; type uint32;
description "Identifies the connectivity-matrix entry."; description
"A sequence number to identify a backup path.";
} }
container from-link { leaf provider-id-ref {
uses tet:link-end-ref; type leafref {
path "/tet:te-topologies/tet:topology/tet:provider-id";
require-instance false;
}
description description
"Reference to source NTP."; "A reference to a provider-id.";
} }
container to-link { leaf client-id-ref {
uses tet:link-end-ref; type leafref {
path "/tet:te-topologies/tet:topology/tet:client-id";
require-instance false;
}
description description
"Reference to destination NTP."; "A reference to a client-id.";
} }
leaf is-allowed { leaf topology-id-ref {
type boolean; type leafref {
path "/tet:te-topologies/tet:topology/tet:te-topology-id";
require-instance false;
}
description description
"true - switching is allowed, "Identifies the topology where the path belongs.";
false - switching is disallowed."; }
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;
} }
} // underlay-backup-path
leaf underlay-protection-type {
type uint16;
description
"Underlay protection type desired for this link";
} }
container ted { container underlay-trail-src {
description "Includes TE node attributes."; uses tet:link-end-ref;
uses ted:ted-node-attributes; description
"Source TE link of the underlay trail.";
} }
} container underlay-trail-des {
} // te-node-attributes uses tet:link-end-ref;
description
"Destination TE link of the underlay trail.";
}
} // te-link-underlay-attributes
grouping te-node-state-attributes { grouping te-link-state-underlay-attributes {
description "Node state attributes in a TE topology."; description "State attributes for te-link underlay.";
container te-node-state-attributes { leaf dynamic {
description "Node state attributes in a TE topology."; type boolean;
uses information-source-attributes; description
} "true if the underlay is dynamically created.";
} // te-node-state-attributes }
leaf committed {
type boolean;
description
"true if the underlay is committed.";
}
} // te-link-state-underlay-attributes
grouping te-link-underlay-attributes { grouping performance-metric-attributes {
description "Attributes for te-link underlay.";
container underlay-path {
description description
"The service path on the underlay topology that "Link performance information in real time.";
supports this link."; reference
leaf topology-id { "draft-ietf-ospf-te-metric-extensions.";
type leafref { leaf unidirectional-delay {
path "/tet:te-topologies/tet:topology/tet:te-topology-id"; type uint32 {
require-instance false; range 0..16777215;
} }
description description "Delay or latency in micro seconds.";
"Identifies the topology where the path belongs.";
} }
list path-element { leaf unidirectional-min-delay {
key "path-element-id"; type uint32 {
description range 0..16777215;
"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; description "Minimum delay or latency in micro seconds.";
} }
} // underlay-path leaf unidirectional-max-delay {
container underlay-backup-path { type uint32 {
description range 0..16777215;
"The backup service path on the underlay topology that }
supports this link."; description "Maximum delay or latency in micro seconds.";
leaf topology-id { }
type leafref { leaf unidirectional-delay-variation {
path "/tet:te-topologies/tet:topology/tet:te-topology-id"; type uint32 {
require-instance false; range 0..16777215;
}
description "Delay variation in micro seconds.";
}
leaf unidirectional-packet-loss {
type decimal64 {
fraction-digits 6;
range "0 .. 50.331642";
} }
description description
"Identifies the topology where the path belongs."; "Packet loss as a percentage of the total traffic sent
over a configurable interval. The finest precision is
0.000003%.";
} }
list path-element { leaf unidirectional-residual-bandwidth {
key "path-element-id"; type decimal64 {
fraction-digits 2;
}
description description
"A list of path elements describing the backup service "Residual bandwidth that subtracts tunnel
path"; reservations from Maximum Bandwidth (or link capacity)
leaf path-element-id { [RFC3630] and provides an aggregated remainder across QoS
type uint32; classes.";
description "To identify the element in a path."; }
leaf unidirectional-available-bandwidth {
type decimal64 {
fraction-digits 2;
} }
uses te-path-element; description
"Available bandwidth that is defined to be residual
bandwidth minus the measured bandwidth used for the
actual forwarding of non-RSVP-TE LSP packets. For a
bundled link, available bandwidth is defined to be the
sum of the component link available bandwidths.";
} }
} // underlay-backup-path leaf unidirectional-utilized-bandwidth {
leaf underlay-protection-type { type decimal64 {
type uint16; fraction-digits 2;
description }
"Underlay protection type desired for this link"; description
} "Bandwidth utilization that represents the actual
container underlay-trail-src { utilization of the link (i.e. as measured in the router).
uses tet:link-end-ref; For a bundled link, bandwidth utilization is defined to
description be the sum of the component link bandwidth
"Source TE link of the underlay trail."; utilizations.";
} }
container underlay-trail-des { } // performance-metric-attributes
uses tet:link-end-ref;
description
"Destination TE link of the underlay trail.";
}
} // te-link-underlay-attributes
grouping te-link-state-underlay-attributes { grouping performance-metric-normality-attributes {
description "State attributes for te-link underlay.";
leaf dynamic {
type boolean;
description
"true if the underlay is dynamically created.";
}
leaf committed {
type boolean;
description description
"true if the underlay is committed."; "Link performance metric normality attributes.";
} reference
} // te-link-state-underlay-attributes "draft-ietf-ospf-te-metric-extensions.";
leaf unidirectional-delay {
grouping te-link-attributes { type performance-metric-normality;
description description "Delay normality.";
"Link attributes in a TE topology.";
container te-link-attributes {
description "Link attributes in a TE topology.";
uses config-schedule-attributes;
leaf name {
type string;
description "Link Name";
} }
leaf-list flag { leaf unidirectional-min-delay {
type flag-type; type performance-metric-normality;
description "Link flags"; description "Minimum delay or latency normality.";
} }
leaf is-abstract { leaf unidirectional-max-delay {
type boolean; type performance-metric-normality;
description "true if the link is abstract."; description "Maximum delay or latency normality.";
} }
container underlay { leaf unidirectional-delay-variation {
if-feature te-topology-hierarchy; type performance-metric-normality;
presence description "Delay variation normality.";
"Indicates the underlay exists for this link.";
description "State of the underlay of this link.";
uses te-link-underlay-attributes;
} // underlay
container ted {
description "Includes TE link attributes.";
uses ted:ted-link-attributes;
} }
} leaf unidirectional-packet-loss {
} // te-link-attributes type performance-metric-normality;
description "Packet loss normality.";
grouping te-link-state-attributes { }
description leaf unidirectional-residual-bandwidth {
"Link state attributes in a TE topology."; type performance-metric-normality;
container te-link-state-attributes { description "Residual bandwidth normality.";
description "Link state attributes in a TE topology."; }
uses information-source-attributes; leaf unidirectional-available-bandwidth {
} type performance-metric-normality;
} // te-link-state-attributes description "Available bandwidth normality.";
}
leaf unidirectional-utilized-bandwidth {
type performance-metric-normality;
description "Bandwidth utilization normality.";
}
} // performance-metric-normality-attributes
/* grouping performance-metric-throttle-container {
* Configuration data nodes description
*/ "A container controlling performance metric throttle.";
container performance-metric-throttle {
if-feature te-performance-metric;
must "suppression-interval >= measure-interval" {
error-message
"suppression-interval cannot be less then
measure-interval";
description
"Constraint on suppression-interval and
measure-interval.";
}
description
"Link performance information in real time.";
reference
"draft-ietf-ospf-te-metric-extensions.";
leaf unidirectional-delay-offset {
type uint32 {
range 0..16777215;
}
description
"Offset value to be added to the measured delay value.";
}
leaf measure-interval {
type uint32;
default 30;
description
"Interval in seconds to measure the extended metric
values.";
}
leaf advertisement-interval {
type uint32;
description
"Interval in seconds to advertise the extended metric
values.";
}
leaf suppression-interval {
type uint32 {
range "1 .. max";
}
default 120;
description
"Interval in seconds to suppress advertising the extended
metric values.";
}
container threshold-out {
uses performance-metric-attributes;
description
"If the measured parameter falls outside an upper bound
for all but the min delay metric (or lower bound for
min-delay metric only) and the advertised value is not
already outside that bound, anomalous announcement will be
triggered.";
}
container threshold-in {
uses performance-metric-attributes;
description
"If the measured parameter falls inside an upper bound
for all but the min delay metric (or lower bound for
min-delay metric only) and the advertised value is not
already inside that bound, normal (anomalous-flag cleared)
announcement will be triggered.";
}
container threshold-accelerated-advertisement {
description
"When the difference between the last advertised value and
current measured value exceed this threshold, anomalous
announcement will be triggered.";
uses performance-metric-attributes;
}
}
} // performance-metric-throttle-container
container te-topologies { grouping te-link-info-attributes {
description
"This container acts as the top-level data element of
configuration data.";
list topology {
key "te-topology-id";
description description
"This is the model of an abstract topology. A topology "Advertised TE information attributes.";
contains nodes and links. Each topology MUST be identified leaf link-index {
by a unique te-topology-id for reason that a network could type uint64;
contain many topologies.";
leaf te-topology-id {
type te-topology-id;
description description
"It is presumed that a datastore will contain many "The link identifier. If OSPF is used, this represents an
topologies. To distinguish between topologies it is ospfLsdbID. If IS-IS is used, this represents an isisLSPID.
vital to have UNIQUE topology identifiers."; If a locally configured link is used, this object represents
a unique value, which is locally defined in a router.";
} }
container topology-types { leaf administrative-group {
type te-types:admin-groups;
description description
"This container is used to identify the type, or types (as "Administrative group or color of the link.
a topology can support several types simultaneously), of This attribute covers both administrative group (defined in
the topology. RFC3630, RFC5329, and RFC5305), and extended administrative
Topology types are the subject of several integrity group (defined in RFC7308).";
constraints that an implementing server can validate in
order to maintain integrity of the datastore.
Topology types are indicated through separate data nodes;
the set of topology types is expected to increase over
time.
To add support for a new topology, an augmenting module
needs to augment this container with a new empty optional
container to indicate the new topology type.
The use of a container allows to indicate a
subcategorization of topology types.
The container SHALL NOT be augmented with any data nodes
that serve a purpose other than identifying a particular
topology type.";
uses te-topology-type; // Defines the TE topology type.
} }
list node { leaf max-link-bandwidth {
key "te-node-id"; type decimal64 {
leaf te-node-id { fraction-digits 2;
type te-node-id;
description
"The identifier of a node in the topology.
A node is specific to a topology to which it belongs.";
} }
description description
"The list of network nodes defined for the topology."; "Maximum bandwidth that can be seen on this link in this
leaf te-node-template { direction. Units in bytes per second";
type leafref { }
path "/te-topologies/node-template/name"; leaf max-resv-link-bandwidth {
type decimal64 {
fraction-digits 2;
}
description
"Maximum amount of bandwidth that can be reserved in this
direction in this link. Units in bytes per second";
}
list unreserved-bandwidth {
key "priority";
max-elements "8";
description
"Unreserved bandwidth for 0-7 priority levels. Units in
bytes per second";
leaf priority {
type uint8 {
range "0..7";
}
description "Priority";
}
leaf bandwidth {
type decimal64 {
fraction-digits 2;
} }
description description
"The reference to a TE node template."; "Unreserved bandwidth for this level";
} }
uses te-node-attributes;
} }
list link { leaf te-default-metric {
key "source-te-node-id source-te-link-id " type uint32;
+ "dest-te-node-id dest-te-link-id"; description
leaf source-te-node-id { "Traffic Engineering Metric";
type leafref { }
path "../../node/te-node-id"; container performance-metric {
if-feature te-performance-metric;
description
"Link performance information in real time.";
reference
"draft-ietf-ospf-te-metric-extensions.";
container measurement {
description
"Measured performance metric values. Static configuration
and manual overrides of these measurements are also
allowed.";
uses performance-metric-attributes;
}
container normality
{
description
"Performance metric normality values.";
uses performance-metric-normality-attributes;
}
}
leaf link-protection-type {
type enumeration {
enum "unprotected" {
description "unprotected";
}
enum "extra-traffic" {
description "Extra traffic";
}
enum "shared" {
description "Shared";
}
enum "1-for-1" {
description "One for one protection";
}
enum "1-plus-1" {
description "One plus one protection";
}
enum "enhanced" {
description "Enhanced protection";
}
}
description
"Link Protection Type desired for this link";
}
list interface-switching-capabilities {
key "switching-capability";
description
"List of interface capabilities for this interface";
leaf switching-capability {
type identityref {
base te-types:switching-capabilities;
} }
mandatory true;
description description
"Source node identifier, must be in same topology."; "Switching Capability for this interface";
} }
leaf source-te-link-id { leaf encoding {
type leafref { type identityref {
path "../../node[te-node-id = " base te-types:lsp-encoding-types;
+ "current()/../source-te-node-id]/"
+ "te-node-attributes/te-link/te-link-id";
} }
mandatory true;
description description
"Source TE link identifier, must be in same topology."; "Encoding supported by this interface";
} }
leaf dest-te-node-id { list max-lsp-bandwidth {
type leafref { key "priority";
path "../../node/te-node-id"; max-elements "8";
description
"Maximum LSP Bandwidth at priorities 0-7";
leaf priority {
type uint8 {
range "0..7";
}
description "Priority";
}
leaf bandwidth {
type decimal64 {
fraction-digits 2;
}
description
"Max LSP Bandwidth for this level";
}
}
container packet-switch-capable {
when "../switching-capability = 'PSC-1' or "
+"../switching-capability = 'PSC-2' or "
+"../switching-capability = 'PSC-3' or "
+"../switching-capability = 'PSC-4'" {
description "Valid only for PSC";
} }
mandatory true;
description description
"Destination node identifier, must be in the same "Interface has packet-switching capabilities";
topology."; leaf minimum-lsp-bandwidth {
type decimal64 {
fraction-digits 2;
}
description
"Minimum LSP Bandwidth. Units in bytes per second";
}
leaf interface-mtu {
type uint16;
description
"Interface MTU";
}
} }
leaf dest-te-link-id { container time-division-multiplex-capable {
type leafref { when "../switching-capability = 'TDM'" {
path "../../node[te-node-id = " description "Valid only for TDM";
+ "current()/../dest-te-node-id]/"
+ "te-node-attributes/te-link/te-link-id";
} }
mandatory true;
description description
"Destination TE link identifier, must be in same "Interface has time-division multiplex capabilities";
topology.";
leaf minimum-lsp-bandwidth {
type decimal64 {
fraction-digits 2;
}
description
"Minimum LSP Bandwidth. Units in bytes per second";
}
leaf indication {
type enumeration {
enum "standard" {
description "Indicates support of standard SONET/SDH";
}
enum "arbitrary" {
description "Indicates support of arbitrary
SONET/SDH";
}
}
description
"Indication whether the interface supports Standard or
Arbitrary SONET/SDH";
}
} }
}
container te-srlgs {
description description
"TE link is a logical construct that represents a way "A list of SLRGs.";
to group/map information about certain physical leaf-list values {
resources (and their properties) that interconnect TE type te-types:srlg;
nodes. description "SRLG value";
A Network Link connects a by Local (Source) node and }
a Remote (Destination) Network Nodes via a set of the }
nodes' TE links. } // te-link-info-attributes
As it is possible to have several links between the
same source and destination nodes, and as a link grouping te-link-attributes {
could potentially be re-homed, to ensure that we description
would always know to distinguish between "Link attributes in a TE topology.";
links, every link is identified by a dedicated link container te-link-attributes {
identifier. description "Link attributes in a TE topology.";
Note that a link models a point-to-point link, not a uses config-schedule-attributes;
multipoint link."; leaf name {
leaf te-link-template { type string;
type leafref { description "Link Name";
path "/te-topologies/link-template/name"; }
leaf-list flag {
type flag-type;
description "Link flags";
}
leaf is-abstract {
type boolean;
description "true if the link is abstract.";
}
container underlay {
if-feature te-topology-hierarchy;
presence
"Indicates the underlay exists for this link.";
description "State of the underlay of this link.";
uses te-link-underlay-attributes;
} // underlay
leaf admin-status {
type enumeration {
enum up {
value 1;
description
"Enabled.";
}
enum down {
value 2;
description
"Disabled.";
}
enum testing {
value 3;
description
"In some test mode.";
}
} }
description description
"The reference to a TE link template."; "The desired state of the link.";
} }
uses te-link-attributes;
} // link
} // topology
list node-template { uses performance-metric-throttle-container;
key "name"; uses te-link-info-attributes;
leaf name {
type te-template-name;
description
"The name to identify a TE node template.";
} }
description } // te-link-attributes
"The list of TE node templates used to define sharable
and reusable TE node attributes.";
uses te-node-attributes;
} // node
list link-template { grouping te-link-state-attributes {
key "name";
leaf name {
type te-template-name;
description
"The name to identify a TE link template.";
}
description description
"The list of TE link templates used to define sharable "Link state attributes in a TE topology.";
and reusable TE link attributes."; container te-link-state {
uses te-link-attributes; description "Link state attributes in a TE topology.";
} // link leaf oper-status {
} // te-topologies type enumeration {
enum up {
/* value 1;
* Operational state data nodes description
*/ "Operational up";
}
enum down {
value 2;
description
"Operational down.";
}
enum testing {
value 3;
description
"In some test mode";
}
enum unknown {
value 4;
description
"Status cannot be determined for some reason.";
}
}
description
"The current operational state of the link.";
}
uses information-source-attributes;
list alt-information-sources {
key "information-source";
description
"A list of information sources learned but not used.";
uses information-source-attributes;
uses te-link-info-attributes;
}
}
} // te-link-state-attributes
container te-topologies-state { grouping template-attributes {
config "false";
description
"This container acts as the top-level state data element of
operational data.";
list topology {
key "te-topology-id";
description description
"This is the model of an abstract topology. A topology "Common attributes for all templates.";
contains nodes and links. Each topology MUST be identified
by a unique te-topology-id for reason that a network could leaf priority {
contain many topologies."; type uint16;
leaf te-topology-id {
type te-topology-id;
description description
"It is presumed that a datastore will contain many "The preference value to resolve conflicts between different
topologies. To distinguish between topologies it is templates. When two or more templates specify values for
vital to have UNIQUE topology identifiers."; one configuration attribute, the value from the template
with the highest priority is used.";
} }
leaf server-provided { leaf reference-change-policy {
type boolean; type enumeration {
config false; 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 description
"Indicates whether the topology is configurable by "This attribute specifies the action taken to a
clients, or whether it is provided by the server. This configuration
leaf is populated by the server implementing the model. node that has a reference to this template.";
It is set to false for topologies that are created by a
client; it is set to true otherwise. If it is set to
true, any attempt to edit the topology MUST be rejected.";
} }
container topology-types { } // template-attributes
/*
* Configuration data nodes
*/
container te-topologies {
description
"This container acts as the top-level data element of
configuration data.";
list topology {
key "provider-id client-id te-topology-id";
description description
"This container is used to identify the type, or types (as "This is the model of an abstract topology. A topology
a topology can support several types simultaneously), of contains nodes and links. Each topology MUST be identified
the topology. by a unique te-topology-id for reason that a network could
Topology types are the subject of several integrity contain many topologies.";
constraints that an implementing server can validate in leaf provider-id {
order to maintain integrity of the datastore. type te-global-id;
Topology types are indicated through separate data nodes;
the set of topology types is expected to increase over
time.
To add support for a new topology, an augmenting module
needs to augment this container with a new empty optional
container to indicate the new topology type.
The use of a container allows to indicate a
subcategorization of topology types.
The container SHALL NOT be augmented with any data nodes
that serve a purpose other than identifying a particular
topology type.";
uses te-topology-type; // Defines the TE topology type.
}
list node {
key "te-node-id";
leaf te-node-id {
type te-node-id;
description description
"The identifier of a node in the topology. "An identifier to uniquely identify a provider.";
A node is specific to a topology to which it belongs.";
} }
description leaf client-id {
"The list of network nodes defined for the topology."; type te-global-id;
leaf te-node-template {
type leafref {
path "/te-topologies/node-template/name";
}
description description
"The reference to a TE node template."; "An identifier to uniquely identify a client.";
} }
uses te-node-attributes; leaf te-topology-id {
uses te-node-state-attributes; type te-topology-id;
}
list link {
key "source-te-node-id source-te-link-id "
+ "dest-te-node-id dest-te-link-id";
leaf source-te-node-id {
type leafref {
path "../../node/te-node-id";
}
mandatory true;
description description<