Adding nst.yang and nsi.yang to data model.
[osm/IM.git] / models / yang / nst.yang
diff --git a/models/yang/nst.yang b/models/yang/nst.yang
new file mode 100644 (file)
index 0000000..b501dae
--- /dev/null
@@ -0,0 +1,331 @@
+//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;
+  }
+}