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.
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-04-15 {
description
"initial version.";
reference
"RFC XXXX: A Yang Data Model for Transport Slice 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
"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 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
is re used in the Site Network Acess and in the VPN-Node";
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-traffic-criteria {
description
"Grouping for traffic definition.";
container ts-traffic-criteria {
description
"Describes traffic-matching criteria.";
list ts-traffic-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 traffic-matching criteria,e.g. IP adress,
VLAN, etc.";
}
}
}
}
grouping routing-protocols {
description
"Grouping for endpoint protocols definition.";
container protocol {
description
"Describes protocal between access potin and site.";
container vrrp {
description
"Configuration specific to VRRP routing.";
leaf float-ipv4 {
type inet:ipv4-prefix;
description
"vrrp ipv4 float-ip.";
}
leaf float-ipv6 {
type inet:ipv6-prefix;
description
"vrrp ipv6 float ip.";
}
}
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 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.";
}
}
}
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 node within the transport
network.";
}
leaf tp-id {
type string;
description
"Termination point identifier of an edge node.";
}
uses ts-traffic-criteria;
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.";
}
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 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 ts-metric-bounds {
description
"TS metric bounds grouping";
container ts-metric-bounds {
description
"TS metric bounds container";
list ts-metric-bound {
key "metric-type";
description
"List of TS metric bounds";
leaf metric-type {
type identityref {
base ts-slo-metric-type;
}
description
"Identifies an entry in the list of metric-types
bound for the TS.";
}
leaf upper-bound {
type uint64;
default "0";
description
"Upper bound on ts-member metric. A zero indicate
an unbounded upper limit for the specific metric-type";
}
}
}
}
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 {
leaf isolation-type {
type identityref {
base isolation-type;
}
default "logical-isolation";
description
"TS service isolation-level.";
}
leaf bandwidth {
type te-types:te-bandwidth;
description
"max bandwidth ";
}
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.";
}
uses ts-metric-bounds;
leaf availability-type {
type identityref {
base availability-type;
}
description
"Availability Requirement for the Service";
}
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 service 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
}
}