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;
reference
"RFC 6991: Common YANG Types.";
}
import ietf-te-types {
prefix te-types;
reference
"RFC 8776: Common YANG Data Types for Traffic Engineering.";
}
import ietf-te-packet-types {
prefix te-packet-types;
reference
"RFC 8776: Common YANG Data Types for Traffic Engineering.";
}
organization
"IETF Traffic Engineering Architecture and Signaling (TEAS)
Working Group";
contact
"WG Web:
WG List:
Editor: Bo Wu
Editor: Dhruv Dhody
Editor: Reza Rokui
Editor: Tarek Saad
Author: Liuyan Han
";
description
"This module contains a YANG module for the IETF Network Slice.
Copyright (c) 2022 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 Revised BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://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 2022-03-04 {
description
"initial version.";
reference
"RFC XXXX: A Yang Data Model for IETF Network Slice Operation";
}
/* Features */
/* Identities */
identity ns-tag-type {
description
"Base identity for IETF Network Slice tag type.";
}
identity ns-tag-customer {
base ns-tag-type;
description
"The IETF Network Slice customer ID tag type.";
}
identity ns-tag-service {
base ns-tag-type;
description
"The IETF Network Slice service tag type.";
}
identity ns-tag-opaque {
base ns-tag-type;
description
"The IETF Network Slice opaque tag type.";
}
identity network-access-tag-type {
description
"Base identity for the network access tag type.";
}
identity network-access-tag-vlan-id {
base network-access-tag-type;
description
"The network access interface VLAN ID tag type.";
}
identity network-access-tag-ip-mask {
base network-access-tag-type;
description
"The network access tag IP mask.";
}
identity network-access-tag-opaque {
base network-access-tag-type;
description
"The network access opaque tag type.";
}
identity ns-isolation-type {
description
"Base identity for IETF Network slice isolation level.";
}
identity ns-isolation-shared {
base ns-isolation-type;
description
"Shared resources (e.g. queues) are associated with the Network
Slice traffic. Hence, the IETF network slice traffic can be
impacted by effects of other services traffic sharing
the same resources.";
}
identity ns-isolation-dedicated {
base ns-isolation-type;
description
"Dedicated resources (e.g. queues) are associated with the
Network Slice traffic. Hence, the IETF network slice traffic
is isolated from other servceis traffic sharing the same
resources.";
}
identity ns-security-type {
description
"Base identity for for IETF Network security level.";
}
identity ns-security-authenticate {
base ns-security-type;
description
"IETF Network Slice requires authentication.";
}
identity ns-security-integrity {
base ns-security-type;
description
"IETF Network Slice requires data integrity.";
}
identity ns-security-encryption {
base ns-security-type;
description
"IETF Network Slice requires data encryption.";
}
identity ns-connectivity-type {
description
"Base identity for IETF Network Slice connectivity.";
}
identity point-to-point {
base ns-connectivity-type;
description
"Identity for point-to-point IETF Network Slice connectivity.";
}
identity point-to-multipoint {
base ns-connectivity-type;
description
"Identity for point-to-multipoint IETF Network Slice
connectivity.";
}
identity multipoint-to-multipoint {
base ns-connectivity-type;
description
"Identity for multipoint-to-multipoint IETF Network Slice
connectivity.";
}
identity any-to-any {
base ns-connectivity-type;
description
"Identity for any-to-any IETF Network Slice connectivity.";
}
identity hub-spoke {
base ns-connectivity-type;
description
"Identity for Hub-and-Spoke IETF Network Slice connectivity.";
}
identity custom {
base ns-connectivity-type;
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 ns-slo-metric-type {
description
"Base identity for IETF Network Slice SLO metric type.";
}
identity ns-slo-one-way-bandwidth {
base ns-slo-metric-type;
description
"SLO bandwidth metric. Minimum guaranteed bandwidth between
two endpoints at any time and is measured unidirectionally.";
}
identity ns-slo-two-way-bandwidth {
base ns-slo-metric-type;
description
"SLO bandwidth metric. Minimum guaranteed bandwidth between
two endpoints at any time.";
}
identity ns-slo-shared-bandwidth {
base ns-slo-metric-type;
description
"The shared SLO bandwidth bound. It is the limit on the
bandwidth that can be shared amongst a group of connections
of an IETF Network Slice.";
}
identity ns-slo-one-way-delay {
base ns-slo-metric-type;
description
"SLO one-way-delay is the upper bound of network delay when
transmitting between two endpoints. The metric is defined in
RFC7679.";
}
identity ns-slo-two-way-delay {
base ns-slo-metric-type;
description
"SLO two-way delay is the upper bound of network delay when
transmitting between two endpoints. The metric is defined in
RFC2681.";
}
identity ns-slo-one-way-delay-variation {
base ns-slo-metric-type;
description
"SLO one-way delay variation is defined by RFC3393, is the
difference in the one-way delay between sequential packets
between two endpoints.";
}
identity ns-slo-two-way-delay-variation {
base ns-slo-metric-type;
description
"SLO two-way delay variation is defined by RFC5481, is the
difference in the round-trip delay between sequential packets
between two endpoints.";
}
identity ns-slo-one-way-packet-loss {
base ns-slo-metric-type;
description
"SLO loss metric. The ratio of packets dropped to packets
transmitted between two endpoints in one-way
over a period of time as specified in RFC7680.";
}
identity ns-slo-two-way-packet-loss {
base ns-slo-metric-type;
description
"SLO loss metric. The ratio of packets dropped to packets
transmitted between two endpoints in two-way
over a period of time as specified in RFC7680.";
}
identity ns-slo-availability {
base ns-slo-metric-type;
description
"SLO availability level.";
}
identity ns-match-type {
description
"Base identity for IETF Network Slice traffic match type.";
}
identity ns-phy-interface-match {
base ns-match-type;
description
"Use the physical interface as match criteria for the IETF
Network Slice traffic.";
}
identity ns-vlan-match {
base ns-match-type;
description
"Use the VLAN ID as match criteria for the IETF Network Slice
traffic.";
}
identity ns-label-match {
base ns-match-type;
description
"Use the MPLS label as match criteria for the IETF Network
Slice traffic.";
}
identity peering-protocol-type {
description
"Base identity for NSE peering protocol type.";
}
identity peering-protocol-bgp {
base peering-protocol-type;
description
"Use BGP as protocol for NSE peering with customer device.";
}
identity peering-static-routing {
base peering-protocol-type;
description
"Use static routing for NSE peering with customer device.";
}
/*
* 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 measurments monitoring type.";
}
enum two-way {
description
"represents two-way measurements monitoring type.";
}
}
description
"An enumerated type for monitoring on a IETF Network Slice
connection.";
}
/* Groupings */
grouping status-params {
description
"A grouping used to join operational and administrative status.";
container status {
description
"A container for the administrative and operational state.";
leaf admin-enabled {
type boolean;
description
"The administrative status.";
}
leaf oper-status {
type operational-type;
config false;
description
"The operational status.";
}
}
}
grouping ns-match-criteria {
description
"A grouping for the IETF Network Slice match definition.";
container ns-match-criteria {
description
"Describes the IETF Network Slice match criteria.";
list ns-match-criterion {
key "index";
description
"List of the IETF Network Slice traffic match criteria.";
leaf index {
type uint32;
description
"The entry index.";
}
leaf match-type {
type identityref {
base ns-match-type;
}
description
"Identifies an entry in the list of the IETF Network Slice
match criteria.";
}
list values {
key "index";
description
"List of match criteria values.";
leaf index {
type uint8;
description
"Index of an entry in the list.";
}
leaf value {
type string;
description
"Describes the IETF Network Slice match criteria, e.g.
IP address, VLAN, etc.";
}
}
leaf target-ns-connection-group-id {
type leafref {
path "/network-slices/network-slice"
+ "/ns-connection-groups/ns-connection-group"
+ "/ns-connection-group-id";
}
description
"reference to a Network Slice connection group.";
}
}
}
}
grouping ns-sles {
description
"Indirectly Measurable Objectives of a IETF Network
Slice.";
leaf-list security {
type identityref {
base ns-security-type;
}
description
"The IETF Network Slice security SLE(s)";
}
leaf isolation {
type identityref {
base ns-isolation-type;
}
default "ns-isolation-shared";
description
"The IETF Network Slice isolation SLE requirement.";
}
leaf max-occupancy-level {
type uint8 {
range "1..100";
}
description
"The maximal occupancy level specifies the number of flows to
be admitted.";
}
leaf mtu {
type uint16;
units "bytes";
mandatory true;
description
"The MTU specifies the maximum length in octets of data
packets that can be transmitted by the NS. The value needs
to be less than or equal to the minimum MTU value of
all 'ep-network-access-points' in the NSEs of the NS.";
}
container steering-constraints {
description
"Container for the policy of steering constraints
applicable to IETF Network Slice.";
container path-constraints {
description
"Container for the policy of path constraints
applicable to IETF Network Slice.";
}
container service-function {
description
"Container for the policy of service function
applicable to IETF Network Slice.";
}
}
}
grouping ns-metric-bounds {
description
"IETF Network Slice metric bounds grouping.";
container ns-metric-bounds {
description
"IETF Network Slice metric bounds container.";
list ns-metric-bound {
key "metric-type";
description
"List of IETF Network Slice metric bounds.";
leaf metric-type {
type identityref {
base ns-slo-metric-type;
}
description
"Identifies an entry in the list of metric type
bounds for the IETF 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 bound {
type uint64;
default "0";
description
"The Bound on the Network Slice connection metric. A
zero indicate an unbounded upper limit for the
specific metric-type.";
}
}
}
}
grouping ep-peering {
description
"A grouping for the IETF Network Slice Endpoint peering.";
container ep-peering {
description
"Describes NSE peering attributes.";
list protocol {
key "protocol-type";
description
"List of the NSE peering protocol.";
leaf protocol-type {
type identityref {
base peering-protocol-type;
}
description
"Identifies an entry in the list of NSE peering
protocol type.";
}
list attribute {
key "index";
description
"List of protocol attribute.";
leaf index {
type uint8;
description
"Index of an entry in the list.";
}
leaf attribute-description {
type string;
description
"The description of the attribute.";
}
leaf value {
type string;
description
"Describes the value of protocol attribute, e.g.
nexthop address, peer address, etc.";
}
}
}
}
}
grouping ep-network-access-points {
description
"Grouping for the endpoint network access definition.";
container ep-network-access-points {
description
"List of network access points.";
list ep-network-access-point {
key "network-access-id";
description
"The IETF Network Slice network access points
related parameters.";
leaf network-access-id {
type string;
description
"Uniquely identifier a network access point.";
}
leaf network-access-description {
type string;
description
"The network access point description.";
}
leaf network-access-node-id {
type string;
description
"The network access point node ID in the case of
multi-homing.";
}
leaf network-access-tp-id {
type string;
description
"The termination port ID of the EP network access
point.";
}
leaf network-access-tp-ip-address {
type inet:ip-address;
description
"The IP address of the EP network access point.";
}
leaf network-access-tp-ip-prefix-length {
type uint8;
description
"The subnet prefix length expressed in bits.";
}
leaf network-access-qos-policy-name {
type string;
description
"The name of the QoS policy that is applied to the
network access point. The name can reference a QoS
profile that is pre-provisioned on the device.";
}
leaf mtu {
type uint16;
units "bytes";
mandatory true;
description
"Maximum size in octets of a data packet that
can traverse a NSE network access point.";
}
container network-access-tags {
description
"Container for the network access tags.";
list network-access-tag {
key "index";
description
"The network access point tags list.";
leaf index {
type uint32;
description
"The entry index.";
}
leaf network-access-tag-type {
type identityref {
base network-access-tag-type;
}
description
"The network access point tag type.";
}
leaf network-access-tag-value {
type string;
description
"The network access point tag value.";
}
}
}
/* Per ep-network-access-point rate limits */
uses ns-match-criteria;
uses ep-peering;
uses ns-rate-limit;
}
}
}
grouping ep-monitoring-metrics {
description
"Grouping for the NS endpoint monitoring metrics.";
container ep-monitoring {
config false;
description
"Container for NS endpoint monitoring metrics.";
leaf incoming-utilized-bandwidth {
type te-types:te-bandwidth;
description
"Incoming bandwidth utilization at an 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
"Outoing bandwidth utilization at an 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 ns-connection-monitoring-metrics {
description
"Grouping for NS connection monitoring metrics.";
uses te-packet-types:one-way-performance-metrics-packet;
uses te-packet-types:two-way-performance-metrics-packet;
}
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 bw-rate-limits {
description
"Bandwidth rate limits grouping.";
reference
"RFC 7640: Traffic Management Benchmarking";
leaf cir {
type uint64;
units "bps";
description
"Committed Information Rate. The maximum number of bits
that a port can receive or send during one-second over an
interface.";
}
leaf cbs {
type uint64;
units "bytes";
description
"Committed Burst Size. CBS controls the bursty nature
of the traffic. Traffic that does not use the configured
CIR accumulates credits until the credits reach the
configured CBS.";
}
leaf eir {
type uint64;
units "bps";
description
"Excess Information Rate, i.e., excess frame delivery
allowed not subject to SLA. The traffic rate can be
limited by EIR.";
}
leaf ebs {
type uint64;
units "bytes";
description
"Excess Burst Size. The bandwidth available for burst
traffic from the EBS is subject to the amount of
bandwidth that is accumulated during periods when
traffic allocated by the EIR policy is not used.";
}
leaf pir {
type uint64;
units "bps";
description
"Peak Information Rate, i.e., maximum frame delivery
allowed. It is equal to or less than sum of CIR and EIR.";
}
leaf pbs {
type uint64;
units "bytes";
description
"Peak Burst Size.";
}
}
grouping ns-rate-limit {
description
"The rate limits grouping.";
container incoming-rate-limits {
description
"Container for the asymmetric traffic control.";
uses bw-rate-limits;
}
container outgoing-rate-limits {
description
"The rate-limit imposed on outgoing traffic.";
uses bw-rate-limits;
}
}
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
"Give more description of the Network Slice endpoint.";
}
uses geolocation-container;
leaf node-id {
type string;
description
"Uniquely identifies an edge node within the IETF slice
network.";
}
leaf ep-ip {
type inet:ip-address;
description
"The IP address of the endpoint.";
}
uses ns-match-criteria;
uses ep-peering;
uses ep-network-access-points;
uses ns-rate-limit;
/* Per NSE rate limits */
uses status-params;
uses ep-monitoring-metrics;
}
//ns-endpoint
grouping ns-connection {
description
"The network slice connection grouping.";
list ns-connection {
key "ns-connection-id";
description
"List of Network Slice connections.";
leaf ns-connection-id {
type uint32;
description
"The Network Slice connection identifier.";
}
leaf ns-connectivity-type {
type identityref {
base ns-connectivity-type;
}
default "point-to-point";
description
"Network Slice connection construct type.";
}
leaf-list src-nse {
type leafref {
path "/network-slices/network-slice"
+ "/ns-endpoints/ns-endpoint/ep-id";
}
description
"reference to source Network Slice endpoint.";
}
leaf-list dest-nse {
type leafref {
path "/network-slices/network-slice"
+ "/ns-endpoints/ns-endpoint/ep-id";
}
description
"reference to source Network Slice endpoint.";
}
uses ns-slo-sle-policy;
/* Per connection ns-slo-sle-policy overrides
* the per network slice ns-slo-sle-policy.
*/
container ns-connection-monitoring {
config false;
description
"SLO status Per NS connection.";
uses ns-connection-monitoring-metrics;
}
}
}
//ns-connection
grouping ns-connection-group {
description
"The Network Slice connection group is described in this
container.";
leaf ns-connection-group-id {
type string;
description
"The Network Slice connection group identifier.";
}
uses ns-slo-sle-policy;
uses ns-connection;
/* Per connection ns-slo-sle-policy overrides
* the per network slice ns-slo-sle-policy.
*/
container ns-connection-group-monitoring {
config false;
description
"SLO status Per NS connection.";
uses ns-connection-monitoring-metrics;
}
}
//ns-connection-group
grouping slice-template {
description
"Grouping for slice-templates.";
container ns-slo-sle-templates {
description
"Contains a set of network slice templates to
reference in the IETF network slice.";
list ns-slo-sle-template {
key "id";
leaf id {
type string;
description
"Identification of the Service Level Objective (SLO)
and Service Level Expectation (SLE) template to be used.
Local administration meaning.";
}
leaf template-description {
type string;
description
"Description of the SLO & SLE policy template.";
}
description
"List for SLO and SLE template identifiers.";
}
}
}
/* Configuration data nodes */
grouping ns-slo-sle-policy {
description
"Network Slice policy grouping.";
choice ns-slo-sle-policy {
description
"Choice for SLO and SLE policy template.
Can be standard template or customized template.";
case standard {
description
"Standard SLO template.";
leaf slo-sle-template {
type leafref {
path "/network-slices"
+ "/ns-slo-sle-templates/ns-slo-sle-template/id";
}
description
"Standard SLO and SLE template to be used.";
}
}
case custom {
description
"Customized SLO template.";
container slo-sle-policy {
description
"Contains the SLO policy.";
leaf policy-description {
type string;
description
"Description of the SLO policy.";
}
uses ns-metric-bounds;
uses ns-sles;
}
}
}
}
container network-slices {
description
"Containes a list of IETF network slice";
uses slice-template;
list network-slice {
key "ns-id";
description
"A network-slice is identified by a ns-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.";
}
container ns-tags {
description
"Container for the list of IETF Network Slice tags.";
list ns-tag {
key "index";
description
"IETF Network Slice tag list.";
leaf index {
type uint32;
description
"The entry index.";
}
leaf ns-tag-type {
type identityref {
base ns-tag-type;
}
description
"The IETF Network Slice tag type.";
}
leaf ns-tag-value {
type string;
description
"The IETF Network Slice tag value.";
}
}
}
uses ns-slo-sle-policy;
uses status-params;
container ns-endpoints {
description
"NS Endpoints.";
list ns-endpoint {
key "ep-id";
uses endpoint;
description
"List of endpoints in this slice.";
}
}
container ns-connection-groups {
description
"Contains NS connections group.";
list ns-connection-group {
key "ns-connection-group-id";
description
"List of Network Slice connections.";
uses ns-connection-group;
}
}
}
//ietf-network-slice list
}
}