module ietf-transport-slice {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-transport-slice";
prefix ts;
import ietf-inet-types {
prefix inet;
}
import ietf-te-types {
prefix te-types;
}
organization
"IETF Traffic Engineering Architecture and Signaling (TEAS)
Working Group";
contact
"WG Web:
WG List:
Editor: Bo Wu
: Dhruv Dhody ";
description
"This module contains a YANG module for the Transport Slice NBI.
Copyright (c) 2020 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices.";
revision 2020-07-12 {
description
"initial version.";
reference
"RFC XXXX: A Yang Data Model for Transport Slice NBI Operation";
}
/* Features */
/* Identities */
identity ts-topology {
description
"Base identity for Transport Slice topology.";
}
identity any-to-any {
base ts-topology;
description
"Identity for any-to-any Transport Slice topology.";
}
identity hub-spoke {
base ts-topology;
description
"Identity for Hub-and-Spoke Transport Slice topology.";
}
identity ep-role {
description
"TSE Role in a Transport Slice topology ";
}
identity any-to-any-role {
base ep-role;
description
"TSE as the any-to-any role in an any-to-any Transport Slice.";
}
identity hub {
base ep-role;
description
"TSE as the hub role in a Hub-and-Spoke Transport Slice.";
}
identity spoke {
base ep-role;
description
"TSE as the spoke role in a Hub-and-Spoke transport slice.";
}
identity isolation-type {
description
"Base identity from which specific isolation types are derived.";
}
identity physical-isolation {
base isolation-type;
description
"physical isolation.";
}
identity logical-isolation {
base isolation-type;
description
"logical-isolation.";
}
identity ts-slo-metric-type {
description
"Base identity for TS SLO metric type";
}
identity ts-match-type {
description
"Base identity for TS metric type";
}
identity ts-vlan-match {
base ts-match-type;
description
"logical-isolation.";
}
/*
* Identity for availability-type
*/
identity availability-type {
description
"Base identity from which specific map types are derived.";
}
identity level-1 {
base availability-type;
description
"level 1: 99.9999%";
}
identity level-2 {
base availability-type;
description
"level 2: 99.999%";
}
identity level-3 {
base availability-type;
description
"level 3: 99.99%";
}
identity level-4 {
base availability-type;
description
"level 4: 99.9%";
}
identity level-5 {
base availability-type;
description
"level 5: 99%";
}
/* typedef */
typedef operational-type {
type enumeration {
enum up {
value 0;
description
"Operational status UP.";
}
enum down {
value 1;
description
"Operational status DOWN";
}
enum unknown {
value 2;
description
"Operational status UNKNOWN";
}
}
description
"This is a read-only attribute used to determine the
status of a particular element";
}
typedef ts-monitoring-type {
type enumeration {
enum one-way {
description
"represents one-way monitoring type";
}
enum two-way {
description
"represents two-way monitoring type";
}
}
description
"enumerated type of monitoring on a ts-member ";
}
/* Groupings */
grouping status-params {
description
"Grouping used to join operational and administrative status";
container status {
description
"Container for status of administration and operational";
leaf admin-enabled {
type boolean;
description
"Administrative Status UP/DOWN";
}
leaf oper-status {
type operational-type;
config false;
description
"Operations status";
}
}
}
grouping ts-filter-criteria {
description
"Grouping for TS filter definition.";
container ts-filter-criteria {
description
"Describes TS filter criteria.";
list ts-filter-criteria {
key "match-type";
description
"List of TS traffic criteria";
leaf match-type {
type identityref {
base ts-match-type;
}
description
"Identifies an entry in the list of match-type for the TS.";
}
leaf value {
type string;
description
"Describes TS filter criteria,e.g. IP address, VLAN, etc.";
}
}
}
}
grouping routing-protocols {
description
"Grouping for endpoint protocols definition.";
container protocol {
description
"Describes protocol between TSE and transport network edge device.";
container bgp {
description
"BGP-specific configuration.";
leaf-list bgp-peer-ipv4 {
type inet:ipv4-prefix;
description
"BGP peer ipv4 address.";
}
leaf-list bgp-peer-ipv6 {
type inet:ipv6-prefix;
description
"BGP peer ipv6 address.";
}
}
container static {
description
"Only applies when protocol is static.";
leaf-list static-route-ipv4 {
type inet:ipv4-prefix;
description
"ipv4 static route";
}
leaf-list static-route-ipv6 {
type inet:ipv6-prefix;
description
"ipv6 static route";
}
}
}
}
grouping ep-monitoring-parameters {
description
"Grouping for ep-monitoring-parameters.";
container ep-monitoring {
config false;
description
"Container for ep-monitoring-parameters.";
leaf incoming-utilized-bandwidth {
type te-types:te-bandwidth;
description
"Bandwidth utilization that represents the actual
utilization of the incoming endpoint.";
}
leaf incoming-bw-utilization {
type decimal64 {
fraction-digits 5;
range "0..100";
}
units "percent";
mandatory true;
description
"To be used to define the bandwidth utilization
as a percentage of the available bandwidth.";
}
leaf outgoing-utilized-bandwidth {
type te-types:te-bandwidth;
description
"Bandwidth utilization that represents the actual
utilization of the incoming endpoint.";
}
leaf outgoing-bw-utilization {
type decimal64 {
fraction-digits 5;
range "0..100";
}
units "percent";
mandatory true;
description
"To be used to define the bandwidth utilization
as a percentage of the available bandwidth.";
}
}
}
grouping common-monitoring-parameters {
description
"Grouping for link-monitoring-parameters.";
leaf latency {
type uint32;
units "usec";
description
"The latency statistics per TS member.";
}
leaf jitter {
type uint32 {
range "0..16777215";
}
description
"The jitter statistics per TS member.";
}
leaf loss {
type decimal64 {
fraction-digits 6;
range "0 .. 50.331642";
}
description
"Packet loss as a percentage of the total traffic
sent over a configurable interval. The finest precision is
0.000003%. where the maximum 50.331642%.";
reference
"RFC 7810, section-4.4";
}
}
grouping geolocation-container {
description
"A grouping containing a GPS location.";
container geolocation {
description
"A container containing a GPS location.";
leaf altitude {
type int64;
units "millimeter";
description
"Distance above the sea level.";
}
leaf latitude {
type decimal64 {
fraction-digits 8;
range "-90..90";
}
description
"Relative position north or south on the Earth's surface.";
}
leaf longitude {
type decimal64 {
fraction-digits 8;
range "-180..180";
}
description
"Angular distance east or west on the Earth's surface.";
}
}
// gps-location
}
// geolocation-container
grouping endpoint {
description
"Transport Slice endpoint related information";
leaf ep-id {
type uint32;
description
"unique identifier for the referred Transport Slice endpoint";
}
leaf ep-name {
type string;
description
"ep name";
}
leaf-list ep-role {
type identityref {
base ep-role;
}
default "any-to-any-role";
description
"Role of the endpoint in the Transport Slice.";
}
uses geolocation-container;
leaf node-id {
type string;
description
"Uniquely identifies an edge customer node.";
}
leaf port-id {
type string;
description
"Reference to the Port-id of the customer node.";
}
uses ts-filter-criteria;
container bandwidth {
container incoming-bandwidth {
leaf guaranteed-bandwidth {
type te-types:te-bandwidth;
description
"If guaranteed-bandwidth is 0, it means best effort, no
minimum throughput is guaranteed.";
}
description
"Container for the incoming bandwidth policy";
}
container outgoing-bandwidth {
leaf guaranteed-bandwidth {
type te-types:te-bandwidth;
description
"If guaranteed-bandwidth is 0, it means best effort, no
minimum throughput is guaranteed.";
}
description
"Container for the bandwidth policy";
}
description
"Container for the bandwidth policy";
}
leaf mtu {
type uint16;
units "bytes";
mandatory true;
description
"MTU of TS traffic. If the traffic type is IP,
it refers to the IP MTU. If the traffic type is Ethertype,
will refer to the Ethernet MTU. ";
}
uses routing-protocols;
uses status-params;
uses ep-monitoring-parameters;
}
//ts-ep
grouping ts-member {
description
"ts-member is described by this container";
leaf ts-member-id {
type uint32;
description
"ts-member identifier";
}
container src {
description
"the source of TS link";
leaf src-ts-ep-id {
type leafref {
path "/transport-slices/transport-slice/ts-endpoint/ep-id";
}
description
"reference to source TS endpoint";
}
}
container dest {
description
"the destination of TS link ";
leaf dest-ts-ep-id {
type leafref {
path "/transport-slices/transport-slice/ts-endpoint/ep-id";
}
description
"reference to dest TS endpoint";
}
}
leaf monitoring-type {
type ts-monitoring-type;
description
"One way or two way monitoring type.";
}
container ts-member-monitoring {
config false;
description
"SLO status Per ts endpoint to endpoint ";
uses common-monitoring-parameters;
}
}
//ts-member
grouping transport-slice-slo-group {
description
"Grouping for SLO definition of TS";
list ts-slo-group {
key "slo-group-name";
description
"List of TS SLO groups, the SLO group is used to
support different SLO objectives between different ts-members
in the same slice.";
leaf slo-group-name {
type string;
description
"Identifies an entry in the list of SLO group for the TS.";
}
leaf default-slo-group {
type boolean;
default "false";
description
"Is the SLO group is selected as the default-slo-group";
}
leaf slo-tag {
type string;
description
"slo tag for operational management";
}
choice slo-template {
description
"Choice for SLO template.
Can be standard template or customized template.";
case standard {
description
"Standard SLO template.";
leaf template {
type leafref {
path "/transport-slices/slice-templates/slice-template/id";
}
description
"QoS template to be used.";
}
}
case custom {
description
"Customized SLO template.";
container ts-slo-policy {
container latency {
leaf one-way-latency {
type uint32 {
range "0..16777215";
}
units "usec";
description
"Lowest latency in micro seconds.";
}
leaf two-way-latency {
type uint32 {
range "0..16777215";
}
description
"Lowest-way delay or latency in micro seconds.";
}
description
"Latency constraint on the traffic class.";
}
container jitter {
leaf one-way-jitter {
type uint32 {
range "0..16777215";
}
description
"lowest latency in micro seconds.";
}
leaf two-way-jitter {
type uint32 {
range "0..16777215";
}
description
"lowest-way delay or latency in micro seconds.";
}
description
"Jitter constraint on the traffic class.";
}
container loss {
leaf one-way-loss {
type decimal64 {
fraction-digits 6;
range "0 .. 50.331642";
}
description
"Packet loss as a percentage of the total traffic sent
over a configurable interval. The finest precision is
0.000003%. where the maximum 50.331642%.";
reference
"RFC 7810, section-4.4";
}
leaf two-way-loss {
type decimal64 {
fraction-digits 6;
range "0 .. 50.331642";
}
description
"Packet loss as a percentage of the total traffic sent
over a configurable interval. The finest precision is
0.000003%. where the maximum 50.331642%.";
reference
"RFC 7810, section-4.4";
}
description
"Loss constraint on the traffic class.";
}
leaf availability-type {
type identityref {
base availability-type;
}
description
"Availability Requirement for the TS";
}
leaf isolation-type {
type identityref {
base isolation-type;
}
default "logical-isolation";
description
"TS isolation-level.";
}
description
"container for customized policy constraint on the slice
traffic.";
}
}
}
list ts-member-group {
key "ts-member-id";
description
"List of included TS Member groups for the SLO.";
leaf ts-member-id {
type leafref {
path "/transport-slices/transport-slice/ts-member/ts-member-id";
}
description
"Identifies the included list of TS member.";
}
}
container slo-group-monitoring {
config false;
description
"SLO status Per slo group ";
uses common-monitoring-parameters;
}
}
}
grouping slice-template {
description
"Grouping for slice-templates.";
container slice-templates {
description
"Container for slice-templates.";
list slice-template {
key "id";
leaf id {
type string;
description
"Identification of the SLO Template to be used.
Local administration meaning.";
}
leaf template-description {
type string;
description
"Description of the SLO template.";
}
description
"List for SLO template identifiers.";
}
}
}
/* Configuration data nodes */
container transport-slices {
description
"transport-slice configurations";
uses slice-template;
list transport-slice {
key "ts-id";
description
"a transport-slice is identified by a ts-id";
leaf ts-id {
type uint32;
description
"a unique transport-slice identifier";
}
leaf ts-name {
type string;
description
"ts name";
}
leaf-list ts-topology {
type identityref {
base ts-topology;
}
default "any-to-any";
description
"TS topology.";
}
uses transport-slice-slo-group;
uses status-params;
list ts-endpoint {
key "ep-id";
uses endpoint;
description
"list of endpoints in this slice";
}
list ts-member {
key "ts-member-id";
description
"List of ts-member in a slice";
uses ts-member;
}
}
//ts-list
}
}