This module defines a common base data model for a collection of nodes in a network. Node definitions are further used in netwo...
Version: 2018-02-26
module ietf-network { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-network"; prefix nw; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; } organization "IETF I2RS (Interface to the Routing System) Working Group"; contact "WG Web: <https://datatracker.ietf.org/wg/i2rs/> WG List: <mailto:i2rs@ietf.org> Editor: Alexander Clemm <mailto:ludwig@clemm.org> Editor: Jan Medved <mailto:jmedved@cisco.com> Editor: Robert Varga <mailto:robert.varga@pantheon.tech> Editor: Nitin Bahadur <mailto:nitin_bahadur@yahoo.com> Editor: Hariharan Ananthakrishnan <mailto:hari@packetdesign.com> Editor: Xufeng Liu <mailto:xufeng.liu.ietf@gmail.com>"; description "This module defines a common base data model for a collection of nodes in a network. Node definitions are further used in network topologies and inventories. Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 8345; see the RFC itself for full legal notices."; revision "2018-02-26" { description "Initial revision."; reference "RFC 8345: A YANG Data Model for Network Topologies"; } typedef node-id { type inet:uri; description "Identifier for a node. The precise structure of the node-id will be up to the implementation. For example, some implementations MAY pick a URI that includes the network-id as part of the path. 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 data model is instantiated in separate datastores. An implementation MAY choose to capture semantics in the identifier -- for example, to indicate the type of node."; } typedef network-id { type inet:uri; description "Identifier for a network. The precise structure of the network-id will be up to the implementation. The identifier SHOULD be chosen such that the same network will always be identified through the same identifier, even if the data model is instantiated in separate datastores. An implementation MAY choose to capture semantics in the identifier -- for example, to indicate the type of network."; } container networks { description "Serves as a top-level container for a list of networks."; list network { key "network-id"; description "Describes a network. A network typically contains an inventory of nodes, topological information (augmented through the network-topology data model), and layering information."; leaf network-id { type network-id; description "Identifies a network."; } container network-types { description "Serves as an augmentation target. The network type is indicated through corresponding presence containers augmented into this container."; container sap-network { presence "Indicates the SAP network type."; description "The presence of the container node indicates the SAP network type."; leaf-list service-type { type identityref { base vpn-common:service-type; } description "Indicates the set of supported service types."; } } // container sap-network container service { presence "Presence of the container indicates performance monitoring of the VPN service, and absence of the container indicates performance monitoring of the network itself."; description "Container for VPN service."; leaf service-type { type identityref { base vpn-common:service-type; } mandatory true; description "This indicates the network service type, e.g., L3VPN and VPLS."; } leaf vpn-id { type vpn-common:vpn-id; description "VPN identifier."; } leaf vpn-service-topology { type identityref { base vpn-common:vpn-topology; } description "VPN service topology, e.g., hub-spoke, any-to-any, and hub-spoke-disjoint."; } } // container service container te-topology { presence "Indicates a TE topology"; description "Its presence identifies the TE topology type."; } // container te-topology container fabric-network { presence "indicates fabric Network"; description "The presence of the container node indicates fabric topology"; } // container fabric-network } // container network-types list supporting-network { key "network-ref"; description "An underlay network, used to represent layered network topologies."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "References the underlay network."; } } // list supporting-network list node { key "node-id"; description "The inventory of nodes of this network."; leaf node-id { type node-id; description "Uniquely identifies a node within the containing network."; } list supporting-node { key "network-ref node-ref"; description "Represents another node that is in an underlay network and that supports this node. Used to represent layering structure."; leaf network-ref { type leafref { path "../../../nw:supporting-network/nw:network-ref"; require-instance false; } description "References the underlay network of which the underlay node is a part."; } leaf node-ref { type leafref { path "/nw:networks/nw:network/nw:node/nw:node-id"; require-instance false; } description "References the underlay node itself."; } } // list supporting-node list termination-point { key "tp-id"; description "A termination point can terminate a link. Depending on the type of topology, a termination point could, for example, refer to a port or an interface."; leaf tp-id { type tp-id; description "Termination point identifier."; } list supporting-termination-point { key "network-ref node-ref tp-ref"; description "This list identifies any termination points on which a given termination point depends or onto which it maps. Those termination points will themselves be contained in a supporting node. This dependency information can be inferred from the dependencies between links. Therefore, this item is not separately configurable. Hence, no corresponding constraint needs to be articulated. The corresponding information is simply provided by the implementing system."; leaf network-ref { type leafref { path "../../../nw:supporting-node/nw:network-ref"; require-instance false; } description "This leaf identifies in which topology the supporting termination point is present."; } leaf node-ref { type leafref { path "../../../nw:supporting-node/nw:node-ref"; require-instance false; } description "This leaf identifies in which node the supporting termination point is present."; } leaf tp-ref { type leafref { path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nw:node[nw:node-id=current()/../node-ref]/termination-point/tp-id"; require-instance false; } description "Reference to the underlay node (the underlay node must be in a different topology)."; } } // list supporting-termination-point container pm-statistics { config false; description "Container for termination point PM attributes."; leaf last-updated { type yang:date-and-time; config false; description "Indicates the date and time when the counters were last updated."; } leaf inbound-octets { type yang:counter64; description "The total number of octets received on the interface, including framing characters."; } leaf inbound-unicast { type yang:counter64; description "The total number of inbound unicast packets."; } leaf inbound-broadcast { type yang:counter64; description "The total number of inbound broadcast packets."; } leaf inbound-multicast { type yang:counter64; description "The total number of inbound multicast packets."; } leaf inbound-discards { type yang:counter64; description "The number of inbound packets that were discarded even though no errors had been detected. Possible reasons for discarding such a packet could be to free up buffer space, not enough buffer for too much data, etc."; } leaf inbound-errors { type yang:counter64; description "The number of inbound packets that contained errors."; } leaf inbound-unknown-protocol { type yang:counter64; description "The number of packets received via the interface that were discarded because of an unknown or unsupported protocol."; } leaf outbound-octets { type yang:counter64; description "The total number of octets transmitted out of the interface, including framing characters."; } leaf outbound-unicast { type yang:counter64; description "The total number of outbound unicast packets."; } leaf outbound-broadcast { type yang:counter64; description "The total number of outbound broadcast packets."; } leaf outbound-multicast { type yang:counter64; description "The total number of outbound multicast packets."; } leaf outbound-discards { type yang:counter64; description "The number of outbound packets that were discarded even though no errors had been detected to prevent their transmission. Possible reasons for discarding such a packet could be to free up buffer space, not enough buffer for too much data, etc."; } leaf outbound-errors { type yang:counter64; description "The number of outbound packets that contained errors."; } list vpn-network-access { key "network-access-id"; description "The list of PM based on VPN network accesses."; leaf network-access-id { type vpn-common:vpn-id; description "The reference to an identifier for the VPN network access."; } leaf last-updated { type yang:date-and-time; config false; description "Indicates the date and time when the counters were last updated."; } leaf inbound-octets { type yang:counter64; description "The total number of octets received on the interface, including framing characters."; } leaf inbound-unicast { type yang:counter64; description "The total number of inbound unicast packets."; } leaf inbound-broadcast { type yang:counter64; description "The total number of inbound broadcast packets."; } leaf inbound-multicast { type yang:counter64; description "The total number of inbound multicast packets."; } leaf inbound-discards { type yang:counter64; description "The number of inbound packets that were discarded even though no errors had been detected. Possible reasons for discarding such a packet could be to free up buffer space, not enough buffer for too much data, etc."; } leaf inbound-errors { type yang:counter64; description "The number of inbound packets that contained errors."; } leaf inbound-unknown-protocol { type yang:counter64; description "The number of packets received via the interface that were discarded because of an unknown or unsupported protocol."; } leaf outbound-octets { type yang:counter64; description "The total number of octets transmitted out of the interface, including framing characters."; } leaf outbound-unicast { type yang:counter64; description "The total number of outbound unicast packets."; } leaf outbound-broadcast { type yang:counter64; description "The total number of outbound broadcast packets."; } leaf outbound-multicast { type yang:counter64; description "The total number of outbound multicast packets."; } leaf outbound-discards { type yang:counter64; description "The number of outbound packets that were discarded even though no errors had been detected to prevent their transmission. Possible reasons for discarding such a packet could be to free up buffer space, not enough buffer for too much data, etc."; } leaf outbound-errors { type yang:counter64; description "The number of outbound packets that contained errors."; } } // list vpn-network-access } // container pm-statistics leaf te-tp-id { type te-types:te-tp-id; description "An identifier that uniquely identifies a TE termination point."; } container te { must "../te-tp-id"; presence "TE support"; description "Indicates TE support."; leaf admin-status { type te-types:te-admin-status; description "The administrative state of the LTP."; } leaf name { type string; description "A descriptive name for the LTP."; } list interface-switching-capability { key "switching-capability encoding"; description "List of ISCDs for this link."; reference "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description RFC 4203: OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; leaf switching-capability { type identityref { base te-types:switching-capabilities; } description "Switching capability for this interface."; } leaf encoding { type identityref { base te-types:lsp-encoding-types; } description "Encoding supported by this interface."; } list max-lsp-bandwidth { key "priority"; max-elements 8; description "Maximum Label Switched Path (LSP) bandwidth at priorities 0-7."; leaf priority { type uint8 { range "0..7"; } description "Priority."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list max-lsp-bandwidth } // list interface-switching-capability leaf inter-domain-plug-id { type binary; description "A network-wide unique number that identifies on the network a connection that supports a given inter-domain TE link. This is a more flexible alternative to specifying 'remote-te-node-id' and 'remote-te-link-tp-id' on a TE link when the provider either does not know 'remote-te-node-id' and 'remote-te-link-tp-id' or needs to give the client the flexibility to mix and match multiple topologies."; } leaf-list inter-layer-lock-id { type uint32; description "Inter-layer lock ID, used for path computation in a TE topology covering multiple layers or multiple regions."; reference "RFC 5212: Requirements for GMPLS-Based Multi-Region and Multi-Layer Networks (MRN/MLN) RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for Multi-Layer and Multi-Region Networks (MLN/MRN)"; } leaf oper-status { type te-types:te-oper-status; config false; description "The current operational state of the LTP."; } container geolocation { config false; description "Contains a GPS location."; leaf altitude { type int64; units "millimeters"; description "Distance above sea level."; } leaf latitude { type geographic-coordinate-degree { fraction-digits 0; range "-90..90"; } description "Relative position north or south on the Earth's surface."; } leaf longitude { type geographic-coordinate-degree { fraction-digits 0; range "-180..180"; } description "Angular distance east or west on the Earth's surface."; } } // container geolocation } // container te container fport-attributes { config false; description "Attributes for fabric ports"; leaf name { type string; description "Name of the port."; } leaf role { type fabric-port-role; description "Role of the port in a fabric."; } leaf type { type fabric-port-type; description "Type of the port"; } leaf device-port { type tp-ref; description "The device port it mapped to."; } choice tunnel-option { description "Tunnel options to connect two fabrics. It could be L2 Tunnel or L3 Tunnel."; } // choice tunnel-option } // container fport-attributes } // list termination-point list service { key "service-type"; description "A list of supported service types for the node."; leaf service-type { type identityref { base vpn-common:service-type; } description "Indicates a service type."; } list sap { key "sap-id"; description "The SAPs are an abstraction of the points to which network services such as L3VPNs, L2VPNs, or network slices can be attached."; leaf sap-id { type string; description "Indicates an identifier that uniquely identifies a SAP."; } leaf description { type string; description "A textual description of the SAP."; } leaf parent-termination-point { type nt:tp-id; description "Indicates the parent termination point to which the SAP is attached. A termination point can be a physical port, an interface, etc."; } leaf attachment-interface { type string; description "Indicates the interface to which the SAP is bound."; } leaf interface-type { type identityref { base interface-type; } description "The type of the interface to which the SAP is bound."; } leaf encapsulation-type { type identityref { base vpn-common:encapsulation-type; } description "Encapsulation type of the interface to which the SAP is bound."; } leaf role { type identityref { base interface-role; } description "Indicates the role of a SAP."; } leaf allows-child-saps { type boolean; description "Indicates whether the attachment interface of this SAP is capable of hosting per-service sub-interfaces."; } leaf-list peer-sap-id { type string; description "Indicates an identifier of the peer's termination identifier (e.g., a Customer Edge (CE)). This information can be used for correlation purposes, such as identifying the SAP that is attached to an endpoint that is provided in a service request."; } container sap-status { config false; description "Indicates the operational status of the SAP, independent of any service provisioned over it."; leaf status { type identityref { base operational-status; } config false; description "Operational status."; } leaf last-change { type yang:date-and-time; config false; description "Indicates the actual date and time of the service status change."; } } // container sap-status container service-status { description "Indicates the service status."; container admin-status { description "Administrative service status."; leaf status { type identityref { base vpn-common:administrative-status; } description "Administrative status of the service provisioned at the SAP."; } leaf last-change { type yang:date-and-time; description "Indicates the actual date and time of the service status change."; } } // container admin-status container oper-status { config false; description "Operational status of the service provisioned at the SAP."; leaf status { type identityref { base operational-status; } config false; description "Operational status."; } leaf last-change { type yang:date-and-time; config false; description "Indicates the actual date and time of the service status change."; } } // container oper-status } // container service-status } // list sap } // list service leaf node-type { type identityref { base node-type; } description "Node type, e.g., PE, P, and ASBR."; } container entry-summary { config false; description "Container for VPN or network entry summary."; container ipv4-num { description "IPv4-specific parameters."; leaf maximum-routes { type uint32; description "Indicates the maximum number of IPv4 routes for the VPN or network."; } leaf total-active-routes { type uint32; description "Indicates total active IPv4 routes for the VPN or network."; } } // container ipv4-num container ipv6-num { description "IPv6-specific parameters."; leaf maximum-routes { type uint32; description "Indicates the maximum number of IPv6 routes for the VPN or network."; } leaf total-active-routes { type uint32; description "Indicates total active IPv6 routes for the VPN or network."; } } // container ipv6-num container mac-num { description "MAC statistics."; leaf maximum-mac-entries { type uint32; description "Indicates the maximum number of MAC entries for the VPN or network."; } leaf total-active-mac-entries { type uint32; description "Indicates the total active MAC entries for the VPN or network."; } } // container mac-num } // container entry-summary leaf role { type identityref { base vpn-common:role; } default "vpn-common:any-to-any-role"; description "Role of the node in the VPN service topology."; } leaf te-node-id { type te-types:te-node-id; description "The identifier of a node in the TE topology. A node is specific to a topology to which it belongs."; } container te { must "../te-node-id" { description "'te-node-id' is mandatory."; } must "count(../nw:supporting-node)<=1" { description "For a node in a TE topology, there cannot be more than one supporting node. If multiple nodes are abstracted, the 'underlay-topology' field is used."; } presence "TE support"; description "Indicates TE support."; leaf-list te-node-template { if-feature template; type leafref { path "../../../../te/templates/node-template/name"; } description "The reference to a TE node template."; } container te-node-attributes { description "Contains node attributes in a TE topology."; leaf admin-status { type te-types:te-admin-status; description "The administrative state of the link."; } container connectivity-matrices { description "Contains a connectivity matrix on a TE node."; leaf number-of-entries { type uint16; description "The number of connectivity matrix entries. If this number is specified in the configuration request, the number is the requested number of entries, which may not all be listed in the list; if this number is reported in the state data, the number is the current number of operational entries."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions leaf is-allowed { type boolean; description "'true' - switching is allowed; 'false' - switching is disallowed."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay container path-constraints { description "TE named path constraints container."; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth leaf link-protection { type identityref { base link-protection-type; } default "te-types:link-protection-unprotected"; description "Link protection type required for the links included in the computed path."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } leaf setup-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested setup priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf hold-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested hold priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf signaling-type { type identityref { base path-signaling-type; } default "te-types:path-setup-rsvp"; description "TE tunnel path signaling type."; } container path-metric-bounds { description "Top-level container for the list of path metric bounds."; list path-metric-bound { key "metric-type"; description "List of path metric bounds, which can apply to link and path metrics. TE paths which have at least one path metric which exceeds the specified bounds MUST NOT be selected. TE paths that traverse TE links which have at least one link metric which exceeds the specified bounds MUST NOT be selected."; leaf metric-type { type identityref { base link-path-metric-type; } description "Identifies an entry in the list of 'metric-type' items bound for the TE path."; } leaf upper-bound { type uint64; default "0"; description "Upper bound on the specified 'metric-type'. A zero indicates an unbounded upper limit for the specificied 'metric-type'. The unit of is interpreted in the context of the 'metric-type' identity."; } } // list path-metric-bound } // container path-metric-bounds container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names leaf disjointness { type te-path-disjointness; description "The type of resource disjointness. When configured for a primary path, the disjointness level applies to all secondary LSPs. When configured for a secondary path, the disjointness level overrides the level configured for the primary path."; } } // container path-constraints container optimizations { description "The objective function container that includes attributes to impose when computing a TE path."; choice algorithm { description "Optimizations algorithm."; case metric { if-feature path-optimization-metric; list optimization-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-optimization-type; } description "Identifies the 'metric-type' that the path computation process uses for optimization."; } leaf weight { type uint8; default "1"; description "TE path metric normalization weight."; } container explicit-route-exclude-objects { when "../metric-type = 'te-types:path-metric-optimize-excludes'"; description "Container for the 'exclude route' object list."; list route-object-exclude-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be excluded in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label case srlg { description "An SRLG value to be included or excluded."; container srlg { description "SRLG container."; leaf srlg { type uint32; description "SRLG value."; } } // container srlg } // case srlg } // choice type } // list route-object-exclude-object } // container explicit-route-exclude-objects container explicit-route-include-objects { when "../metric-type = 'te-types:path-metric-optimize-includes'"; description "Container for the 'include route' object list."; list route-object-include-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be included in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list route-object-include-object } // container explicit-route-include-objects } // list optimization-metric container tiebreakers { status deprecated; description "Container for the list of tiebreakers. This container has been deprecated by the tiebreaker leaf."; list tiebreaker { key "tiebreaker-type"; status deprecated; description "The list of tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; leaf tiebreaker-type { type identityref { base path-metric-type; } status deprecated; description "Identifies an entry in the list of tiebreakers."; } } // list tiebreaker } // container tiebreakers } // case metric case objective-function { if-feature path-optimization-objective-function; container objective-function { description "The objective function container that includes attributes to impose when computing a TE path."; leaf objective-function-type { type identityref { base objective-function-type; } default "te-types:of-minimize-cost-path"; description "Objective function entry."; } } // container objective-function } // case objective-function } // choice algorithm } // container optimizations leaf tiebreaker { type identityref { base path-tiebreaker-type; } default "te-types:path-tiebreaker-random"; description "The tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; } container path-properties { config false; description "The TE path properties."; list path-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-type; } description "TE path metric type."; } leaf accumulative-value { type uint64; description "TE path metric accumulative value."; } } // list path-metric container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names container path-route-objects { description "Container for the list of route objects either returned by the computation engine or actually used by an LSP."; list path-route-object { key "index"; ordered-by user; description "List of route objects either returned by the computation engine or actually used by an LSP."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-route-object } // container path-route-objects } // container path-properties list connectivity-matrix { key "id"; description "Represents a node's switching limitations, i.e., limitations in the interconnecting network TE links across the node."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf id { type uint32; description "Identifies the connectivity matrix entry."; } container from { description "Reference to a source LTP."; leaf tp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description "Relative reference to a termination point."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions } // container from container to { description "Reference to a destination LTP."; leaf tp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description "Relative reference to a termination point."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions } // container to leaf is-allowed { type boolean; description "'true' - switching is allowed; 'false' - switching is disallowed."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay container path-constraints { description "TE named path constraints container."; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth leaf link-protection { type identityref { base link-protection-type; } default "te-types:link-protection-unprotected"; description "Link protection type required for the links included in the computed path."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } leaf setup-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested setup priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf hold-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested hold priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf signaling-type { type identityref { base path-signaling-type; } default "te-types:path-setup-rsvp"; description "TE tunnel path signaling type."; } container path-metric-bounds { description "Top-level container for the list of path metric bounds."; list path-metric-bound { key "metric-type"; description "List of path metric bounds, which can apply to link and path metrics. TE paths which have at least one path metric which exceeds the specified bounds MUST NOT be selected. TE paths that traverse TE links which have at least one link metric which exceeds the specified bounds MUST NOT be selected."; leaf metric-type { type identityref { base link-path-metric-type; } description "Identifies an entry in the list of 'metric-type' items bound for the TE path."; } leaf upper-bound { type uint64; default "0"; description "Upper bound on the specified 'metric-type'. A zero indicates an unbounded upper limit for the specificied 'metric-type'. The unit of is interpreted in the context of the 'metric-type' identity."; } } // list path-metric-bound } // container path-metric-bounds container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names leaf disjointness { type te-path-disjointness; description "The type of resource disjointness. When configured for a primary path, the disjointness level applies to all secondary LSPs. When configured for a secondary path, the disjointness level overrides the level configured for the primary path."; } } // container path-constraints container optimizations { description "The objective function container that includes attributes to impose when computing a TE path."; choice algorithm { description "Optimizations algorithm."; case metric { if-feature path-optimization-metric; list optimization-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-optimization-type; } description "Identifies the 'metric-type' that the path computation process uses for optimization."; } leaf weight { type uint8; default "1"; description "TE path metric normalization weight."; } container explicit-route-exclude-objects { when "../metric-type = 'te-types:path-metric-optimize-excludes'"; description "Container for the 'exclude route' object list."; list route-object-exclude-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be excluded in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label case srlg { description "An SRLG value to be included or excluded."; container srlg { description "SRLG container."; leaf srlg { type uint32; description "SRLG value."; } } // container srlg } // case srlg } // choice type } // list route-object-exclude-object } // container explicit-route-exclude-objects container explicit-route-include-objects { when "../metric-type = 'te-types:path-metric-optimize-includes'"; description "Container for the 'include route' object list."; list route-object-include-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be included in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list route-object-include-object } // container explicit-route-include-objects } // list optimization-metric container tiebreakers { status deprecated; description "Container for the list of tiebreakers. This container has been deprecated by the tiebreaker leaf."; list tiebreaker { key "tiebreaker-type"; status deprecated; description "The list of tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; leaf tiebreaker-type { type identityref { base path-metric-type; } status deprecated; description "Identifies an entry in the list of tiebreakers."; } } // list tiebreaker } // container tiebreakers } // case metric case objective-function { if-feature path-optimization-objective-function; container objective-function { description "The objective function container that includes attributes to impose when computing a TE path."; leaf objective-function-type { type identityref { base objective-function-type; } default "te-types:of-minimize-cost-path"; description "Objective function entry."; } } // container objective-function } // case objective-function } // choice algorithm } // container optimizations leaf tiebreaker { type identityref { base path-tiebreaker-type; } default "te-types:path-tiebreaker-random"; description "The tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; } container path-properties { config false; description "The TE path properties."; list path-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-type; } description "TE path metric type."; } leaf accumulative-value { type uint64; description "TE path metric accumulative value."; } } // list path-metric container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names container path-route-objects { description "Container for the list of route objects either returned by the computation engine or actually used by an LSP."; list path-route-object { key "index"; ordered-by user; description "List of route objects either returned by the computation engine or actually used by an LSP."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-route-object } // container path-route-objects } // container path-properties } // list connectivity-matrix } // container connectivity-matrices leaf domain-id { type uint32; description "Identifies the domain to which this node belongs. This attribute is used to support inter-domain links."; reference "RFC 5152: A Per-Domain Path Computation Method for Establishing Inter-Domain Traffic Engineering (TE) Label Switched Paths (LSPs) RFC 5316: ISIS Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering RFC 5392: OSPF Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering"; } leaf is-abstract { type empty; description "Present if the node is abstract; not present if the node is actual."; } leaf name { type string; description "Node name."; } leaf-list signaling-address { type inet:ip-address; description "The node's signaling address."; } container underlay-topology { if-feature te-topology-hierarchy; description "When an abstract node encapsulates a topology, the attributes in this container point to said topology."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } } // container underlay-topology } // container te-node-attributes leaf oper-status { type te-types:te-oper-status; config false; description "The current operational state of the node."; } container geolocation { config false; description "Contains a GPS location."; leaf altitude { type int64; units "millimeters"; description "Distance above sea level."; } leaf latitude { type geographic-coordinate-degree { fraction-digits 0; range "-90..90"; } description "Relative position north or south on the Earth's surface."; } leaf longitude { type geographic-coordinate-degree { fraction-digits 0; range "-180..180"; } description "Angular distance east or west on the Earth's surface."; } } // container geolocation leaf is-multi-access-dr { type empty; config false; description "The presence of this attribute indicates that this TE node is a pseudonode elected as a designated router."; reference "RFC 1195: Use of OSI IS-IS for Routing in TCP/IP and Dual Environments RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2"; } leaf information-source { type te-info-source; config false; description "Indicates the type of information source."; } leaf information-source-instance { type string; config false; description "The name indicating the instance of the information source."; } container information-source-state { config false; description "Contains state attributes related to the information source."; leaf credibility-preference { type uint16; description "The preference value for calculating the Traffic Engineering database credibility value used for tie-break selection between different information-source values. A higher value is preferable."; } leaf logical-network-element { type string; description "When applicable, this is the name of a logical network element from which the information is learned."; } leaf network-instance { type string; description "When applicable, this is the name of a network instance from which the information is learned."; } container topology { description "When the information is processed by the system, the attributes in this container indicate which topology is used to generate the result information."; leaf node-ref { type leafref { path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nw:node/nw:node-id"; require-instance false; } description "Used to reference a node. Nodes are identified relative to the network that contains them."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } } // container topology } // container information-source-state list information-source-entry { key "information-source information-source-instance"; config false; description "A list of information sources learned, including the source that is used."; leaf information-source { type te-info-source; config false; description "Indicates the type of information source."; } leaf information-source-instance { type string; config false; description "The name indicating the instance of the information source."; } container information-source-state { config false; description "Contains state attributes related to the information source."; leaf credibility-preference { type uint16; description "The preference value for calculating the Traffic Engineering database credibility value used for tie-break selection between different information-source values. A higher value is preferable."; } leaf logical-network-element { type string; description "When applicable, this is the name of a logical network element from which the information is learned."; } leaf network-instance { type string; description "When applicable, this is the name of a network instance from which the information is learned."; } container topology { description "When the information is processed by the system, the attributes in this container indicate which topology is used to generate the result information."; leaf node-ref { type leafref { path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nw:node/nw:node-id"; require-instance false; } description "Used to reference a node. Nodes are identified relative to the network that contains them."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } } // container topology } // container information-source-state container connectivity-matrices { description "Contains a connectivity matrix on a TE node."; leaf number-of-entries { type uint16; description "The number of connectivity matrix entries. If this number is specified in the configuration request, the number is the requested number of entries, which may not all be listed in the list; if this number is reported in the state data, the number is the current number of operational entries."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions leaf is-allowed { type boolean; description "'true' - switching is allowed; 'false' - switching is disallowed."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay container path-constraints { description "TE named path constraints container."; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth leaf link-protection { type identityref { base link-protection-type; } default "te-types:link-protection-unprotected"; description "Link protection type required for the links included in the computed path."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } leaf setup-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested setup priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf hold-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested hold priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf signaling-type { type identityref { base path-signaling-type; } default "te-types:path-setup-rsvp"; description "TE tunnel path signaling type."; } container path-metric-bounds { description "Top-level container for the list of path metric bounds."; list path-metric-bound { key "metric-type"; description "List of path metric bounds, which can apply to link and path metrics. TE paths which have at least one path metric which exceeds the specified bounds MUST NOT be selected. TE paths that traverse TE links which have at least one link metric which exceeds the specified bounds MUST NOT be selected."; leaf metric-type { type identityref { base link-path-metric-type; } description "Identifies an entry in the list of 'metric-type' items bound for the TE path."; } leaf upper-bound { type uint64; default "0"; description "Upper bound on the specified 'metric-type'. A zero indicates an unbounded upper limit for the specificied 'metric-type'. The unit of is interpreted in the context of the 'metric-type' identity."; } } // list path-metric-bound } // container path-metric-bounds container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names leaf disjointness { type te-path-disjointness; description "The type of resource disjointness. When configured for a primary path, the disjointness level applies to all secondary LSPs. When configured for a secondary path, the disjointness level overrides the level configured for the primary path."; } } // container path-constraints container optimizations { description "The objective function container that includes attributes to impose when computing a TE path."; choice algorithm { description "Optimizations algorithm."; case metric { if-feature path-optimization-metric; list optimization-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-optimization-type; } description "Identifies the 'metric-type' that the path computation process uses for optimization."; } leaf weight { type uint8; default "1"; description "TE path metric normalization weight."; } container explicit-route-exclude-objects { when "../metric-type = 'te-types:path-metric-optimize-excludes'"; description "Container for the 'exclude route' object list."; list route-object-exclude-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be excluded in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label case srlg { description "An SRLG value to be included or excluded."; container srlg { description "SRLG container."; leaf srlg { type uint32; description "SRLG value."; } } // container srlg } // case srlg } // choice type } // list route-object-exclude-object } // container explicit-route-exclude-objects container explicit-route-include-objects { when "../metric-type = 'te-types:path-metric-optimize-includes'"; description "Container for the 'include route' object list."; list route-object-include-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be included in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list route-object-include-object } // container explicit-route-include-objects } // list optimization-metric container tiebreakers { status deprecated; description "Container for the list of tiebreakers. This container has been deprecated by the tiebreaker leaf."; list tiebreaker { key "tiebreaker-type"; status deprecated; description "The list of tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; leaf tiebreaker-type { type identityref { base path-metric-type; } status deprecated; description "Identifies an entry in the list of tiebreakers."; } } // list tiebreaker } // container tiebreakers } // case metric case objective-function { if-feature path-optimization-objective-function; container objective-function { description "The objective function container that includes attributes to impose when computing a TE path."; leaf objective-function-type { type identityref { base objective-function-type; } default "te-types:of-minimize-cost-path"; description "Objective function entry."; } } // container objective-function } // case objective-function } // choice algorithm } // container optimizations leaf tiebreaker { type identityref { base path-tiebreaker-type; } default "te-types:path-tiebreaker-random"; description "The tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; } container path-properties { config false; description "The TE path properties."; list path-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-type; } description "TE path metric type."; } leaf accumulative-value { type uint64; description "TE path metric accumulative value."; } } // list path-metric container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names container path-route-objects { description "Container for the list of route objects either returned by the computation engine or actually used by an LSP."; list path-route-object { key "index"; ordered-by user; description "List of route objects either returned by the computation engine or actually used by an LSP."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-route-object } // container path-route-objects } // container path-properties list connectivity-matrix { key "id"; description "Represents a node's switching limitations, i.e., limitations in the interconnecting network TE links across the node."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf id { type uint32; description "Identifies the connectivity matrix entry."; } container from { description "Reference to a source LTP."; leaf tp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description "Relative reference to a termination point."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions } // container from container to { description "Reference to a destination LTP."; leaf tp-ref { type leafref { path "../../../../../../nt:termination-point/nt:tp-id"; } description "Relative reference to a termination point."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions } // container to leaf is-allowed { type boolean; description "'true' - switching is allowed; 'false' - switching is disallowed."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay container path-constraints { description "TE named path constraints container."; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth leaf link-protection { type identityref { base link-protection-type; } default "te-types:link-protection-unprotected"; description "Link protection type required for the links included in the computed path."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } leaf setup-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested setup priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf hold-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested hold priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf signaling-type { type identityref { base path-signaling-type; } default "te-types:path-setup-rsvp"; description "TE tunnel path signaling type."; } container path-metric-bounds { description "Top-level container for the list of path metric bounds."; list path-metric-bound { key "metric-type"; description "List of path metric bounds, which can apply to link and path metrics. TE paths which have at least one path metric which exceeds the specified bounds MUST NOT be selected. TE paths that traverse TE links which have at least one link metric which exceeds the specified bounds MUST NOT be selected."; leaf metric-type { type identityref { base link-path-metric-type; } description "Identifies an entry in the list of 'metric-type' items bound for the TE path."; } leaf upper-bound { type uint64; default "0"; description "Upper bound on the specified 'metric-type'. A zero indicates an unbounded upper limit for the specificied 'metric-type'. The unit of is interpreted in the context of the 'metric-type' identity."; } } // list path-metric-bound } // container path-metric-bounds container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names leaf disjointness { type te-path-disjointness; description "The type of resource disjointness. When configured for a primary path, the disjointness level applies to all secondary LSPs. When configured for a secondary path, the disjointness level overrides the level configured for the primary path."; } } // container path-constraints container optimizations { description "The objective function container that includes attributes to impose when computing a TE path."; choice algorithm { description "Optimizations algorithm."; case metric { if-feature path-optimization-metric; list optimization-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-optimization-type; } description "Identifies the 'metric-type' that the path computation process uses for optimization."; } leaf weight { type uint8; default "1"; description "TE path metric normalization weight."; } container explicit-route-exclude-objects { when "../metric-type = 'te-types:path-metric-optimize-excludes'"; description "Container for the 'exclude route' object list."; list route-object-exclude-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be excluded in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label case srlg { description "An SRLG value to be included or excluded."; container srlg { description "SRLG container."; leaf srlg { type uint32; description "SRLG value."; } } // container srlg } // case srlg } // choice type } // list route-object-exclude-object } // container explicit-route-exclude-objects container explicit-route-include-objects { when "../metric-type = 'te-types:path-metric-optimize-includes'"; description "Container for the 'include route' object list."; list route-object-include-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be included in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list route-object-include-object } // container explicit-route-include-objects } // list optimization-metric container tiebreakers { status deprecated; description "Container for the list of tiebreakers. This container has been deprecated by the tiebreaker leaf."; list tiebreaker { key "tiebreaker-type"; status deprecated; description "The list of tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; leaf tiebreaker-type { type identityref { base path-metric-type; } status deprecated; description "Identifies an entry in the list of tiebreakers."; } } // list tiebreaker } // container tiebreakers } // case metric case objective-function { if-feature path-optimization-objective-function; container objective-function { description "The objective function container that includes attributes to impose when computing a TE path."; leaf objective-function-type { type identityref { base objective-function-type; } default "te-types:of-minimize-cost-path"; description "Objective function entry."; } } // container objective-function } // case objective-function } // choice algorithm } // container optimizations leaf tiebreaker { type identityref { base path-tiebreaker-type; } default "te-types:path-tiebreaker-random"; description "The tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; } container path-properties { config false; description "The TE path properties."; list path-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-type; } description "TE path metric type."; } leaf accumulative-value { type uint64; description "TE path metric accumulative value."; } } // list path-metric container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names container path-route-objects { description "Container for the list of route objects either returned by the computation engine or actually used by an LSP."; list path-route-object { key "index"; ordered-by user; description "List of route objects either returned by the computation engine or actually used by an LSP."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-route-object } // container path-route-objects } // container path-properties } // list connectivity-matrix } // container connectivity-matrices leaf domain-id { type uint32; description "Identifies the domain to which this node belongs. This attribute is used to support inter-domain links."; reference "RFC 5152: A Per-Domain Path Computation Method for Establishing Inter-Domain Traffic Engineering (TE) Label Switched Paths (LSPs) RFC 5316: ISIS Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering RFC 5392: OSPF Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering"; } leaf is-abstract { type empty; description "Present if the node is abstract; not present if the node is actual."; } leaf name { type string; description "Node name."; } leaf-list signaling-address { type inet:ip-address; description "The node's signaling address."; } container underlay-topology { if-feature te-topology-hierarchy; description "When an abstract node encapsulates a topology, the attributes in this container point to said topology."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } } // container underlay-topology } // list information-source-entry container statistics { config false; description "Statistics data."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this interface's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container node { description "Contains statistics attributes at the TE node level."; leaf disables { type yang:counter32; description "Number of times that a node was disabled."; } leaf enables { type yang:counter32; description "Number of times that a node was enabled."; } leaf maintenance-sets { type yang:counter32; description "Number of times that a node was put in maintenance."; } leaf maintenance-clears { type yang:counter32; description "Number of times that a node was taken out of maintenance."; } leaf modifies { type yang:counter32; description "Number of times that a node was modified."; } } // container node container connectivity-matrix-entry { description "Contains statistics attributes at the level of a connectivity matrix entry."; leaf creates { type yang:counter32; description "Number of times that a connectivity matrix entry was created."; reference "RFC 6241: Network Configuration Protocol (NETCONF), Section 7.2, 'create' operation"; } leaf deletes { type yang:counter32; description "Number of times that a connectivity matrix entry was deleted."; reference "RFC 6241: Network Configuration Protocol (NETCONF), Section 7.2, 'delete' operation"; } leaf disables { type yang:counter32; description "Number of times that a connectivity matrix entry was disabled."; } leaf enables { type yang:counter32; description "Number of times that a connectivity matrix entry was enabled."; } leaf modifies { type yang:counter32; description "Number of times that a connectivity matrix entry was modified."; } } // container connectivity-matrix-entry } // container statistics list tunnel-termination-point { key "tunnel-tp-id"; description "A termination point can terminate a tunnel."; leaf tunnel-tp-id { type binary; description "TTP identifier."; } leaf admin-status { type te-types:te-admin-status; description "The administrative state of the TTP."; } leaf name { type string; description "A descriptive name for the TTP."; } leaf switching-capability { type identityref { base te-types:switching-capabilities; } description "Switching capability for this interface."; } leaf encoding { type identityref { base te-types:lsp-encoding-types; } description "Encoding supported by this interface."; } leaf-list inter-layer-lock-id { type uint32; description "Inter-layer lock ID, used for path computation in a TE topology covering multiple layers or multiple regions."; reference "RFC 5212: Requirements for GMPLS-Based Multi-Region and Multi-Layer Networks (MRN/MLN) RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for Multi-Layer and Multi-Region Networks (MLN/MRN)"; } leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "The protection type that this TTP is capable of."; } container client-layer-adaptation { description "Contains capability information to support a client-layer adaptation in a multi-layer topology."; list switching-capability { key "switching-capability encoding"; description "List of supported switching capabilities."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS) RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for Multi-Layer and Multi-Region Networks (MLN/MRN)"; leaf switching-capability { type identityref { base te-types:switching-capabilities; } description "Switching capability for the client-layer adaptation."; } leaf encoding { type identityref { base te-types:lsp-encoding-types; } description "Encoding supported by the client-layer adaptation."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list switching-capability } // container client-layer-adaptation container local-link-connectivities { description "Contains an LLCL for a TTP on a TE node."; leaf number-of-entries { type uint16; description "The number of LLCL entries. If this number is specified in the configuration request, the number is the requested number of entries, which may not all be listed in the list; if this number is reported in the state data, the number is the current number of operational entries."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions leaf is-allowed { type boolean; description "'true' - switching is allowed; 'false' - switching is disallowed."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay container path-constraints { description "TE named path constraints container."; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth leaf link-protection { type identityref { base link-protection-type; } default "te-types:link-protection-unprotected"; description "Link protection type required for the links included in the computed path."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } leaf setup-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested setup priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf hold-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested hold priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf signaling-type { type identityref { base path-signaling-type; } default "te-types:path-setup-rsvp"; description "TE tunnel path signaling type."; } container path-metric-bounds { description "Top-level container for the list of path metric bounds."; list path-metric-bound { key "metric-type"; description "List of path metric bounds, which can apply to link and path metrics. TE paths which have at least one path metric which exceeds the specified bounds MUST NOT be selected. TE paths that traverse TE links which have at least one link metric which exceeds the specified bounds MUST NOT be selected."; leaf metric-type { type identityref { base link-path-metric-type; } description "Identifies an entry in the list of 'metric-type' items bound for the TE path."; } leaf upper-bound { type uint64; default "0"; description "Upper bound on the specified 'metric-type'. A zero indicates an unbounded upper limit for the specificied 'metric-type'. The unit of is interpreted in the context of the 'metric-type' identity."; } } // list path-metric-bound } // container path-metric-bounds container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names leaf disjointness { type te-path-disjointness; description "The type of resource disjointness. When configured for a primary path, the disjointness level applies to all secondary LSPs. When configured for a secondary path, the disjointness level overrides the level configured for the primary path."; } } // container path-constraints container optimizations { description "The objective function container that includes attributes to impose when computing a TE path."; choice algorithm { description "Optimizations algorithm."; case metric { if-feature path-optimization-metric; list optimization-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-optimization-type; } description "Identifies the 'metric-type' that the path computation process uses for optimization."; } leaf weight { type uint8; default "1"; description "TE path metric normalization weight."; } container explicit-route-exclude-objects { when "../metric-type = 'te-types:path-metric-optimize-excludes'"; description "Container for the 'exclude route' object list."; list route-object-exclude-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be excluded in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label case srlg { description "An SRLG value to be included or excluded."; container srlg { description "SRLG container."; leaf srlg { type uint32; description "SRLG value."; } } // container srlg } // case srlg } // choice type } // list route-object-exclude-object } // container explicit-route-exclude-objects container explicit-route-include-objects { when "../metric-type = 'te-types:path-metric-optimize-includes'"; description "Container for the 'include route' object list."; list route-object-include-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be included in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list route-object-include-object } // container explicit-route-include-objects } // list optimization-metric container tiebreakers { status deprecated; description "Container for the list of tiebreakers. This container has been deprecated by the tiebreaker leaf."; list tiebreaker { key "tiebreaker-type"; status deprecated; description "The list of tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; leaf tiebreaker-type { type identityref { base path-metric-type; } status deprecated; description "Identifies an entry in the list of tiebreakers."; } } // list tiebreaker } // container tiebreakers } // case metric case objective-function { if-feature path-optimization-objective-function; container objective-function { description "The objective function container that includes attributes to impose when computing a TE path."; leaf objective-function-type { type identityref { base objective-function-type; } default "te-types:of-minimize-cost-path"; description "Objective function entry."; } } // container objective-function } // case objective-function } // choice algorithm } // container optimizations leaf tiebreaker { type identityref { base path-tiebreaker-type; } default "te-types:path-tiebreaker-random"; description "The tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; } container path-properties { config false; description "The TE path properties."; list path-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-type; } description "TE path metric type."; } leaf accumulative-value { type uint64; description "TE path metric accumulative value."; } } // list path-metric container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names container path-route-objects { description "Container for the list of route objects either returned by the computation engine or actually used by an LSP."; list path-route-object { key "index"; ordered-by user; description "List of route objects either returned by the computation engine or actually used by an LSP."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-route-object } // container path-route-objects } // container path-properties list local-link-connectivity { key "link-tp-ref"; description "The termination capabilities between the TTP and the LTP. This capability information can be used to compute the tunnel path. The Interface Adjustment Capability Descriptors (IACDs) (defined in RFC 6001) on each LTP can be derived from this list."; reference "RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for Multi-Layer and Multi-Region Networks (MLN/MRN)"; leaf link-tp-ref { type leafref { path "../../../../../nt:termination-point/nt:tp-id"; } description "LTP."; } container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions leaf is-allowed { type boolean; description "'true' - switching is allowed; 'false' - switching is disallowed."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay container path-constraints { description "TE named path constraints container."; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth leaf link-protection { type identityref { base link-protection-type; } default "te-types:link-protection-unprotected"; description "Link protection type required for the links included in the computed path."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } leaf setup-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested setup priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf hold-priority { type uint8 { range "0..7"; } default "7"; description "TE LSP requested hold priority."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf signaling-type { type identityref { base path-signaling-type; } default "te-types:path-setup-rsvp"; description "TE tunnel path signaling type."; } container path-metric-bounds { description "Top-level container for the list of path metric bounds."; list path-metric-bound { key "metric-type"; description "List of path metric bounds, which can apply to link and path metrics. TE paths which have at least one path metric which exceeds the specified bounds MUST NOT be selected. TE paths that traverse TE links which have at least one link metric which exceeds the specified bounds MUST NOT be selected."; leaf metric-type { type identityref { base link-path-metric-type; } description "Identifies an entry in the list of 'metric-type' items bound for the TE path."; } leaf upper-bound { type uint64; default "0"; description "Upper bound on the specified 'metric-type'. A zero indicates an unbounded upper limit for the specificied 'metric-type'. The unit of is interpreted in the context of the 'metric-type' identity."; } } // list path-metric-bound } // container path-metric-bounds container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names leaf disjointness { type te-path-disjointness; description "The type of resource disjointness. When configured for a primary path, the disjointness level applies to all secondary LSPs. When configured for a secondary path, the disjointness level overrides the level configured for the primary path."; } } // container path-constraints container optimizations { description "The objective function container that includes attributes to impose when computing a TE path."; choice algorithm { description "Optimizations algorithm."; case metric { if-feature path-optimization-metric; list optimization-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-optimization-type; } description "Identifies the 'metric-type' that the path computation process uses for optimization."; } leaf weight { type uint8; default "1"; description "TE path metric normalization weight."; } container explicit-route-exclude-objects { when "../metric-type = 'te-types:path-metric-optimize-excludes'"; description "Container for the 'exclude route' object list."; list route-object-exclude-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be excluded in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label case srlg { description "An SRLG value to be included or excluded."; container srlg { description "SRLG container."; leaf srlg { type uint32; description "SRLG value."; } } // container srlg } // case srlg } // choice type } // list route-object-exclude-object } // container explicit-route-exclude-objects container explicit-route-include-objects { when "../metric-type = 'te-types:path-metric-optimize-includes'"; description "Container for the 'include route' object list."; list route-object-include-object { key "index"; ordered-by user; description "List of Explicit Route Objects to be included in the path computation."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list route-object-include-object } // container explicit-route-include-objects } // list optimization-metric container tiebreakers { status deprecated; description "Container for the list of tiebreakers. This container has been deprecated by the tiebreaker leaf."; list tiebreaker { key "tiebreaker-type"; status deprecated; description "The list of tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; leaf tiebreaker-type { type identityref { base path-metric-type; } status deprecated; description "Identifies an entry in the list of tiebreakers."; } } // list tiebreaker } // container tiebreakers } // case metric case objective-function { if-feature path-optimization-objective-function; container objective-function { description "The objective function container that includes attributes to impose when computing a TE path."; leaf objective-function-type { type identityref { base objective-function-type; } default "te-types:of-minimize-cost-path"; description "Objective function entry."; } } // container objective-function } // case objective-function } // choice algorithm } // container optimizations leaf tiebreaker { type identityref { base path-tiebreaker-type; } default "te-types:path-tiebreaker-random"; description "The tiebreaker criteria to apply on an equally favored set of paths, in order to pick the best."; } container path-properties { config false; description "The TE path properties."; list path-metric { key "metric-type"; description "TE path metric type."; leaf metric-type { type identityref { base path-metric-type; } description "TE path metric type."; } leaf accumulative-value { type uint64; description "TE path metric accumulative value."; } } // list path-metric container path-affinities-values { description "Path affinities represented as values."; list path-affinities-value { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of value affinity constraints."; } leaf value { type admin-groups; default ""; description "The affinity value. The default is empty."; } } // list path-affinities-value } // container path-affinities-values container path-affinity-names { description "Path affinities represented as names."; list path-affinity-name { key "usage"; description "List of named affinity constraints."; leaf usage { type identityref { base resource-affinities-type; } description "Identifies an entry in the list of named affinity constraints."; } list affinity-name { key "name"; description "List of named affinities."; leaf name { type string; description "Identifies a named affinity entry."; } } // list affinity-name } // list path-affinity-name } // container path-affinity-names container path-srlgs-lists { description "Path SRLG properties container."; list path-srlgs-list { key "usage"; description "List of SRLG values to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of SRLGs to either include or exclude."; } leaf-list values { type srlg; description "List of SRLG values."; } } // list path-srlgs-list } // container path-srlgs-lists container path-srlgs-names { description "Container for the list of named SRLGs."; list path-srlgs-name { key "usage"; description "List of named SRLGs to be included or excluded."; leaf usage { type identityref { base route-usage-type; } description "Identifies an entry in a list of named SRLGs to either include or exclude."; } leaf-list names { type string; description "List of named SRLGs."; } } // list path-srlgs-name } // container path-srlgs-names container path-route-objects { description "Container for the list of route objects either returned by the computation engine or actually used by an LSP."; list path-route-object { key "index"; ordered-by user; description "List of route objects either returned by the computation engine or actually used by an LSP."; leaf index { type uint32; description "Route object entry index. The index is used to identify an entry in the list. The order of entries is defined by the user without relying on key values."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-route-object } // container path-route-objects } // container path-properties } // list local-link-connectivity } // container local-link-connectivities leaf oper-status { type te-types:te-oper-status; config false; description "The current operational state of the TTP."; } container geolocation { config false; description "Contains a GPS location."; leaf altitude { type int64; units "millimeters"; description "Distance above sea level."; } leaf latitude { type geographic-coordinate-degree { fraction-digits 0; range "-90..90"; } description "Relative position north or south on the Earth's surface."; } leaf longitude { type geographic-coordinate-degree { fraction-digits 0; range "-180..180"; } description "Angular distance east or west on the Earth's surface."; } } // container geolocation container statistics { config false; description "Statistics data."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this interface's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } container tunnel-termination-point { description "Contains statistics attributes at the TE TTP level."; leaf disables { type yang:counter32; description "Number of times that a TTP was disabled."; } leaf enables { type yang:counter32; description "Number of times that a TTP was enabled."; } leaf maintenance-clears { type yang:counter32; description "Number of times that a TTP was taken out of maintenance."; } leaf maintenance-sets { type yang:counter32; description "Number of times that a TTP was put in maintenance."; } leaf modifies { type yang:counter32; description "Number of times that a TTP was modified."; } leaf downs { type yang:counter32; description "Number of times that a TTP was set to an operational state of 'down'."; } leaf ups { type yang:counter32; description "Number of times that a TTP was set to an operational state of 'up'."; } leaf in-service-clears { type yang:counter32; description "Number of times that a TTP was taken out of service (TE tunnel was released)."; } leaf in-service-sets { type yang:counter32; description "Number of times that a TTP was put in service by a TE tunnel (TE tunnel was set up)."; } } // container tunnel-termination-point container local-link-connectivity { description "Contains statistics attributes at the TE LLCL (Local Link Connectivity List) level."; leaf creates { type yang:counter32; description "Number of times that an LLCL entry was created."; reference "RFC 6241: Network Configuration Protocol (NETCONF), Section 7.2, 'create' operation"; } leaf deletes { type yang:counter32; description "Number of times that an LLCL entry was deleted."; reference "RFC 6241: Network Configuration Protocol (NETCONF), Section 7.2, 'delete' operation"; } leaf disables { type yang:counter32; description "Number of times that an LLCL entry was disabled."; } leaf enables { type yang:counter32; description "Number of times that an LLCL entry was enabled."; } leaf modifies { type yang:counter32; description "Number of times that an LLCL entry was modified."; } } // container local-link-connectivity } // container statistics list supporting-tunnel-termination-point { key "node-ref tunnel-tp-ref"; description "Identifies the TTPs on which this TTP depends."; leaf node-ref { type inet:uri; description "This leaf identifies the node in which the supporting TTP is present. This node is either the supporting node or a node in an underlay topology."; } leaf tunnel-tp-ref { type binary; description "Reference to a TTP that is in either the supporting node or a node in an underlay topology."; } } // list supporting-tunnel-termination-point } // list tunnel-termination-point } // container te container fabric-attributes { description "Attributes for a fabric network"; leaf fabric-id { type fabrictypes:fabric-id; description "An identifier for a fabric in a topology. This identifier can be generated when composing a fabric. The composition of a fabric can be achieved by defining an RPC, which is left for vendor-specific implementation and not provided in this model."; } leaf name { type string; description "Name of the fabric"; } leaf type { type fabrictypes:underlay-network-type; description "The type of physical network that implements this fabric. Examples are VLAN and TRILL."; } container vni-capacity { description "The range of the VXLAN Network Identifier (VNI) defined in RFC 7348 that the POD uses."; leaf min { type int32; description "The lower-limit VNI."; } leaf max { type int32; description "The upper-limit VNI."; } } // container vni-capacity leaf description { type string; description "Description of the fabric"; } container options { description "Options of the fabric"; leaf gateway-mode { type enumeration { enum "centralized" { value 0; description "The Fabric uses centralized gateway, in which gateway is deployed on SPINE node."; } enum "distributed" { value 1; description "The Fabric uses distributed gateway, in which gateway is deployed on LEAF node."; } } default "distributed"; description "Gateway mode of the fabric"; } leaf traffic-behavior { type enumeration { enum "normal" { value 0; description "Normal means no policy is needed for all traffic"; } enum "policy-driven" { value 1; description "Policy driven means policy is needed for the traffic; otherwise, the traffic will be discarded."; } } default "normal"; description "Traffic behavior of the fabric"; } leaf-list capability-supported { type fabrictypes:service-capabilities; description "It provides a list of supported services of the fabric. The service-capabilities is defined as identity-ref. Users can define more services by defining new identities."; } } // container options list device-nodes { key "device-ref"; description "Device nodes that are included in a fabric."; leaf device-ref { type fabrictypes:node-ref; description "The device that the fabric includes that refers to a node in another topology."; } leaf-list role { type fabrictypes:device-role; default "fabrictypes:leaf"; description "It is a list of device roles to represent the roles that a device plays within a POD, such as SPINE, LEAF, Border, or Border-Leaf. The device role is defined as identity-ref. If more than 2 stages are used for a POD, users can define new identities for the device role."; } } // list device-nodes list device-links { key "link-ref"; description "Links that are included within a fabric."; leaf link-ref { type fabrictypes:link-ref; description "The link that the fabric includes that refers to a link in another topology."; } } // list device-links list device-ports { key "port-ref"; description "Ports that are included in the fabric."; leaf port-ref { type fabrictypes:tp-ref; description "The port that the fabric includes that refers to a termination-point in another topology."; } leaf port-type { type fabrictypes:port-type; description "Port type is defined as identity-ref. The current types include ethernet or serial. If more types are needed, developers can define new identities."; } leaf bandwidth { type fabrictypes:bandwidth; description "Bandwidth of the port. It is defined as identity-ref. If more speeds are introduced, developers can define new identities for them. Current speeds include 1M, 10M, 100M, 1G, 10G, 25G, 40G, 100G, and 400G."; } } // list device-ports } // container fabric-attributes } // list node list link { key "link-id"; description "A network link connects a local (source) node and a remote (destination) node via a set of the respective node's termination points. It is possible to have several links between the same source and destination nodes. Likewise, a link could potentially be re-homed between termination points. Therefore, in order to ensure that we would always know to distinguish between links, every link is identified by a dedicated link identifier. Note that a link models a point-to-point link, not a multipoint link."; leaf link-id { type link-id; description "The identifier of a link in the topology. A link is specific to a topology to which it belongs."; } container source { description "This container holds the logical source of a particular link."; leaf source-node { type leafref { path "../../../nw:node/nw:node-id"; require-instance false; } description "Source node identifier. Must be in the same topology."; } leaf source-tp { type leafref { path "../../../nw:node[nw:node-id=current()/../source-node]/termination-point/tp-id"; require-instance false; } description "This termination point is located within the source node and terminates the link."; } } // container source container destination { description "This container holds the logical destination of a particular link."; leaf dest-node { type leafref { path "../../../nw:node/nw:node-id"; require-instance false; } description "Destination node identifier. Must be in the same network."; } leaf dest-tp { type leafref { path "../../../nw:node[nw:node-id=current()/../dest-node]/termination-point/tp-id"; require-instance false; } description "This termination point is located within the destination node and terminates the link."; } } // container destination list supporting-link { key "network-ref link-ref"; description "Identifies the link or links on which this link depends."; leaf network-ref { type leafref { path "../../../nw:supporting-network/nw:network-ref"; require-instance false; } description "This leaf identifies in which underlay topology the supporting link is present."; } leaf link-ref { type leafref { path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/link/link-id"; require-instance false; } description "This leaf identifies a link that is a part of this link's underlay. Reference loops in which a link identifies itself as its underlay, either directly or transitively, are not allowed."; } } // list supporting-link container perf-mon { description "Container for PM attributes."; leaf low-percentile { type percentile; default "10.000"; description "Low percentile to report. Setting low-percentile to 0.000 indicates the client is not interested in receiving low percentile."; } leaf intermediate-percentile { type percentile; default "50.000"; description "Intermediate percentile to report. Setting intermediate-percentile to 0.000 indicates the client is not interested in receiving intermediate percentile."; } leaf high-percentile { type percentile; default "95.000"; description "High percentile to report. Setting high-percentile to 0.000 indicates the client is not interested in receiving high percentile."; } leaf measurement-interval { type uint32 { range "1..max"; } units "seconds"; default "60"; description "Indicates the time interval to perform PM measurement over."; } list pm { key "pm-type"; config false; description "The list of PM based on PM type."; leaf pm-type { type identityref { base pm-type; } config false; description "The PM type of the measured PM attributes."; } container pm-attributes { description "Container for PM attributes."; leaf start-time { type yang:date-and-time; config false; description "The date and time the measurement last started."; } leaf end-time { type yang:date-and-time; config false; description "The date and time the measurement last ended."; } leaf pm-source { type identityref { base pm-source-type; } config false; description "The OAM tool used to collect the PM data."; } container one-way-pm-statistics { config false; description "Container for link telemetry attributes."; container loss-statistics { description "One-way link loss summarized information."; reference "RFC 4656: A One-way Active Measurement Protocol (OWAMP) ITU-T Y.1731: Operations, administration and maintenance (OAM) functions and mechanisms for Ethernet-based networks"; leaf packet-loss-count { type yang:counter64; description "Total number of lost packets."; } leaf loss-ratio { type percentage; description "Loss ratio of the packets. Expressed as percentage of packets lost with respect to packets sent."; } } // container loss-statistics container delay-statistics { description "One-way link delay summarized information."; reference "RFC 4656: A One-way Active Measurement Protocol (OWAMP) ITU-T Y.1731: Operations, administration and maintenance (OAM) functions and mechanisms for Ethernet-based networks"; leaf unit-value { type identityref { base lime:time-unit-type; } default "lime:milliseconds"; description "Time units, where the options are hours, minutes, seconds, milliseconds, microseconds, and nanoseconds."; } leaf min-delay-value { type yang:gauge64; description "Minimum observed one-way delay."; } leaf max-delay-value { type yang:gauge64; description "Maximum observed one-way delay."; } leaf low-delay-percentile { type yang:gauge64; description "Low percentile of observed one-way delay with specific measurement method."; } leaf intermediate-delay-percentile { type yang:gauge64; description "Intermediate percentile of observed one-way delay with specific measurement method."; } leaf high-delay-percentile { type yang:gauge64; description "High percentile of observed one-way delay with specific measurement method."; } } // container delay-statistics container jitter-statistics { description "One-way link jitter summarized information."; reference "RFC 3393: IP Packet Delay Variation Metric for IP Performance Metrics (IPPM) RFC 4656: A One-way Active Measurement Protocol (OWAMP) ITU-T Y.1731: Operations, administration and maintenance (OAM) functions and mechanisms for Ethernet-based networks"; leaf unit-value { type identityref { base lime:time-unit-type; } default "lime:milliseconds"; description "Time units, where the options are hours, minutes, seconds, milliseconds, microseconds, and nanoseconds."; } leaf min-jitter-value { type yang:gauge64; description "Minimum observed one-way jitter."; } leaf max-jitter-value { type yang:gauge64; description "Maximum observed one-way jitter."; } leaf low-jitter-percentile { type yang:gauge64; description "Low percentile of observed one-way jitter."; } leaf intermediate-jitter-percentile { type yang:gauge64; description "Intermediate percentile of observed one-way jitter."; } leaf high-jitter-percentile { type yang:gauge64; description "High percentile of observed one-way jitter."; } } // container jitter-statistics } // container one-way-pm-statistics list one-way-pm-statistics-per-class { key "class-id"; config false; description "The list of PM data based on class of service."; leaf class-id { type string; description "The class-id is used to identify the class of service. This identifier is internal to the administration."; } container loss-statistics { description "One-way link loss summarized information."; reference "RFC 4656: A One-way Active Measurement Protocol (OWAMP) ITU-T Y.1731: Operations, administration and maintenance (OAM) functions and mechanisms for Ethernet-based networks"; leaf packet-loss-count { type yang:counter64; description "Total number of lost packets."; } leaf loss-ratio { type percentage; description "Loss ratio of the packets. Expressed as percentage of packets lost with respect to packets sent."; } } // container loss-statistics container delay-statistics { description "One-way link delay summarized information."; reference "RFC 4656: A One-way Active Measurement Protocol (OWAMP) ITU-T Y.1731: Operations, administration and maintenance (OAM) functions and mechanisms for Ethernet-based networks"; leaf unit-value { type identityref { base lime:time-unit-type; } default "lime:milliseconds"; description "Time units, where the options are hours, minutes, seconds, milliseconds, microseconds, and nanoseconds."; } leaf min-delay-value { type yang:gauge64; description "Minimum observed one-way delay."; } leaf max-delay-value { type yang:gauge64; description "Maximum observed one-way delay."; } leaf low-delay-percentile { type yang:gauge64; description "Low percentile of observed one-way delay with specific measurement method."; } leaf intermediate-delay-percentile { type yang:gauge64; description "Intermediate percentile of observed one-way delay with specific measurement method."; } leaf high-delay-percentile { type yang:gauge64; description "High percentile of observed one-way delay with specific measurement method."; } } // container delay-statistics container jitter-statistics { description "One-way link jitter summarized information."; reference "RFC 3393: IP Packet Delay Variation Metric for IP Performance Metrics (IPPM) RFC 4656: A One-way Active Measurement Protocol (OWAMP) ITU-T Y.1731: Operations, administration and maintenance (OAM) functions and mechanisms for Ethernet-based networks"; leaf unit-value { type identityref { base lime:time-unit-type; } default "lime:milliseconds"; description "Time units, where the options are hours, minutes, seconds, milliseconds, microseconds, and nanoseconds."; } leaf min-jitter-value { type yang:gauge64; description "Minimum observed one-way jitter."; } leaf max-jitter-value { type yang:gauge64; description "Maximum observed one-way jitter."; } leaf low-jitter-percentile { type yang:gauge64; description "Low percentile of observed one-way jitter."; } leaf intermediate-jitter-percentile { type yang:gauge64; description "Intermediate percentile of observed one-way jitter."; } leaf high-jitter-percentile { type yang:gauge64; description "High percentile of observed one-way jitter."; } } // container jitter-statistics } // list one-way-pm-statistics-per-class } // container pm-attributes } // list pm container vpn-pm-type { description "The VPN PM type of this logical point-to-point unidirectional VPN link."; container inter-vpn-access-interface { description "Indicates inter-vpn-access-interface PM, which is used to monitor the performance of logical point-to-point VPN connections between source and destination VPN access interfaces."; leaf inter-vpn-access-interface { type empty; description "This is a placeholder for inter-vpn-access-interface PM, which is not bound to a specific VPN access interface. The source or destination VPN access interface of the measurement can be augmented as needed."; } } // container inter-vpn-access-interface container vpn-tunnel { presence "Enables VPN tunnel PM"; description "Indicates VPN tunnel PM, which is used to monitor the performance of VPN tunnels."; leaf vpn-tunnel-type { type identityref { base vpn-common:protocol-type; } config false; description "The leaf indicates the VPN tunnel type, e.g., Generic Routing Encapsulation (GRE) and Generic Network Virtualization Encapsulation (Geneve)."; } } // container vpn-tunnel } // container vpn-pm-type } // container perf-mon container te { must "count(../nt:supporting-link)<=1" { description "For a link in a TE topology, there cannot be more than one supporting link. If one or more link paths are abstracted, the underlay is used."; } presence "TE support"; description "Indicates TE support."; choice bundle-stack-level { description "The TE link can be partitioned into bundled links or component links."; container bundled-links { description "A set of bundled links."; reference "RFC 4201: Link Bundling in MPLS Traffic Engineering (TE)"; list bundled-link { key "sequence"; description "Specifies a bundled interface that is further partitioned."; leaf sequence { type uint32; description "Identifies the sequence in the bundle."; } leaf src-tp-ref { type leafref { path "../../../../../nw:node[nw:node-id = current()/../../../../nt:source/nt:source-node]/nt:termination-point/nt:tp-id"; require-instance true; } description "Reference to another TE termination point on the same source node."; } leaf des-tp-ref { type leafref { path "../../../../../nw:node[nw:node-id = current()/../../../../nt:destination/nt:dest-node]/nt:termination-point/nt:tp-id"; require-instance true; } description "Reference to another TE termination point on the same destination node."; } } // list bundled-link } // container bundled-links container component-links { description "A set of component links."; list component-link { key "sequence"; description "Specifies a component interface that is sufficient to unambiguously identify the appropriate resources."; leaf sequence { type uint32; description "Identifies the sequence in the bundle."; } leaf src-interface-ref { type string; description "Reference to a component link interface on the source node."; } leaf des-interface-ref { type string; description "Reference to a component link interface on the destination node."; } } // list component-link } // container component-links } // choice bundle-stack-level leaf-list te-link-template { if-feature template; type leafref { path "../../../../te/templates/link-template/name"; } description "The reference to a TE link template."; } container te-link-attributes { description "Link attributes in a TE topology."; leaf access-type { type te-types:te-link-access-type; description "Link access type, which can be point-to-point or multi-access."; } container external-domain { description "For an inter-domain link, specifies the attributes of the remote end of the link, to facilitate the signaling at the local end."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } leaf remote-te-node-id { type te-types:te-node-id; description "Remote TE node identifier, used together with 'remote-te-link-tp-id' to identify the remote Link Termination Point (LTP) in a different domain."; } leaf remote-te-link-tp-id { type te-types:te-tp-id; description "Remote TE LTP identifier, used together with 'remote-te-node-id' to identify the remote LTP in a different domain."; } } // container external-domain leaf is-abstract { type empty; description "Present if the link is abstract."; } leaf name { type string; description "Link name."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay leaf admin-status { type te-types:te-admin-status; description "The administrative state of the link."; } leaf link-index { type uint64; description "The link identifier. If OSPF is used, this object represents an ospfLsdbID. If IS-IS is used, this object represents an isisLSPID. If a locally configured link is used, this object represents a unique value, which is locally defined in a router."; } leaf administrative-group { type te-types:admin-groups; description "Administrative group or color of the link. This attribute covers both administrative groups (defined in RFCs 3630 and 5305) and Extended Administrative Groups (defined in RFC 7308)."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering RFC 7308: Extended Administrative Groups in MPLS Traffic Engineering (MPLS-TE)"; } list interface-switching-capability { key "switching-capability encoding"; description "List of ISCDs for this link."; reference "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description RFC 4203: OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; leaf switching-capability { type identityref { base te-types:switching-capabilities; } description "Switching capability for this interface."; } leaf encoding { type identityref { base te-types:lsp-encoding-types; } description "Encoding supported by this interface."; } list max-lsp-bandwidth { key "priority"; max-elements 8; description "Maximum Label Switched Path (LSP) bandwidth at priorities 0-7."; leaf priority { type uint8 { range "0..7"; } description "Priority."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list max-lsp-bandwidth } // list interface-switching-capability container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions leaf link-protection-type { type identityref { base te-types:link-protection-type; } description "Link Protection Type desired for this link."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } container max-link-bandwidth { description "Maximum bandwidth that can be seen on this link in this direction. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // container max-link-bandwidth container max-resv-link-bandwidth { description "Maximum amount of bandwidth that can be reserved in this direction in this link. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // container max-resv-link-bandwidth list unreserved-bandwidth { key "priority"; max-elements 8; description "Unreserved bandwidth for priority levels 0-7. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; leaf priority { type uint8 { range "0..7"; } description "Priority."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list unreserved-bandwidth leaf te-default-metric { type uint32; description "Traffic Engineering metric."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; } leaf te-delay-metric { type uint32; description "Traffic Engineering delay metric."; reference "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions"; } leaf te-igp-metric { type uint32; description "IGP metric used for Traffic Engineering."; reference "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a second MPLS Traffic Engineering (TE) Metric"; } container te-srlgs { description "Contains a list of SRLGs."; leaf-list value { type te-types:srlg; description "SRLG value."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } } // container te-srlgs container te-nsrlgs { if-feature nsrlg; description "Contains a list of NSRLGs (Non-Shared Risk Link Groups). When an abstract TE link is configured, this list specifies the request that underlay TE paths need to be mutually disjoint with other TE links in the same groups."; leaf-list id { type uint32; description "NSRLG ID, uniquely configured within a topology."; reference "RFC 4872: RSVP-TE Extensions in Support of End-to-End Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; } } // container te-nsrlgs } // container te-link-attributes leaf oper-status { type te-types:te-oper-status; config false; description "The current operational state of the link."; } leaf is-transitional { type empty; config false; description "Present if the link is transitional; used as an alternative approach in lieu of 'inter-layer-lock-id' for path computation in a TE topology covering multiple layers or multiple regions."; reference "RFC 5212: Requirements for GMPLS-Based Multi-Region and Multi-Layer Networks (MRN/MLN) RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for Multi-Layer and Multi-Region Networks (MLN/MRN)"; } leaf information-source { type te-info-source; config false; description "Indicates the type of information source."; } leaf information-source-instance { type string; config false; description "The name indicating the instance of the information source."; } container information-source-state { config false; description "Contains state attributes related to the information source."; leaf credibility-preference { type uint16; description "The preference value for calculating the Traffic Engineering database credibility value used for tie-break selection between different information-source values. A higher value is preferable."; } leaf logical-network-element { type string; description "When applicable, this is the name of a logical network element from which the information is learned."; } leaf network-instance { type string; description "When applicable, this is the name of a network instance from which the information is learned."; } container topology { description "When the information is processed by the system, the attributes in this container indicate which topology is used to generate the result information."; leaf link-ref { type leafref { path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nt:link/nt:link-id"; require-instance false; } description "A type for an absolute reference to a link instance. (This type should not be used for relative references. In such a case, a relative path should be used instead.)"; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } } // container topology } // container information-source-state list information-source-entry { key "information-source information-source-instance"; config false; description "A list of information sources learned, including the source that is used."; leaf information-source { type te-info-source; config false; description "Indicates the type of information source."; } leaf information-source-instance { type string; config false; description "The name indicating the instance of the information source."; } container information-source-state { config false; description "Contains state attributes related to the information source."; leaf credibility-preference { type uint16; description "The preference value for calculating the Traffic Engineering database credibility value used for tie-break selection between different information-source values. A higher value is preferable."; } leaf logical-network-element { type string; description "When applicable, this is the name of a logical network element from which the information is learned."; } leaf network-instance { type string; description "When applicable, this is the name of a network instance from which the information is learned."; } container topology { description "When the information is processed by the system, the attributes in this container indicate which topology is used to generate the result information."; leaf link-ref { type leafref { path "/nw:networks/nw:network[nw:network-id=current()/../network-ref]/nt:link/nt:link-id"; require-instance false; } description "A type for an absolute reference to a link instance. (This type should not be used for relative references. In such a case, a relative path should be used instead.)"; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } } // container topology } // container information-source-state leaf link-index { type uint64; description "The link identifier. If OSPF is used, this object represents an ospfLsdbID. If IS-IS is used, this object represents an isisLSPID. If a locally configured link is used, this object represents a unique value, which is locally defined in a router."; } leaf administrative-group { type te-types:admin-groups; description "Administrative group or color of the link. This attribute covers both administrative groups (defined in RFCs 3630 and 5305) and Extended Administrative Groups (defined in RFC 7308)."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering RFC 7308: Extended Administrative Groups in MPLS Traffic Engineering (MPLS-TE)"; } list interface-switching-capability { key "switching-capability encoding"; description "List of ISCDs for this link."; reference "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description RFC 4203: OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; leaf switching-capability { type identityref { base te-types:switching-capabilities; } description "Switching capability for this interface."; } leaf encoding { type identityref { base te-types:lsp-encoding-types; } description "Encoding supported by this interface."; } list max-lsp-bandwidth { key "priority"; max-elements 8; description "Maximum Label Switched Path (LSP) bandwidth at priorities 0-7."; leaf priority { type uint8 { range "0..7"; } description "Priority."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list max-lsp-bandwidth } // list interface-switching-capability container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions leaf link-protection-type { type identityref { base te-types:link-protection-type; } description "Link Protection Type desired for this link."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } container max-link-bandwidth { description "Maximum bandwidth that can be seen on this link in this direction. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // container max-link-bandwidth container max-resv-link-bandwidth { description "Maximum amount of bandwidth that can be reserved in this direction in this link. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // container max-resv-link-bandwidth list unreserved-bandwidth { key "priority"; max-elements 8; description "Unreserved bandwidth for priority levels 0-7. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; leaf priority { type uint8 { range "0..7"; } description "Priority."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list unreserved-bandwidth leaf te-default-metric { type uint32; description "Traffic Engineering metric."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; } leaf te-delay-metric { type uint32; description "Traffic Engineering delay metric."; reference "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions"; } leaf te-igp-metric { type uint32; description "IGP metric used for Traffic Engineering."; reference "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a second MPLS Traffic Engineering (TE) Metric"; } container te-srlgs { description "Contains a list of SRLGs."; leaf-list value { type te-types:srlg; description "SRLG value."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } } // container te-srlgs container te-nsrlgs { if-feature nsrlg; description "Contains a list of NSRLGs (Non-Shared Risk Link Groups). When an abstract TE link is configured, this list specifies the request that underlay TE paths need to be mutually disjoint with other TE links in the same groups."; leaf-list id { type uint32; description "NSRLG ID, uniquely configured within a topology."; reference "RFC 4872: RSVP-TE Extensions in Support of End-to-End Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; } } // container te-nsrlgs } // list information-source-entry container recovery { config false; description "Status of the recovery process."; leaf restoration-status { type te-types:te-recovery-status; description "Restoration status."; } leaf protection-status { type te-types:te-recovery-status; description "Protection status."; } } // container recovery container underlay { if-feature te-topology-hierarchy; config false; description "State attributes for the TE link underlay."; leaf dynamic { type boolean; description "'true' if the underlay is dynamically created."; } leaf committed { type boolean; description "'true' if the underlay is committed."; } } // container underlay container statistics { config false; description "Statistics data."; leaf discontinuity-time { type yang:date-and-time; description "The time of the most recent occasion at which any one or more of this interface's counters suffered a discontinuity. If no such discontinuities have occurred since the last re-initialization of the local management subsystem, then this node contains the time the local management subsystem re-initialized itself."; } leaf disables { type yang:counter32; description "Number of times that a link was disabled."; } leaf enables { type yang:counter32; description "Number of times that a link was enabled."; } leaf maintenance-clears { type yang:counter32; description "Number of times that a link was taken out of maintenance."; } leaf maintenance-sets { type yang:counter32; description "Number of times that a link was put in maintenance."; } leaf modifies { type yang:counter32; description "Number of times that a link was modified."; } leaf downs { type yang:counter32; description "Number of times that a link was set to an operational state of 'down'."; } leaf ups { type yang:counter32; description "Number of times that a link was set to an operational state of 'up'."; } leaf fault-clears { type yang:counter32; description "Number of times that a link experienced a fault-clear event."; } leaf fault-detects { type yang:counter32; description "Number of times that a link experienced fault detection."; } leaf protection-switches { type yang:counter32; description "Number of times that a link experienced protection switchover."; } leaf protection-reverts { type yang:counter32; description "Number of times that a link experienced protection reversion."; } leaf restoration-failures { type yang:counter32; description "Number of times that a link experienced restoration failure."; } leaf restoration-starts { type yang:counter32; description "Number of times that a link experienced restoration start."; } leaf restoration-successes { type yang:counter32; description "Number of times that a link experienced restoration success."; } leaf restoration-reversion-failures { type yang:counter32; description "Number of times that a link experienced restoration reversion failure."; } leaf restoration-reversion-starts { type yang:counter32; description "Number of times that a link experienced restoration reversion start."; } leaf restoration-reversion-successes { type yang:counter32; description "Number of times that a link experienced restoration reversion success."; } } // container statistics } // container te } // list link container te-topology-identifier { description "TE topology identifier container."; leaf provider-id { type te-global-id; default "0"; description "An identifier to uniquely identify a provider. If omitted, it assumes that the topology provider ID value = 0 (the default)."; } leaf client-id { type te-global-id; default "0"; description "An identifier to uniquely identify a client. If omitted, it assumes that the topology client ID value = 0 (the default)."; } leaf topology-id { type te-topology-id; default ""; description "When the datastore contains several topologies, 'topology-id' distinguishes between them. If omitted, the default (empty) string for this leaf is assumed."; } } // container te-topology-identifier container te { must "../te-topology-identifier/provider-id and ../te-topology-identifier/client-id and ../te-topology-identifier/topology-id"; presence "TE support"; description "Indicates TE support."; leaf name { type string; description "Name of the TE topology. This attribute is optional and can be specified by the operator to describe the TE topology, which can be useful when 'network-id' (RFC 8345) is not descriptive and not modifiable because of being generated by the system."; reference "RFC 8345: A YANG Data Model for Network Topologies"; } leaf preference { type uint8 { range "1..255"; } description "Specifies a preference for this topology. A lower number indicates a higher preference."; } leaf optimization-criterion { type identityref { base te-types:objective-function-type; } description "Optimization criterion applied to this topology."; reference "RFC 3272: Overview and Principles of Internet Traffic Engineering"; } list nsrlg { if-feature nsrlg; key "id"; description "List of NSRLGs (Non-Shared Risk Link Groups)."; reference "RFC 4872: RSVP-TE Extensions in Support of End-to-End Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; leaf id { type uint32; description "Identifies the NSRLG entry."; } leaf disjointness { type te-types:te-path-disjointness; description "The type of resource disjointness."; } } // list nsrlg container geolocation { config false; description "Contains a GPS location."; leaf altitude { type int64; units "millimeters"; description "Distance above sea level."; } leaf latitude { type geographic-coordinate-degree { fraction-digits 0; range "-90..90"; } description "Relative position north or south on the Earth's surface."; } leaf longitude { type geographic-coordinate-degree { fraction-digits 0; range "-180..180"; } description "Angular distance east or west on the Earth's surface."; } } // container geolocation } // container te } // list network container te { presence "TE support"; description "Indicates TE support."; container templates { description "Configuration parameters for templates used for a TE topology."; list node-template { if-feature template; key "name"; description "The list of TE node templates used to define sharable and reusable TE node attributes."; leaf name { type te-types:te-template-name; description "The name to identify a TE node template."; } leaf priority { type uint16; description "The preference value for resolving conflicts between different templates. When two or more templates specify values for one configuration attribute, the value from the template with the highest priority is used. A lower number indicates a higher priority. The highest priority is 0."; } leaf reference-change-policy { type enumeration { enum "no-action" { value 0; description "When an attribute changes in this template, the configuration node referring to this template does not take any action."; } enum "not-allowed" { value 1; description "When any configuration object has a reference to this template, changing this template is not allowed."; } enum "cascade" { value 2; description "When an attribute changes in this template, the configuration object referring to this template applies the new attribute value to the corresponding configuration."; } } description "This attribute specifies the action taken for a configuration node that has a reference to this template."; } container te-node-attributes { description "Contains node attributes in a TE topology."; leaf admin-status { type te-types:te-admin-status; description "The administrative state of the link."; } leaf domain-id { type uint32; description "Identifies the domain to which this node belongs. This attribute is used to support inter-domain links."; reference "RFC 5152: A Per-Domain Path Computation Method for Establishing Inter-Domain Traffic Engineering (TE) Label Switched Paths (LSPs) RFC 5316: ISIS Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering RFC 5392: OSPF Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering"; } leaf is-abstract { type empty; description "Present if the node is abstract; not present if the node is actual."; } leaf name { type string; description "Node name."; } leaf-list signaling-address { type inet:ip-address; description "The node's signaling address."; } container underlay-topology { if-feature te-topology-hierarchy; description "When an abstract node encapsulates a topology, the attributes in this container point to said topology."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } } // container underlay-topology } // container te-node-attributes } // list node-template list link-template { if-feature template; key "name"; description "The list of TE link templates used to define sharable and reusable TE link attributes."; leaf name { type te-types:te-template-name; description "The name to identify a TE link template."; } leaf priority { type uint16; description "The preference value for resolving conflicts between different templates. When two or more templates specify values for one configuration attribute, the value from the template with the highest priority is used. A lower number indicates a higher priority. The highest priority is 0."; } leaf reference-change-policy { type enumeration { enum "no-action" { value 0; description "When an attribute changes in this template, the configuration node referring to this template does not take any action."; } enum "not-allowed" { value 1; description "When any configuration object has a reference to this template, changing this template is not allowed."; } enum "cascade" { value 2; description "When an attribute changes in this template, the configuration object referring to this template applies the new attribute value to the corresponding configuration."; } } description "This attribute specifies the action taken for a configuration node that has a reference to this template."; } container te-link-attributes { description "Link attributes in a TE topology."; leaf access-type { type te-types:te-link-access-type; description "Link access type, which can be point-to-point or multi-access."; } container external-domain { description "For an inter-domain link, specifies the attributes of the remote end of the link, to facilitate the signaling at the local end."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } leaf remote-te-node-id { type te-types:te-node-id; description "Remote TE node identifier, used together with 'remote-te-link-tp-id' to identify the remote Link Termination Point (LTP) in a different domain."; } leaf remote-te-link-tp-id { type te-types:te-tp-id; description "Remote TE LTP identifier, used together with 'remote-te-node-id' to identify the remote LTP in a different domain."; } } // container external-domain leaf is-abstract { type empty; description "Present if the link is abstract."; } leaf name { type string; description "Link name."; } container underlay { if-feature te-topology-hierarchy; description "Attributes of the TE link underlay."; reference "RFC 4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE)"; leaf enabled { type boolean; description "'true' if the underlay is enabled. 'false' if the underlay is disabled."; } container primary-path { description "The service path on the underlay topology that supports this link."; leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // container primary-path list backup-path { key "index"; description "A list of backup service paths on the underlay topology that protect the underlay primary path. If the primary path is not protected, the list contains zero elements. If the primary path is protected, the list contains one or more elements."; leaf index { type uint32; description "A sequence number to identify a backup path."; } leaf network-ref { type leafref { path "/nw:networks/nw:network/nw:network-id"; require-instance false; } description "Used to reference a network -- for example, an underlay network."; } 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."; } choice type { description "The explicit route entry type."; container numbered-node-hop { must "node-id-uri or node-id" { description "At least one node identifier MUST be present."; } description "Numbered node route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container numbered-node-hop container numbered-link-hop { description "Numbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id { type te-tp-id; mandatory true; description "TE Link Termination Point (LTP) identifier."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container numbered-link-hop container unnumbered-link-hop { must "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" { description "At least one node identifier and at least one Link Termination Point (LTP) identifier MUST be present."; } description "Unnumbered link explicit route hop."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels, Section 4.3, EXPLICIT_ROUTE in RSVP-TE RFC 3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)"; leaf link-tp-id-uri { type nt:tp-id; description "Link Termination Point (LTP) identifier."; } leaf link-tp-id { type te-tp-id; description "TE LTP identifier. The combination of the TE link ID and the TE node ID is used to identify an unnumbered TE link."; } leaf node-id-uri { type node-id; description "The identifier of a node in the topology."; } leaf node-id { type te-node-id; description "The identifier of a node in the TE topology."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } leaf direction { type te-link-direction; default "outgoing"; description "Link route object direction."; } } // container unnumbered-link-hop container as-number-hop { description "AS explicit route hop."; leaf as-number { type inet:as-number; mandatory true; description "The Autonomous System (AS) number."; } leaf hop-type { type te-hop-type; default "strict"; description "Strict or loose hop."; } } // container as-number-hop case label { description "The label explicit route hop type."; container label-hop { description "Label hop type."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-hop } // case label } // choice type } // list path-element } // list backup-path leaf protection-type { type identityref { base te-types:lsp-protection-type; } description "Underlay protection type desired for this link."; } container tunnel-termination-points { description "Underlay TTPs desired for this link."; leaf source { type binary; description "Source TTP identifier."; } leaf destination { type binary; description "Destination TTP identifier."; } } // container tunnel-termination-points container tunnels { description "Underlay TE tunnels supporting this TE link."; leaf sharing { type boolean; default "true"; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link. This leaf is the default option for all TE tunnels and may be overridden by the per-TE-tunnel value."; } list tunnel { key "tunnel-name"; description "Zero, one, or more underlay TE tunnels that support this TE link."; leaf tunnel-name { type string; description "A tunnel name uniquely identifies an underlay TE tunnel, used together with the 'source-node' value for this link."; reference "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels"; } leaf sharing { type boolean; description "'true' if the underlay tunnel can be shared with other TE links; 'false' if the underlay tunnel is dedicated to this TE link."; } } // list tunnel } // container tunnels } // container underlay leaf admin-status { type te-types:te-admin-status; description "The administrative state of the link."; } leaf link-index { type uint64; description "The link identifier. If OSPF is used, this object represents an ospfLsdbID. If IS-IS is used, this object represents an isisLSPID. If a locally configured link is used, this object represents a unique value, which is locally defined in a router."; } leaf administrative-group { type te-types:admin-groups; description "Administrative group or color of the link. This attribute covers both administrative groups (defined in RFCs 3630 and 5305) and Extended Administrative Groups (defined in RFC 7308)."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering RFC 7308: Extended Administrative Groups in MPLS Traffic Engineering (MPLS-TE)"; } list interface-switching-capability { key "switching-capability encoding"; description "List of ISCDs for this link."; reference "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description RFC 4203: OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; leaf switching-capability { type identityref { base te-types:switching-capabilities; } description "Switching capability for this interface."; } leaf encoding { type identityref { base te-types:lsp-encoding-types; } description "Encoding supported by this interface."; } list max-lsp-bandwidth { key "priority"; max-elements 8; description "Maximum Label Switched Path (LSP) bandwidth at priorities 0-7."; leaf priority { type uint8 { range "0..7"; } description "Priority."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list max-lsp-bandwidth } // list interface-switching-capability container label-restrictions { description "The label restrictions container."; list label-restriction { key "index"; description "The absence of the label restrictions container implies that all labels are acceptable; otherwise, only restricted labels are available."; reference "RFC 7579: General Network Element Constraint Encoding for GMPLS-Controlled Networks"; leaf restriction { type enumeration { enum "inclusive" { value 0; description "The label or label range is inclusive."; } enum "exclusive" { value 1; description "The label or label range is exclusive."; } } default "inclusive"; description "Indicates whether the list item is inclusive or exclusive."; } leaf index { type uint32; description "The index of the label restriction list entry."; } container label-start { must "(not(../label-end/te-label/direction) and not(te-label/direction)) or (../label-end/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-end/te-label/direction = 'forward')) or (not(../label-end/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the starting label if a label range is specified. This is the label value if a single label is specified, in which case the 'label-end' attribute is not set."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-start container label-end { must "(not(../label-start/te-label/direction) and not(te-label/direction)) or (../label-start/te-label/direction = te-label/direction) or (not(te-label/direction) and (../label-start/te-label/direction = 'forward')) or (not(../label-start/te-label/direction) and (te-label/direction = 'forward'))" { error-message "'label-start' and 'label-end' must have the same direction."; } description "This is the ending label if a label range is specified. This attribute is not set if a single label is specified."; container te-label { description "Container that specifies the TE label. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type rt-types:generalized-label; description "TE label specified in a generic format."; } } // choice technology leaf direction { type te-label-direction; default "forward"; description "Label direction."; } } // container te-label } // container label-end container label-step { description "The step increment between labels in the label range. The label start/end values will have to be consistent with the sign of label step. For example, 'label-start' < 'label-end' enforces 'label-step' > 0 'label-start' > 'label-end' enforces 'label-step' < 0."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type int32; default "1"; description "Label range step."; } } // choice technology } // container label-step leaf range-bitmap { type yang:hex-string; description "When there are gaps between 'label-start' and 'label-end', this attribute is used to specify the positions of the used labels. This is represented in big endian as 'hex-string'. In case the restriction is 'inclusive', the bit-position is set if the corresponding mapped label is available. In this case, if the range-bitmap is not present, all the labels in the range are available. In case the restriction is 'exclusive', the bit-position is set if the corresponding mapped label is not available. In this case, if the range-bitmap is not present, all the labels in the range are not available. The most significant byte in the hex-string is the farthest to the left in the byte sequence. Leading zero bytes in the configured value may be omitted for brevity. Each bit position in the 'range-bitmap' 'hex-string' maps to a label in the range derived from 'label-start'. For example, assuming that 'label-start' = 16000 and 'range-bitmap' = 0x01000001, then: - bit position (0) is set, and the corresponding mapped label from the range is 16000 + (0 * 'label-step') or 16000 for default 'label-step' = 1. - bit position (24) is set, and the corresponding mapped label from the range is 16000 + (24 * 'label-step') or 16024 for default 'label-step' = 1."; } } // list label-restriction } // container label-restrictions leaf link-protection-type { type identityref { base te-types:link-protection-type; } description "Link Protection Type desired for this link."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } container max-link-bandwidth { description "Maximum bandwidth that can be seen on this link in this direction. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // container max-link-bandwidth container max-resv-link-bandwidth { description "Maximum amount of bandwidth that can be reserved in this direction in this link. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // container max-resv-link-bandwidth list unreserved-bandwidth { key "priority"; max-elements 8; description "Unreserved bandwidth for priority levels 0-7. Units are in bytes per second."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; leaf priority { type uint8 { range "0..7"; } description "Priority."; } container te-bandwidth { description "Container that specifies TE bandwidth. The choices can be augmented for specific data-plane technologies."; choice technology { default "generic"; description "Data-plane technology type."; leaf generic { type te-bandwidth; description "Bandwidth specified in a generic format."; } } // choice technology } // container te-bandwidth } // list unreserved-bandwidth leaf te-default-metric { type uint32; description "Traffic Engineering metric."; reference "RFC 3630: Traffic Engineering (TE) Extensions to OSPF Version 2 RFC 5305: IS-IS Extensions for Traffic Engineering"; } leaf te-delay-metric { type uint32; description "Traffic Engineering delay metric."; reference "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions"; } leaf te-igp-metric { type uint32; description "IGP metric used for Traffic Engineering."; reference "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a second MPLS Traffic Engineering (TE) Metric"; } container te-srlgs { description "Contains a list of SRLGs."; leaf-list value { type te-types:srlg; description "SRLG value."; reference "RFC 4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)"; } } // container te-srlgs container te-nsrlgs { if-feature nsrlg; description "Contains a list of NSRLGs (Non-Shared Risk Link Groups). When an abstract TE link is configured, this list specifies the request that underlay TE paths need to be mutually disjoint with other TE links in the same groups."; leaf-list id { type uint32; description "NSRLG ID, uniquely configured within a topology."; reference "RFC 4872: RSVP-TE Extensions in Support of End-to-End Generalized Multi-Protocol Label Switching (GMPLS) Recovery"; } } // container te-nsrlgs } // container te-link-attributes } // list link-template } // container templates } // container te } // container networks } // module ietf-network
© 2023 YumaWorks, Inc. All rights reserved.