--- /dev/null
+//INFORMATION
+//organization "CTTC";
+//contact "Pol Alemany, Ricard Vilalta, Juan Luis de la Cruz";
+//description "Network Slice components definition";
+
+// MODULE STRUCTURE
+module nst {
+ //header information
+ yang-version 1;
+ namespace "urn:ietf:params:xml:ns:yang:nfvo:nst";
+ prefix "nst";
+
+ import nsd-base{
+ prefix "nsd-base";
+ }
+
+ import nsd {
+ prefix "nsd";
+ }
+
+ import instantiation-parameters {
+ prefix "instantiation-parameters";
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ //revision history
+ revision 2018-08-20 {
+ description "Initial version";
+ }
+
+ //typedef definitions
+ typedef connection-points {
+ description "";
+ type string;
+ }
+
+ typedef network-slice-type {
+ type enumeration {
+ enum eMBB {
+ description "enhanced Mobile Broadband slice";
+ }
+ enum URLLC {
+ description "Ultra Reliable Low Latency Communications slice";
+ }
+ enum mMTC {
+ description "massive Machine Type Communications slice";
+ }
+ }
+ }
+
+ typedef resource-type {
+ type enumeration {
+ enum delay-critical-GBR {
+ description "delay critical guaranted bit rate";
+ }
+ enum GBR {
+ description "guaranted bit rate";
+ }
+ enum non-GBR {
+ description "NON guaranted bit rate";
+ }
+ }
+ }
+
+ grouping nsvld {
+ description "List of NetSlice Subnet Virtual Link Descriptors.";
+
+ uses nsd-base:vld-common;
+
+ list nsd-connection-point-ref {
+ description
+ "A list of references to connection points.";
+ key "nsd-ref nsd-connection-point-ref";
+
+ leaf nsd-ref {
+ description "Reference to nsd";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+
+ leaf nsd-connection-point-ref {
+ description "A reference to a connection point name";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+
+ leaf ip-address {
+ description "IP address of the connection point";
+ type inet:ip-address;
+ }
+
+ }
+ } // nsvld
+
+ grouping snssai {
+ description "";
+ leaf slice-service-type {
+ description "Network slice service type ";
+ type network-slice-type;
+ mandatory true;
+ }
+ leaf slice-differentiator {
+ description "Network slice differentiator";
+ type string;
+ }
+ } // snssai
+
+ grouping five-qi {
+ leaf id{
+ description "Quality of service identifier";
+ type uint16;
+ mandatory true;
+ }
+ leaf resource-type {
+ description "Quality of service resource type";
+ type resource-type;
+ }
+ leaf priority-level {
+ description "Priority level of the service";
+ type uint16;
+ }
+ leaf packet-delay-budget {
+ description "Packet delay budget in miliseconds (ms)";
+ type uint16;
+ }
+ leaf packet-error-rate {
+ description "Packet error rate (PER) given in powers of ten";
+ type uint16;
+ }
+ leaf default-max-data-burst {
+ description "Maximum data burst given in bytes (B)";
+ type uint16;
+ }
+ }
+
+ grouping netslice-subnet {
+ leaf id {
+ description "Identifier for the netslice-subnet.";
+ mandatory true;
+ type string {
+ length 1..63;
+ }
+ }
+ leaf name {
+ description "netslice-subnet name.";
+ mandatory true;
+ type string;
+ }
+ leaf short-name {
+ description "Short name to appear as label in the UI";
+ mandatory true;
+ type string;
+ }
+ leaf vendor {
+ description "Vendor of the NSD.";
+ mandatory true;
+ type string;
+ }
+ leaf is-shared-nss {
+ description "NSS is shared between NS";
+ mandatory true;
+ type boolean;
+ }
+ leaf description {
+ description "Description of the NSD.";
+ mandatory true;
+ type string;
+ }
+ leaf version {
+ description "Version of the NSD";
+ mandatory true;
+ type string;
+ }
+ leaf nsd-ref {
+ description "Reference to catalog NSD";
+ mandatory true;
+ type leafref{
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+ container instantiation-parameters {
+ uses instantiation-parameters:ns_instantiate;
+ }
+
+ }
+
+ grouping slice-connection-points {
+ description "List for external connection points. Each NS has one or more external connection
+ points. As the name implies that external connection points are used for connecting
+ the NS to other NS or to external networks. Each NS exposes these connection points
+ to the orchestrator. The orchestrator can construct network service chains by
+ connecting the connection points between different NS.";
+
+ uses nsd-base:nsd-connection-point-common;
+
+ choice connection {
+ description "Logical connection of the CP to a NSVLD or to a NSD CP";
+ case netslice-vld-ref {
+ leaf netslice-vld-id-ref {
+ description "ID reference to a NSVLD in the NS";
+ type leafref {
+ path "../../netslice-vld/id";
+ }
+
+ }
+ }
+ case nsd-connection-point-ref {
+ leaf nsd-id-ref {
+ description "A reference to a nsd.";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+ leaf nsd-connection-point-ref {
+ description "";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+ }
+ }
+ }
+
+ grouping rsp {
+
+ uses nsd-base:rsp-common;
+
+ list nsd-connection-point-ref {
+ description
+ "A list of references to connection points.";
+ key "nsd-ref";
+
+ leaf nsd-ref {
+ description "Reference to member-vnf within constituent-vnfds";
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+ leaf order {
+ type uint8;
+ description
+ "A number that denotes the order of a NSD in a chain";
+ }
+ leaf nsd-connection-point-ref {
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+ }
+ }
+
+ grouping classifier {
+ uses nsd-base:classifier-common;
+
+ leaf nsd-ref {
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+ }
+ }
+
+ leaf nsd-connection-point-ref {
+
+ type leafref {
+ path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
+ }
+ }
+ }
+
+ grouping netslicefgd {
+
+ uses nsd-base:fgd-common;
+
+ list rsp {
+ description
+ "List of Rendered Service Paths (RSP).";
+ key "id";
+ uses rsp;
+ }
+
+ list classifier {
+ description
+ "List of classifier rules.";
+ key "id";
+ uses classifier;
+ }
+ }
+ grouping network-slice{
+ leaf id {
+ mandatory true;
+ type string;
+ }
+
+ leaf name {
+ type string;
+ }
+
+ container SNSSAI-identifier {
+ uses snssai;
+ }
+ container quality-of-service {
+ uses five-qi;
+ }
+ list netslice-subnet {//list with multiple network service elements
+ key "id";
+ uses netslice-subnet;
+ }
+ list netslice-connection-point {
+ key "name";
+ uses slice-connection-points;
+ }
+ list netslice-vld {
+ key "id";
+ uses nsvld;
+ }
+ list netslicefgd{
+ key "id";
+ uses netslicefgd;
+ }
+ }
+
+ //containers definitions
+ list nst {
+ key "id";
+ uses network-slice;
+ }
+}