module ietf-network-slice {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-network-slice";
prefix ietf-ns;
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 IETF Network 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-11-13 {
description
"initial version.";
reference
"RFC XXXX: A Yang Data Model for IETF Network Slice Operation";
}
/* Features */
/* Identities */
identity network-slice-topology {
description
"Base identity for IETF Network Slice topology.";
}
identity any-to-any {
base network-slice-topology;
description
"Identity for any-to-any IETF Network Slice topology.";
}
identity hub-spoke {
base network-slice-topology;
description
"Identity for Hub-and-Spoke IETF Network Slice topology.";
}
identity endpoint-role {
description
"Network Slice Endpoint Role in an IETF Network Slice topology ";
}
identity any-to-any-role {
base endpoint-role;
description
"Network Slice Endpoint as the any-to-any role in an any-to-any
IETF Network Slice.";
}
identity hub {
base endpoint-role;
description
"Network Slice Endpoint as the hub role in a Hub-and-Spoke
IETF Network Slice.";
}
identity spoke {
base endpoint-role;
description
"Network Slice Endpoint as the spoke role in a Hub-and-Spoke
IETF Network 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 network-slice-slo-metric-type {
description
"Base identity for Network Slice SLO metric type";
}
identity network-slice-match-type {
description
"Base identity for Network Slice traffic match type";
}
identity network-slice-vlan-match {
base network-slice-match-type;
description
"VLAN as Network Slice traffic match criteria.";
}
/*
* Identity for availability-type
*/
identity availability-type {
description
"Base identity from which specific availability
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 network-slice-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 network-slice-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 network-slice-match-criteria {
description
"Grouping for Network Slice match definition.";
container network-slice-match-criteria {
description
"Describes Network Slice match criteria.";
list network-slice-match-criteria {
key "match-type";
description
"List of Network Slice traffic criteria";
leaf match-type {
type identityref {
base network-slice-match-type;
}
description
"Identifies an entry in the list of match-type for
the Network Slice.";
}
leaf value {
type string;
description
"Describes Network Slice match criteria,e.g. IP address,
VLAN, etc.";
}
}
}
}
grouping network-slice-metric-bounds {
description
"Network Slice metric bounds grouping";
container network-slice-metric-bounds {
description
"Network Slice metric bounds container";
list network-slice-metric-bound {
key "metric-type";
description
"List of Network Slice metric bounds";
leaf metric-type {
type identityref {
base network-slice-slo-metric-type;
}
description
"Identifies an entry in the list of metric-types
bound for the Network Slice.";
}
leaf upper-bound {
type uint64;
default "0";
description
"Upper bound on network-slice-member metric. A zero indicate
an unbounded upper limit for the specific metric-type";
}
}
}
}
grouping routing-protocols {
description
"Grouping for endpoint protocols definition.";
container routing {
description
"Describes protocol between Network Slice Endpoint and IETF
scoped 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 endpoint-monitoring-parameters {
description
"Grouping for endpoint-monitoring-parameters.";
container endpoint-monitoring {
config false;
description
"Container for endpoint-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 Network Slice member.";
}
leaf jitter {
type uint32 {
range "0..16777215";
}
description
"The jitter statistics per Network Slice 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
"IETF Network Slice endpoint related information";
leaf endpoint-id {
type uint32;
description
"unique identifier for the referred IETF Network
Slice endpoint";
}
leaf endpoint-name {
type string;
description
"endpoint name";
}
leaf-list endpoint-role {
type identityref {
base endpoint-role;
}
default "any-to-any-role";
description
"Role of the endpoint in the IETF Network Slice.";
}
uses geolocation-container;
leaf node-id {
type string;
description
"Uniquely identifies an edge node within the IETF slice
network.";
}
leaf port-id {
type string;
description
"Reference to the Port-id of the customer node.";
}
uses network-slice-match-criteria;
leaf endpoint-ip {
type inet:host;
description
"The address of the TACACS+ server.";
}
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 Network Slice 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 endpoint-monitoring-parameters;
}
//network-slice-endpoint
grouping network-slice-member {
description
"network-slice-member is described by this container";
leaf network-slice-member-id {
type uint32;
description
"network-slice-member identifier";
}
container src {
description
"the source of Network Slice link";
leaf src-network-slice-endpoint-id {
type leafref {
path "/ietf-network-slices/ietf-network-slice/"
+ "network-slice-endpoint/endpoint-id";
}
description
"reference to source Network Slice endpoint";
}
}
container dest {
description
"the destination of Network Slice link ";
leaf dest-network-slice-endpoint-id {
type leafref {
path "/ietf-network-slices/ietf-network-slice"
+ "/network-slice-endpoint/endpoint-id";
}
description
"reference to dest Network Slice endpoint";
}
}
leaf monitoring-type {
type network-slice-monitoring-type;
description
"One way or two way monitoring type.";
}
container network-slice-member-monitoring {
config false;
description
"SLO status Per network-slice endpoint to endpoint ";
uses common-monitoring-parameters;
}
}
//network-slice-member
grouping network-slice-connection-group {
description
"Grouping for SLO definition of Network Slice";
list network-slice-connection-group {
key "connection-group-name";
description
"List of Network Slice connection groups, the connection group
is used to support different SLO objectives between different
network-slice-members in a same IETF Network slice.";
leaf connection-group-name {
type string;
description
"Identifies an entry in the list of connection group for the
Network Slice.";
}
leaf default-connection-group {
type boolean;
default "false";
description
"Is the connection group is selected as the default connection
group of a particular SLO";
}
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 "/ietf-network-slices"
+ "/slice-templates/slo-template/id";
}
description
"QoS template to be used.";
}
}
case custom {
description
"Customized SLO template.";
container network-slice-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 Network Slice";
}
leaf isolation-type {
type identityref {
base isolation-type;
}
default "logical-isolation";
description
"Network Slice isolation-level.";
}
uses network-slice-metric-bounds;
description
"container for customized policy constraint on the slice
traffic.";
}
}
}
list network-slice-member-group {
key "network-slice-member-id";
description
"List of included Network Slice Member groups for the SLO.";
leaf network-slice-member-id {
type leafref {
path "/ietf-network-slices/ietf-network-slice/"
+ "network-slice-member/network-slice-member-id";
}
description
"Identifies the included list of Network Slice member.";
}
}
container connection-group-monitoring {
config false;
description
"SLO status per connection group ";
uses common-monitoring-parameters;
}
}
}
grouping slice-template {
description
"Grouping for slice-templates.";
container slice-templates {
description
"Container for slice-templates.";
list slo-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 ietf-network-slices {
description
"IETF network-slice configurations";
uses slice-template;
list ietf-network-slice {
key "network-slice-id";
description
"a network-slice is identified by a network-slice-id";
leaf network-slice-id {
type uint32;
description
"a unique network-slice identifier";
}
leaf network-slice-name {
type string;
description
"network-slice name";
}
leaf-list network-slice-tag {
type string;
description
"Network Slice tag for operational management";
}
leaf-list network-slice-topology {
type identityref {
base network-slice-topology;
}
default "any-to-any";
description
"Network Slice topology.";
}
uses network-slice-connection-group;
uses status-params;
list network-slice-endpoint {
key "endpoint-id";
uses endpoint;
description
"list of endpoints in this slice";
}
list network-slice-member {
key "network-slice-member-id";
description
"List of network-slice-member in a slice";
uses network-slice-member;
}
}
//ietf-network-slice list
}
}