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.";
revision 2020-03-03 {
description
"initial version.";
reference
"RFC XXXX: A Yang Data Model for Transport Slice Operation";
}
/* Features */
/* Identities */
identity ts-topology {
description
"Base identity for vpn topology.";
}
identity any-to-any {
base ts-topology;
description
"Identity for any-to-any VPN topology.";
}
identity hub-spoke {
base ts-topology;
description
"Identity for Hub-and-Spoke VPN topology.";
}
identity ep-role {
description
"Site Role in a transport slice topology ";
}
identity any-to-any-role {
base ep-role;
description
"Site in an any-to-any transport slice.";
}
identity hub {
base ep-role;
description
"Hub Role in a Hub-and-Spoke transport slice.";
}
identity spoke {
base ep-role;
description
"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 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-metric-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 {
container status {
leaf admin-enabled {
type boolean;
description
"Administrative Status UP/DOWN";
}
leaf oper-status {
type operational-type;
config false;
description
"Operations status";
}
description
"";
}
description
"Grouping used to join operational and administrative status
is re used in the Site Network Acess and in the VPN-Node";
}
grouping ts-traffic-classifier {
container ts-traffic-criteria {
leaf vlan {
type uint8 {
range "0..7";
}
description
"802.1Q matching.";
}
leaf dscp {
type inet:dscp;
description
"DSCP value.";
}
leaf src-ip-prefix {
type inet:ip-prefix;
description
"Match on IPv4 src or IPv6 src address.";
}
description
"Describes traffic-matching criteria.";
}
description
"Grouping for traffic definition.";
}
grouping ep-monitoring-parameters {
container ep-monitoring {
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 service 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 service bandwidth.";
}
config false;
description
"Grouping for ep-monitoring-parameters.";
}
}
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 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.";
}
container site-access-parameters {
leaf site-name {
type string;
description
"The Site that the endpoint is attached with";
}
leaf availability-priority {
type uint32;
default "100";
description
"In multihoming access of one site, the priority for
this Endpoint is specified . The higher the value, the higher
the preference of the Endpoint will be.";
}
description
"Site specific parameters.";
}
leaf node-id {
type string;
description
"Uniquely identifies an edge node within the transport
network.";
}
leaf tp-id {
type string;
description
"Termination point identifier of an edge node.";
}
container bandwidth-slo {
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.";
}
leaf max-bandwidth {
type te-types:te-bandwidth;
description
"max bandwidth ";
}
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.";
}
leaf max-bandwidth {
type te-types:te-bandwidth;
description
"max bandwidth ";
}
description
"Container for the bandwidth policy";
}
description
"Container for the bandwidth SLO policy";
}
leaf mtu {
type uint16;
units "bytes";
mandatory true;
description
"MTU at service level. If the service is IP,
it refers to the IP MTU. If the service is Ethertype,
will refer to the Ethernet MTU. ";
}
uses ts-traffic-classifier;
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 metric-type {
type ts-metric-type;
description
"One way or two way monitoring type.";
}
container ts-member-monitoring {
description
"SLO status Per ts endpoint to endpoint ";
config false;
uses common-monitoring-parameters;
}
}
//ts-member
grouping transport-slice-slo-policy {
description
"policy for transport-slice-slo-level";
container slo-profile {
description
"SLO profile.";
choice slo-profile {
description
"Choice for SLO profile.
Can be standard profile or customized profile.";
case standard {
description
"Standard SLO profile.";
leaf profile {
type leafref {
path "/transport-slices/slice-profiles/slo-profile/id";
}
description
"QoS profile to be used.";
}
}
case custom {
description
"Customized SLO profile.";
container ts-slo-policy {
leaf isolation-type {
type identityref {
base isolation-type;
}
default "logical-isolation";
description
"TS service isolation-level.";
}
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 Service";
}
description
"container for customized policy constraint on the slice traffic.";
}
}
}
}
}
grouping slice-profile {
container slice-profiles {
list slo-profile {
key "id";
leaf id {
type string;
description
"Identification of the SLO Profile to be used.
Local administration meaning.";
}
leaf profile-description {
type string;
description
"Description of the SLO Profile.";
}
description
"List for SLO Profile Identifiers.";
}
description
"Container for slice-profiles.";
}
description
"Grouping for slice-profiles.";
}
/* Configuration data nodes */
container transport-slices {
description
"transport-slice configurations";
uses slice-profile;
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 service topology.";
}
uses transport-slice-slo-policy;
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
}
}