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-yang-types {
prefix yang;
reference
"RFC 6991: Common YANG Types.";
}
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) 2021 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 2021-02-19 {
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 custom {
base network-slice-topology;
description
"Identity of a custom NS topology where Hubs
can act as Spoke for certain parts of
the network or Spokes as Hubs.";
}
identity endpoint-role {
description
"Base identity of a NSE role in an IETF Network Slice topology.";
}
identity any-to-any-role {
base endpoint-role;
description
"Identity of any-to-any NS.";
}
identity spoke-role {
base endpoint-role;
description
"A NSE is acting as a Spoke.";
}
identity hub-role {
base endpoint-role;
description
"A NSE is acting as a Hub.";
}
identity custom-role {
base endpoint-role;
description
"A NSE is custom role in the NS.";
}
identity network-slice-slo-metric-type {
description
"Base identity for Network Slice SLO metric type";
}
identity network-slice-slo-two-way-delay {
base network-slice-slo-metric-type;
description
"SLO delay metric.";
}
identity network-slice-slo-one-way-delay {
base network-slice-slo-metric-type;
description
"SLO delay metric.";
}
identity network-slice-slo-jitter {
base network-slice-slo-metric-type;
description
"SLO jitter metric.";
}
identity network-slice-slo-loss {
base network-slice-slo-metric-type;
description
"SLO loss metric .";
}
identity network-slice-slo-availability {
base network-slice-slo-metric-type;
description
"SLO availability level.";
}
identity network-slice-slo-bandwidth {
base network-slice-slo-metric-type;
description
"SLO bandwidth metric.";
}
identity network-slice-match-type {
description
"Base identity for Network Slice traffic match type";
}
identity network-slice-phy-interface-match {
base network-slice-match-type;
description
"VLAN as Network Slice traffic match criteria.";
}
identity network-slice-vlan-match {
base network-slice-match-type;
description
"VLAN as Network Slice traffic match criteria.";
}
identity network-slice-label-match {
base network-slice-match-type;
description
"Label 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 ns-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 ns-match-criteria {
description
"Describes Network Slice match criteria.";
list ns-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 ns-metric-bounds {
description
"Network Slice metric bounds container";
list ns-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 metric-unit {
type string;
mandatory true;
description
"The metric unit of the parameter.
For example, s, ms, ns, and so on.";
}
leaf value-description {
type string;
description
"The description of previous value. ";
}
leaf boundary {
type uint64;
default "0";
description
"Boundary on network-slice-member metric. A zero indicate
an unbounded upper limit for the specific metric-type";
}
}
}
}
grouping ep-network-accesses {
description
"Grouping for endpoint network access definition.";
list ep-network-access {
key "network-access-id";
description
"IETF Network Slice endpoint network access related parameters";
leaf network-access-id {
type string;
description
"unique identifier for the referred endpoint network access";
}
leaf network-access-description {
type string;
description
"endpoint network access description";
}
leaf network-access-node-id {
type string;
description
"EP network access node ID in the case of multi-homing.";
}
leaf network-access-tp-id {
type string;
description
"EP network access termination port ID.";
}
leaf network-access-tp-ip {
type inet:host;
description
"The IP address of EP network access.";
}
}
}
grouping endpoint-monitoring-parameters {
description
"Grouping for endpoint-monitoring-parameters.";
container ep-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 yang:gauge64;
units "usec";
description
"The latency statistics per Network Slice member.
[RFC2681] and [RFC7679] discuss round trip times and one-way
metrics, respectively";
}
leaf jitter {
type yang:gauge32;
description
"The jitter statistics per Network Slice member
as defined by [RFC3393].";
}
leaf loss-ratio {
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 location {
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 ep-id {
type string;
description
"unique identifier for the referred IETF Network
Slice endpoint";
}
leaf ep-description {
type string;
description
"endpoint name";
}
leaf ep-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 ep-ip {
type inet:host;
description
"The address of the endpoint IP address.";
}
uses network-slice-match-criteria;
uses ep-network-accesses;
container ep-rate-limit {
description
"Container for the asymmetric traffic control";
container incoming-throughput {
description
"Container for the incoming traffic policy";
leaf maximum-throughput {
type te-types:te-bandwidth;
description
"If maximum-throughput is 0, it means best effort, no
minimum throughput is guaranteed.";
}
}
container outgoing-throughput {
description
"Container for the bandwidth policy";
leaf maximum-throughput {
type te-types:te-bandwidth;
description
"If maximum-throughput is 0, it means best effort, no
minimum throughput is guaranteed.";
}
}
}
container ep-protocol {
description
"Describes protocol for the Network Slice Endpoint.";
}
uses status-params;
uses endpoint-monitoring-parameters;
}
//network-slice-endpoint
grouping network-slice-member {
description
"network-slice-member is described by this container";
leaf ns-member-id {
type uint32;
description
"network-slice-member identifier";
}
leaf ns-member-description {
type string;
description
"network-slice-member description";
}
container src {
description
"the source of Network Slice link";
leaf src-ep-id {
type leafref {
path "/ietf-network-slices/ietf-network-slice/"
+ "ns-endpoint/ep-id";
}
description
"reference to source Network Slice endpoint";
}
}
container dest {
description
"the destination of Network Slice link ";
leaf dest-ep-id {
type leafref {
path "/ietf-network-slices/ietf-network-slice"
+ "/ns-endpoint/ep-id";
}
description
"reference to dest Network Slice endpoint";
}
}
leaf monitoring-type {
type ns-monitoring-type;
description
"One way or two way monitoring type.";
}
container ns-member-monitoring {
config false;
description
"SLO status Per network-slice endpoint to endpoint ";
uses common-monitoring-parameters;
}
}
//network-slice-member
grouping slice-template {
description
"Grouping for slice-templates.";
container ns-templates {
description
"Contains a set of network slice templates to
reference in the IETF network slice.";
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 policy 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 "ns-id";
description
"a network-slice is identified by a network-slice-id";
leaf ns-id {
type string;
description
"A unique network-slice identifier across an IETF NSC ";
}
leaf ns-description {
type string;
description
"Give more description of the network slice";
}
leaf-list ns-tag {
type string;
description
"Network Slice tag for operational management";
}
leaf ns-topology {
type identityref {
base network-slice-topology;
}
default "any-to-any";
description
"Network Slice topology.";
}
choice ns-slo-policy {
description
"Choice for SLO policy template.
Can be standard template or customized template.";
case standard {
description
"Standard SLO template.";
leaf slo-template {
type leafref {
path "/ietf-network-slices"
+ "/ns-templates/slo-template/id";
}
description
"Standard SLO template to be used.";
}
}
case custom {
description
"Customized SLO template.";
container slo-policy {
description
"Contains the SLO policy.";
leaf policy-description {
type string;
description
"Description of the SLO policy.";
}
uses network-slice-metric-bounds;
}
}
}
uses status-params;
list ns-endpoint {
key "ep-id";
uses endpoint;
description
"list of endpoints in this slice";
}
list ns-member {
key "ns-member-id";
description
"List of network-slice-member in a slice";
uses network-slice-member;
}
}
//ietf-network-slice list
}
}