blob: 4114566a9277483bd081b7de10d7c783f861b3ad [file] [log] [blame]
module yrt-ietf-te-topology {
yang-version 1;
namespace "urn:ietf:params:xml:ns:yang:yrt-ietf-te-topology";
// replace with IANA namespace when assigned
prefix "tet";
import yrt-ietf-inet-types {
prefix "inet";
}
import yrt-ietf-schedule {
prefix "sch";
}
import yrt-ietf-te-types {
prefix "te-types";
}
import yrt-ietf-network {
prefix "nw";
}
import yrt-network-topology {
prefix "nt";
}
organization
"Traffic Engineering Architecture and Signaling (TEAS)
Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/teas/>
WG List: <mailto:teas@ietf.org>
WG Chair: Lou Berger
<mailto:lberger@labn.net>
WG Chair: Vishnu Pavan Beeram
<mailto:vbeeram@juniper.net>
Editor: Xufeng Liu
<mailto:xliu@kuatrotech.com>
Editor: Igor Bryskin
<mailto:Igor.Bryskin@huawei.com>
Editor: Vishnu Pavan Beeram
<mailto:vbeeram@juniper.net>
Editor: Tarek Saad
<mailto:tsaad@cisco.com>
Editor: Himanshu Shah
<mailto:hshah@ciena.com>
Editor: Oscar Gonzalez De Dios
<mailto:oscar.gonzalezdedios@telefonica.com>";
description "TE topology model";
revision "2016-03-17" {
description "Initial revision";
reference "TBD";
}
/*
* Features
*/
feature configuration-schedule {
description
"This feature indicates that the system supports
configuration scheduling.";
}
feature te-topology-hierarchy {
description
"This feature indicates that the system allows underlay
and/or overlay TE topology hierarchy.";
}
feature te-performance-metric {
description
"This feature indicates that the system supports
TE performance metric defined in
RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
}
feature template {
description
"This feature indicates that the system supports
template configuration.";
}
/*
* Typedefs
*/
typedef performance-metric-normality {
type enumeration {
enum "unknown" {
value 0;
description
"Unknown.";
}
enum "normal" {
value 1;
description
"Normal.";
}
enum "abnormal" {
value 2;
description
"Abnormal. The anomalous bit is set.";
}
}
description
"Indicates whether a performance metric is normal, abnormal, or
unknown.";
reference
"RFC7471: OSPF Traffic Engineering (TE) Metric Extensions.";
}
typedef te-admin-status {
type enumeration {
enum up {
description
"Enabled.";
}
enum down {
description
"Disabled.";
}
enum testing {
description
"In some test mode.";
}
enum preparing-maintenance {
description
"Resource is disabled in the control plane to prepare for
graceful shutdown for maintenance purposes.";
reference
"RFC5817: Graceful Shutdown in MPLS and Generalized MPLS
Traffic Engineering Networks";
}
enum maintenance {
description
"Resource is disabled in the data plane for maintenance
purposes.";
}
}
description
"Defines a type representing the administrative status of
a TE resource.";
}
typedef te-global-id {
type uint32;
description
"An identifier to uniquely identify an operator, which can be
either a provider or a client.
The definition of this type is taken from RFC6370 and RFC5003.
This attribute type is used solely to provide a globally
unique context for TE topologies.";
}
typedef te-link-access-type {
type enumeration {
enum point-to-point {
description
"The link is point-to-point.";
}
enum multi-access {
description
"The link is multi-access, including broacast and NBMA.";
}
}
description
"Defines a type representing the access type of a TE link.";
reference
"RFC3630: Traffic Engineering (TE) Extensions to OSPF
Version 2.";
}
typedef te-node-id {
type inet:ip-address;
description
"An identifier for a node in a topology.
The identifier is represented as an IPv4 or IPv6 address.
This attribute is mapped to Router ID in
RFC3630, RFC5329, RFC5305, and RFC 6119.";
}
typedef te-oper-status {
type enumeration {
enum up {
description
"Operational up.";
}
enum down {
description
"Operational down.";
}
enum testing {
description
"In some test mode.";
}
enum unknown {
description
"Status cannot be determined for some reason.";
}
enum preparing-maintenance {
description
"Resource is disabled in the control plane to prepare for
graceful shutdown for maintenance purposes.";
reference
"RFC5817: Graceful Shutdown in MPLS and Generalized MPLS
Traffic Engineering Networks";
}
enum maintenance {
description
"Resource is disabled in the data plane for maintenance
purposes.";
}
}
description
"Defines a type representing the operational status of
a TE resource.";
}
typedef te-recovery-status {
type enumeration {
enum normal {
description
"Both the recovery and working spans are fully
allocated and active, data traffic is being
transported over (or selected from) the working
span, and no trigger events are reported.";
}
enum recovery-started {
description
"The recovery action has been started, but not completed.";
}
enum recovery-succeeded {
description
"The recovery action has succeeded. The working span has
reported a failure/degrade condition and the user traffic
is being transported (or selected) on the recovery span.";
}
enum recovery-failed {
description
"The recovery action has failed.";
}
enum reversion-started {
description
"The reversion has started.";
}
enum reversion-failed {
description
"The reversion has failed.";
}
enum recovery-unavailable {
description
"The recovery is unavailable -- either as a result of an
operator Lockout command or a failure condition detected
on the recovery span.";
}
enum recovery-admin {
description
"The operator has issued a command switching the user
traffic to the recovery span.";
}
enum wait-to-restore {
description
"The recovery domain is recovering from a failuer/degrade
condition on the working span that is being controlled by
the Wait-to-Restore (WTR) timer.";
}
}
}
typedef te-template-name {
type string {
pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
}
}
typedef te-topology-event-type {
type enumeration {
enum "add" {
value 0;
}
enum "remove" {
value 1;
}
enum "update" {
value 2;
}
}
} // te-topology-event-type
typedef te-topology-id {
type string {
pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
}
}
typedef te-tp-id {
type union {
type uint32; // Unnumbered
type inet:ip-address; // IPv4 or IPv6 address
}
}
/*
* Identities
*/
/*
* Groupings
*/
grouping information-source-attributes {
leaf information-source {
type enumeration {
enum "unknown";
enum "locally-configured";
enum "ospfv2";
enum "ospfv3";
enum "isis";
enum "system-processed";
enum "other";
}
}
container information-source-state {
leaf credibility-preference {
type uint16;
}
container topology {
uses te-topology-ref;
} // topology
leaf routing-instance {
type string;
} // routing-information
}
} // information-source-attributes
grouping performance-metric-attributes {
leaf unidirectional-delay {
type uint32 {
range 0..16777215;
}
}
leaf unidirectional-min-delay {
type uint32 {
range 0..16777215;
}
}
leaf unidirectional-max-delay {
type uint32 {
range 0..16777215;
}
}
leaf unidirectional-delay-variation {
type uint32 {
range 0..16777215;
}
}
leaf unidirectional-packet-loss {
type decimal64 {
fraction-digits 6;
range "0 .. 50.331642";
}
}
leaf unidirectional-residual-bandwidth {
type decimal64 {
fraction-digits 2;
}
}
leaf unidirectional-available-bandwidth {
type decimal64 {
fraction-digits 2;
}
}
leaf unidirectional-utilized-bandwidth {
type decimal64 {
fraction-digits 2;
}
}
} // performance-metric-attributes
grouping performance-metric-normality-attributes {
leaf unidirectional-delay {
type performance-metric-normality;
}
leaf unidirectional-min-delay {
type performance-metric-normality;
}
leaf unidirectional-max-delay {
type performance-metric-normality;
}
leaf unidirectional-delay-variation {
type performance-metric-normality;
}
leaf unidirectional-packet-loss {
type performance-metric-normality;
}
leaf unidirectional-residual-bandwidth {
type performance-metric-normality;
}
leaf unidirectional-available-bandwidth {
type performance-metric-normality;
}
leaf unidirectional-utilized-bandwidth {
type performance-metric-normality;
}
} // performance-metric-normality-attributes
grouping performance-metric-throttle-container {
container performance-metric-throttle {
leaf unidirectional-delay-offset {
type uint32 {
range 0..16777215;
}
}
leaf measure-interval {
type uint32;
default 30;
}
leaf advertisement-interval {
type uint32;
}
leaf suppression-interval {
type uint32 {
range "1 .. max";
}
default 120;
}
container threshold-out {
uses performance-metric-attributes;
}
container threshold-in {
uses performance-metric-attributes;
}
container threshold-accelerated-advertisement {
uses performance-metric-attributes;
}
}
} // performance-metric-throttle-container
grouping te-link-augment {
container te {
presence "TE support.";
container config {
uses te-link-config;
} // config
container state {
config false;
uses te-link-config;
uses te-link-state-derived;
} // state
} // te
} // te-link-augment
grouping te-link-config {
choice bundle-stack-level {
case bundle {
container bundled-links {
list bundled-link {
key "sequence";
leaf sequence {
type uint32;
}
leaf src-tp-ref {
type leafref {
path "../../../../../../nw:node[nw:node-id = "
+ "current()/../../../../../nt:source/"
+ "nt:source-node]/"
+ "nt:t-point/nt:tp-id";
require-instance true;
}
}
leaf des-tp-ref {
type leafref {
path "../../../../../../nw:node[nw:node-id = "
+ "current()/../../../../../nt:destination/"
+ "nt:dest-node]/"
+ "nt:t-point/nt:tp-id";
require-instance true;
}
}
} // list bundled-link
}
}
case component {
container component-links {
list component-link {
key "sequence";
leaf sequence {
type uint32;
}
leaf src-interface-ref {
type string;
}
leaf des-interface-ref {
type string;
}
}
}
}
} // bundle-stack-level
leaf-list te-link-template {
if-feature template;
type leafref {
path "../../../../../te/templates/link-template/name";
}
}
uses te-link-config-attributes;
} // te-link-config
grouping te-link-config-attributes {
container te-link-attributes {
uses sch:schedules;
leaf access-type {
type te-link-access-type;
}
leaf is-abstract {
type empty;
}
leaf name {
type string;
}
container underlay {
presence
"Indicates the underlay exists for this link.";
uses te-link-underlay-attributes;
} // underlay
leaf admin-status {
type te-admin-status;
description
"The administrative state of the link.";
}
uses performance-metric-throttle-container;
uses te-link-info-attributes;
} // te-link-attributes
} // te-link-config-attributes
grouping te-link-info-attributes {
leaf link-index {
type uint64;
}
leaf administrative-group {
type te-types:admin-groups;
}
leaf max-link-bandwidth {
type decimal64 {
fraction-digits 2;
}
}
leaf max-resv-link-bandwidth {
type decimal64 {
fraction-digits 2;
}
}
list unreserved-bandwidth {
key "priority";
max-elements "8";
leaf priority {
type uint8 {
range "0..7";
}
}
leaf bandwidth {
type decimal64 {
fraction-digits 2;
}
}
}
leaf te-default-metric {
type uint32;
}
container performance-metric {
container measurement {
uses performance-metric-attributes;
}
container normality
{
uses performance-metric-normality-attributes;
}
}
leaf link-protection-type {
type enumeration {
enum "unprotected";
enum "extra-traffic";
enum "shared";
enum "1-for-1";
enum "1-plus-1";
enum "enhanced";
}
}
list interface-switching-capability {
key "switching-capability";
leaf switching-capability {
type identityref {
base te-types:switching-capabilities;
}
}
leaf encoding {
type identityref {
base te-types:lsp-encoding-types;
}
}
list max-lsp-bandwidth {
key "priority";
max-elements "8";
leaf priority {
type uint8 {
range "0..7";
}
}
leaf bandwidth {
type decimal64 {
fraction-digits 2;
}
}
}
container time-division-multiplex-capable {
leaf minimum-lsp-bandwidth {
type decimal64 {
fraction-digits 2;
}
}
leaf indication {
type enumeration {
enum "standard";
enum "arbitrary";
}
}
}
list interface-adjustment-capability {
key "upper-sc";
leaf upper-sc {
type identityref {
base te-types:switching-capabilities;
}
}
leaf upper-encoding {
type identityref {
base te-types:lsp-encoding-types;
}
}
list max-lsp-bandwidth {
key "priority";
max-elements "8";
leaf priority {
type uint8 {
range "0..7";
}
description "Priority.";
}
leaf bandwidth {
type decimal64 {
fraction-digits 2;
}
}
}
} // interface-adjustment-capability
} // interface-switching-capability
container te-srlgs {
leaf-list values {
type te-types:srlg;
}
}
} // te-link-info-attributes
grouping te-link-state-derived {
leaf oper-status {
type te-oper-status;
}
uses information-source-attributes;
list alt-information-sources {
key "information-source";
uses information-source-attributes;
uses te-link-info-attributes;
}
container recovery {
leaf restoration-status {
type te-recovery-status;
}
leaf protection-status {
type te-recovery-status;
}
}
container underlay {
uses te-link-state-underlay-attributes;
}
} // te-link-state-derived
grouping te-link-state-underlay-attributes {
leaf dynamic {
type boolean;
}
leaf committed {
type boolean;
}
} // te-link-state-underlay-attributes
grouping te-link-underlay-attributes {
container underlay-primary-path {
uses te-topology-ref;
list path-element {
key "path-element-id";
leaf path-element-id {
type uint32;
}
uses te-path-element;
}
} // underlay-primary-path
list underlay-backup-path {
key "index";
leaf index {
type uint32;
}
uses te-topology-ref;
list path-element {
key "path-element-id";
leaf path-element-id {
type uint32;
}
uses te-path-element;
}
} // underlay-backup-path
leaf underlay-protection-type {
type uint16;
}
container underlay-trail-src {
uses nt:tp-ref;
}
container underlay-trail-des {
uses nt:tp-ref;
}
} // te-link-underlay-attributes
grouping te-node-augment {
container te {
presence "TE support.";
leaf te-node-id {
type te-node-id;
}
container config {
description
"Configuration data.";
uses te-node-config;
} // config
container state {
config false;
description
"Operational state data.";
uses te-node-config;
uses te-node-state-derived;
} // state
list tunnel-termination-point {
key "tunnel-tp-id";
leaf tunnel-tp-id {
type binary;
}
container config {
uses te-node-tunnel-termination-capability;
}
container state {
config false;
uses te-node-tunnel-termination-capability;
leaf switching-capability {
type identityref {
base te-types:switching-capabilities;
}
}
leaf encoding {
type identityref {
base te-types:lsp-encoding-types;
}
}
} // state
} // tunnel-termination-point
} // te
} // te-node-augment
grouping te-node-config {
leaf-list te-node-template {
if-feature template;
type leafref {
path "../../../../../te/templates/node-template/name";
}
}
uses te-node-config-attributes;
} // te-node-config
grouping te-node-config-attributes {
container te-node-attributes {
uses sch:schedules;
leaf admin-status {
type te-admin-status;
description
"The administrative state of the link.";
}
uses te-node-connectivity-matrix;
uses te-node-info-attributes;
} // te-node-attributes
} // te-node-config-attributes
grouping te-node-config-attributes-notification {
container te-node-attributes {
uses sch:schedules;
leaf admin-status {
type te-admin-status;
}
uses te-node-connectivity-matrix-abs;
uses te-node-info-attributes;
} // te-node-attributes
} // te-node-config-attributes-notification
grouping te-node-config-attributes-template {
container te-node-attributes {
uses sch:schedules;
leaf admin-status {
type te-admin-status;
}
uses te-node-info-attributes;
} // te-node-attributes
} // te-node-config-attributes-template
grouping te-node-connectivity-matrix {
list connectivity-matrix {
key "id";
leaf id {
type uint32;
}
container from {
leaf tp-ref {
type leafref {
path "../../../../../../nt:t-point/nt:tp-id";
}
}
}
container to {
leaf tp-ref {
type leafref {
path "../../../../../../nt:t-point/nt:tp-id";
}
}
}
leaf is-allowed {
type boolean;
}
}
} // te-node-connectivity-matrix
grouping te-node-connectivity-matrix-abs {
list connectivity-matrix {
key "id";
leaf id {
type uint32;
}
container from {
uses nt:tp-ref;
}
container to {
uses nt:tp-ref;
}
leaf is-allowed {
type boolean;
}
}
} // te-node-connectivity-matrix-abs
grouping te-node-info-attributes {
leaf domain-id {
type uint32;
}
leaf is-abstract {
type empty;
}
leaf name {
type inet:domain-name;
}
leaf-list signaling-address {
type inet:ip-address;
}
container underlay-topology {
if-feature te-topology-hierarchy;
uses te-topology-ref;
}
} // te-node-info-attributes
grouping te-node-state-derived {
description "Node state attributes in a TE topology.";
leaf oper-status {
type te-oper-status;
}
leaf is-multi-access-dr {
type empty;
}
uses information-source-attributes;
list alt-information-sources {
key "information-source";
uses information-source-attributes;
uses te-node-connectivity-matrix;
uses te-node-info-attributes;
}
} // te-node-state-derived
grouping te-node-state-derived-notification {
description "Node state attributes in a TE topology.";
leaf oper-status {
type te-oper-status;
}
leaf is-multi-access-dr {
type empty;
}
uses information-source-attributes;
list alt-information-sources {
key "information-source";
uses information-source-attributes;
uses te-node-connectivity-matrix-abs;
uses te-node-info-attributes;
}
} // te-node-state-derived-notification
grouping te-node-tunnel-termination-capability {
list termination-capability {
key "link-tp";
leaf link-tp {
type leafref {
path "../../../../../nt:t-point/nt:tp-id";
}
}
} // termination-capability
} // te-node-tunnel-termination-capability
grouping te-path-element {
uses te-types:explicit-route-subobject;
} // te-path-element
grouping te-termination-point-augment {
container te {
presence "TE support.";
leaf te-tp-id {
type te-tp-id;
mandatory true;
}
container config {
uses te-termination-point-config;
} // config
container state {
config false;
uses te-termination-point-config;
} // state
} // te
} // te-termination-point-augment
grouping te-termination-point-config {
uses sch:schedules;
} // te-termination-point-config
grouping te-topologies-augment {
container te {
presence "TE support.";
container templates {
list node-template {
if-feature template;
key "name";
leaf name {
type te-template-name;
}
uses template-attributes;
uses te-node-config-attributes-template;
} // node-template
list link-template {
if-feature template;
key "name";
leaf name {
type te-template-name;
}
uses template-attributes;
uses te-link-config-attributes;
} // link-template
} // templates
} // te
} // te-topologies-augment
grouping te-topology-augment {
container te {
presence "TE support.";
leaf provider-id {
type te-global-id;
}
leaf client-id {
type te-global-id;
}
leaf te-topology-id {
type te-topology-id;
mandatory true;
}
container config {
uses te-topology-config;
} // config
container state {
config false;
uses te-topology-config;
} // state
} // te
} // te-topology-augment
grouping te-topology-config {
uses sch:schedules;
leaf preference {
type uint8 {
range "1..255";
}
}
} // te-topology-config
grouping te-topology-ref {
leaf provider-id-ref {
type leafref {
path "/nw:networks/nw:network[nw:network-id = "
+ "current()/../network-id-ref]/tet:te/tet:provider-id";
require-instance false;
}
}
leaf client-id-ref {
type leafref {
path "/nw:networks/nw:network[nw:network-id = "
+ "current()/../network-id-ref]/tet:te/tet:client-id";
require-instance false;
}
}
leaf te-topology-id-ref {
type leafref {
path "/nw:networks/nw:network[nw:network-id = "
+ "current()/../network-id-ref]/tet:te/tet:te-topology-id";
require-instance false;
}
}
leaf network-id-ref {
type leafref {
path "/nw:networks/nw:network/nw:network-id";
require-instance false;
}
}
} // te-topology-ref
grouping te-topology-type {
container te-topology {
presence "Indicates TE topology.";
}
} // te-topology-type
grouping template-attributes {
leaf priority {
type uint16;
}
leaf reference-change-policy {
type enumeration {
enum no-action;
enum not-allowed;
enum cascade;
}
}
} // template-attributes
/*
* Configuration data nodes
*/
augment "/nw:networks/nw:network/nw:network-types" {
uses te-topology-type;
}
augment "/nw:networks" {
uses te-topologies-augment;
}
augment "/nw:networks/nw:network" {
uses te-topology-augment;
}
augment "/nw:networks/nw:network/nw:node" {
uses te-node-augment;
}
augment "/nw:networks/nw:network/nt:link" {
uses te-link-augment;
}
augment "/nw:networks/nw:network/nw:node/"
+ "nt:t-point" {
uses te-termination-point-augment;
}
container te-node-event {
leaf event-type {
type te-topology-event-type;
description "Event type.";
}
uses nw:node-ref;
uses te-topology-type;
uses tet:te-node-config-attributes-notification;
uses tet:te-node-state-derived-notification;
}
}