Merge branch 'netslice'
[osm/IM.git] / models / yang / nst.yang
1 //INFORMATION
2 //organization "CTTC";
3 //contact "Pol Alemany, Ricard Vilalta, Juan Luis de la Cruz";
4 //description "Network Slice components definition";
5
6 // MODULE STRUCTURE
7 module nst {
8   //header information
9   yang-version 1;
10   namespace "urn:ietf:params:xml:ns:yang:nfvo:nst";
11   prefix "nst";
12
13   import nsd-base{
14     prefix "nsd-base";
15   }
16
17   import nsd {
18     prefix "nsd";
19   }
20
21   import instantiation-parameters {
22     prefix "instantiation-parameters";
23   }
24
25   import ietf-inet-types {
26     prefix "inet";
27   }
28
29   //revision history
30   revision 2018-08-20 {
31     description "Initial version";
32   }
33
34   //typedef definitions
35   typedef connection-points {
36     description "";
37     type string;
38   }
39
40   typedef network-slice-type {
41     type enumeration {
42       enum eMBB {
43         description "enhanced Mobile Broadband slice";
44       }
45       enum URLLC {
46         description "Ultra Reliable Low Latency Communications slice";
47       }
48       enum mMTC {
49         description "massive Machine Type Communications slice";
50       }
51     }
52   }
53
54   typedef resource-type {
55     type enumeration {
56       enum delay-critical-GBR {
57         description "delay critical guaranted bit rate";
58       }
59       enum GBR {
60         description "guaranted bit rate";
61       }
62       enum non-GBR {
63         description "NON guaranted bit rate";
64       }
65     }
66   }
67
68   grouping nsvld {
69     description "List of NetSlice Subnet Virtual Link Descriptors.";
70
71     uses nsd-base:vld-common;
72
73     list nsd-connection-point-ref {
74       description
75           "A list of references to connection points.";
76       key "nsd-ref nsd-connection-point-ref";
77
78       leaf nsd-ref {
79         description "Reference to nsd";
80         type leafref {
81           path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
82         }
83       }
84
85       leaf nsd-connection-point-ref {
86         description "A reference to a connection point name";
87         type leafref {
88           path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
89         }
90       }
91
92       leaf ip-address {
93         description "IP address of the connection point";
94         type inet:ip-address;
95       }
96
97     }
98   } // nsvld
99
100   grouping snssai {
101     description "";
102     leaf slice-service-type {
103       description "Network slice service type ";
104       type network-slice-type;
105       mandatory true;
106     }
107     leaf slice-differentiator {
108       description "Network slice differentiator";
109       type string;
110     }
111   } // snssai
112
113   grouping five-qi {
114     leaf id{
115       description "Quality of service identifier";
116       type uint16;
117       mandatory true;
118     }
119     leaf resource-type {
120       description "Quality of service resource type";
121       type resource-type;
122     }
123     leaf priority-level {
124       description "Priority level of the service";
125       type uint16;
126     }
127     leaf packet-delay-budget {
128       description "Packet delay budget in miliseconds (ms)";
129       type uint16;
130     }
131     leaf packet-error-rate {
132       description "Packet error rate (PER) given in powers of ten";
133       type uint16;
134     }
135     leaf default-max-data-burst {
136       description "Maximum data burst given in bytes (B)";
137       type uint16;
138     }
139   }
140
141   grouping netslice-subnet {
142     leaf id {
143       description "Identifier or name for the netslice-subnet in NST scope.";
144       mandatory true;
145       type string {
146         length 1..63;
147       }
148     }
149     leaf description {
150       description "Description of the NSD.";
151       type string;
152     }
153     leaf is-shared-nss {
154       description "NSS is shared between NS";
155       type boolean;
156       default false;
157     }
158     leaf nsd-ref {
159       description "Reference to catalog NSD";
160       mandatory true;
161       type leafref{
162           path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
163       }
164     }
165     container instantiation-parameters {
166       uses instantiation-parameters:ns_params;
167     }
168
169   }
170
171   grouping slice-connection-points {
172     description "List for external connection points. Each NS has one or more external connection
173                 points. As the name implies that external connection points are used for connecting
174                 the NS to other NS or to external networks. Each NS exposes these connection points 
175                 to the orchestrator. The orchestrator can construct network service chains by 
176                 connecting the connection points between different NS.";
177
178     uses nsd-base:nsd-connection-point-common;
179
180     choice connection {
181       description "Logical connection of the CP to a NSVLD or to a NSD CP";
182       case netslice-vld-ref {
183         leaf netslice-vld-id-ref {
184           description "ID reference to a NSVLD in the NS";
185           type leafref {
186             path "../../netslice-vld/id";
187           }
188
189         }
190       }
191       case nsd-connection-point-ref {
192         leaf nsd-id-ref {
193           description "A reference to a nsd.";
194           type leafref {
195             path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
196           }
197         }
198         leaf nsd-connection-point-ref {
199           description "";
200           type leafref {
201             path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
202            }
203         }
204       }
205     }
206   }
207
208   grouping rsp {
209
210     uses nsd-base:rsp-common;
211
212     list nsd-connection-point-ref {
213       description
214         "A list of references to connection points.";
215       key "nsd-ref";
216
217       leaf nsd-ref {
218         description "Reference to member-vnf within constituent-vnfds";
219         type leafref {
220           path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
221         }
222       }
223       leaf order {
224         type uint8;
225         description
226           "A number that denotes the order of a NSD in a chain";
227       }
228       leaf nsd-connection-point-ref {    
229         type leafref {
230           path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
231          }
232       }
233     }  
234   }
235
236   grouping classifier {
237     uses nsd-base:classifier-common;
238
239     leaf nsd-ref {
240       type leafref {
241           path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
242       }
243     }
244
245     leaf nsd-connection-point-ref {
246
247       type leafref {
248         path "/nsd:nsd-catalog/nsd:nsd/nsd:connection-point/nsd:name";
249        }
250     }
251   }
252
253   grouping netslicefgd {
254
255     uses nsd-base:fgd-common;
256
257     list rsp {
258       description
259         "List of Rendered Service Paths (RSP).";
260       key "id";
261       uses rsp;
262     } 
263
264     list classifier {
265       description
266           "List of classifier rules.";
267       key "id";
268       uses classifier;
269     } 
270   }
271   grouping network-slice{
272     leaf id {
273       mandatory true;
274       type string;
275     }
276
277     leaf name {
278       type string;
279       mandatory true;
280     }
281
282     container SNSSAI-identifier {
283       uses snssai;
284     }
285     container quality-of-service {
286       uses five-qi;
287     }
288     list netslice-subnet {//list with multiple network service elements
289       key "id";
290       uses netslice-subnet;
291     }
292     list netslice-connection-point {
293       key "name";
294       uses slice-connection-points;
295     }
296     list netslice-vld {
297       key "id";
298       uses nsvld;
299     }
300     list netslicefgd {
301       key "id";
302       uses netslicefgd;
303     }
304   }
305
306   //containers definitions
307   list nst {
308     key "id";
309     uses network-slice;
310   }
311 }