Feature 5651: support of MAC address specification in VNFD
[osm/IM.git] / models / yang / vnfr.yang
1
2 /*
3  *
4  *   Copyright 2016-2017 RIFT.IO Inc
5  *
6  *   Licensed under the Apache License, Version 2.0 (the "License");
7  *   you may not use this file except in compliance with the License.
8  *   You may obtain a copy of the License at
9  *
10  *       http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *   Unless required by applicable law or agreed to in writing, software
13  *   distributed under the License is distributed on an "AS IS" BASIS,
14  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *   See the License for the specific language governing permissions and
16  *   limitations under the License.
17  *
18  *
19  */
20
21 module vnfr
22 {
23   namespace "urn:ietf:params:xml:ns:yang:nfvo:vnfr";
24   prefix "vnfr";
25
26   import mano-types {
27     prefix "manotypes";
28   }
29
30   import vnfd-base {
31     prefix "vnfd-base";
32   }
33
34   import project-vnfd {
35     prefix "project-vnfd";
36   }
37
38   import project-nsd {
39     prefix "project-nsd";
40   }
41
42   import vlr {
43     prefix "vlr";
44   }
45
46   import ietf-yang-types {
47     prefix "yang";
48   }
49
50   import ietf-inet-types {
51     prefix "inet";
52   }
53
54   import rw-project {
55     prefix "rw-project";
56   }
57
58   revision 2017-02-28 {
59     description
60       "Update model to support projects.";
61   }
62
63   revision 2015-09-10 {
64     description
65       "Initial revision. This YANG file defines
66        the Virtual Network Function Record (VNFR)";
67     reference
68       "Derived from earlier versions of base YANG files";
69   }
70
71   typedef vdu-operational-status {
72     type enumeration {
73       enum init;
74       enum vm-init-phase;
75       enum vm-alloc-pending;
76       enum running;
77       enum upgrading;
78       enum terminate;
79       enum vl-terminate-phase;
80       enum terminated;
81       enum failed;
82     }
83   }
84
85   typedef vnf-operational-status {
86     type enumeration {
87       enum pre-init;
88       enum init;
89       enum vl-init-phase;
90       enum vm-init-phase;
91       enum running;
92       enum upgrading;   // Experimental
93       enum terminate;
94       enum vm-terminate-phase;
95       enum vl-terminate-phase;
96       enum terminated;
97       enum failed;
98     }
99   }
100
101   grouping placement-group-info {
102     list placement-groups-info {
103       description
104           "
105           Placement groups to which this VDU belongs and its
106           cloud construct
107           ";
108       key "name";
109       uses manotypes:placement-group-info;
110       uses manotypes:placement-group-input;
111     }
112   }
113
114   grouping virtual-interface {
115     container virtual-interface {
116       description
117           "Container for the virtual interface properties";
118
119       leaf type {
120         description
121             "Specifies the type of virtual interface
122              between VM and host.
123              VIRTIO          : Use the traditional VIRTIO interface.
124              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
125              SR-IOV          : Use SR-IOV interface.";
126         type enumeration {
127           enum VIRTIO;
128           enum PCI-PASSTHROUGH;
129           enum SR-IOV;
130         }
131       }
132
133       leaf bandwidth {
134         description
135             "Aggregate bandwidth of the NIC.";
136         type uint64;
137       }
138
139       leaf ovs-offload {
140         description
141             "Defines if the NIC supports OVS offload.
142              MANDATORY : OVS offload support in the NIC is mandatory.
143              PREFERRED : OVS offload support in the NIC is preferred.";
144         type enumeration {
145           enum MANDATORY;
146           enum PREFERRED;
147         }
148       }
149
150       leaf vendor-id {
151         description
152             "Specifies the vendor specific id for
153              the device. This is used when a NIC from
154              specific HW vendor is required.";
155         type string;
156       }
157
158       leaf datapath-library {
159         description
160             "Specifies the name and version of the datapath
161              library the NIC is expected to support.";
162         type string;
163       }
164
165       leaf provider-network-name {
166         description
167             "Name of the provider network to which this
168              NIC is attached.";
169         type string;
170       }
171     }
172   }
173
174   grouping associated-virtual-cps {
175     list virtual-cps {
176       key "name";
177       uses vnfd-base:common-connection-point;
178
179       leaf ip-address {
180         description
181             "IP address assigned to the virtual connection point";
182         type inet:ip-address;
183       }
184
185       leaf mac-address {
186         description
187             "MAC address assigned to the virtual connection point";
188         type string;
189       }
190
191       leaf connection-point-id {
192         description "VIM identifier for connection point";
193         type string;
194       }
195     }
196   }
197
198   augment "/rw-project:project" {
199     container vnfr-catalog {
200       config false;
201       list vnfr {
202         description
203           "Virtual Network Function Record (VNFR).";
204         key "id";
205         unique "name";
206
207         leaf id {
208           description "Identifier for the VNFR.";
209           type yang:uuid;
210         }
211
212         leaf nsr-id-ref {
213           description
214             "NS instance identifier.
215              This is a leafref /nsr:ns-instance-config/nsr:nsr/nsr:id";
216           type yang:uuid;
217         }
218
219         leaf member-vnf-index-ref {
220           description "Reference to member VNF index in Network service.";
221           type leafref {
222             path "../../../project-nsd:nsd-catalog/project-nsd:nsd/project-nsd:constituent-vnfd/project-nsd:member-vnf-index";
223           }
224         }
225
226         leaf dashboard-url {
227           description "Dashboard URL";
228           type inet:uri;
229         }
230
231         leaf name {
232           description "VNFR name.";
233           type string;
234         }
235
236         leaf short-name {
237           description "VNFR short name.";
238           type string;
239         }
240
241         leaf vendor {
242           description "Vendor of the VNFR.";
243           type string;
244         }
245
246         leaf description {
247           description "Description of the VNFR.";
248           type string;
249         }
250
251         leaf version {
252           description "Version of the VNFR";
253           type string;
254         }
255
256         leaf create-time {
257           description
258             "Creation timestamp of this Virtual Network
259           Function.  The timestamp is expressed as
260           seconds since unix epoch - 1970-01-01T00:00:00Z";
261
262           type uint32;
263         }
264
265         leaf uptime {
266           description
267             "Active period of this Virtual Network Function.
268           Uptime is expressed in seconds";
269
270           type uint32;
271         }
272
273         container vnfd {
274           description "VNF descriptor used to instantiate this VNF";
275           uses vnfd-base:vnfd-descriptor;
276         }
277
278         leaf vnfd-ref {
279           description "Reference to VNFD";
280           type leafref {
281             path "../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
282           }
283         }
284
285         // Use parameters provided here to configure this VNF
286       container vnf-configuration {
287         uses manotypes:vca-configuration;
288       }
289
290         // Mainly used by Mon-params & dashboard url
291         container mgmt-interface {
292           leaf ip-address {
293             type inet:ip-address;
294           }
295
296           leaf port {
297             type inet:port-number;
298           }
299
300           container ssh-key {
301             description "SSH key pair used for this VNF";
302             leaf public-key {
303               description "Public key configured on this VNF";
304               type string;
305             }
306
307             leaf private-key-file {
308               description "Path to the private key file";
309               type string;
310             }
311           }
312         }
313
314         list internal-vlr {
315           key "vlr-ref";
316
317           leaf vlr-ref {
318             description "Reference to a VLR record in the VLR catalog";
319             type leafref {
320               path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id";
321             }
322           }
323
324           leaf-list internal-connection-point-ref {
325             type leafref {
326               path "../../vdur/internal-connection-point/id";
327             }
328           }
329         }
330
331         list connection-point {
332           key "name";
333           description
334             "List for external connection points. Each VNF has one
335              or more external connection points. As the name
336              implies that external connection points are used for
337              connecting the VNF to other VNFs or to external networks.
338              Each VNF exposes these connection points to the
339              orchestrator. The orchestrator can construct network
340              services by connecting the connection points between
341              different VNFs. The NFVO will use VLDs and VNFFGs at
342              the network service level to construct network services.";
343
344           uses vnfd-base:common-connection-point;
345
346           leaf vlr-ref {
347             description
348               "Reference to the VLR associated with this connection point";
349             type  leafref {
350               path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id";
351             }
352           }
353
354           leaf ip-address {
355             description
356               "IP address assigned to the external connection point";
357             type inet:ip-address;
358           }
359
360           leaf mac-address {
361             description
362               "MAC address assigned to the external connection point";
363             // type inet:mac-address;
364             type string;
365           }
366
367           leaf connection-point-id {
368             type string;
369           }
370
371           uses associated-virtual-cps;
372         }
373
374         list vdur {
375           description "List of Virtual Deployment Units";
376           key "id";
377           unique "name";
378
379           leaf id {
380             description "Unique id for the VDU";
381             type yang:uuid;
382           }
383
384           leaf name {
385             description "name of the instantiated VDUR";
386             type string;
387           }
388
389           leaf unique-short-name {
390             description "Short Unique name of the VDU
391                   This will be of the format NSR name-ShortnedString-VDUname
392                   NSR name and VDU name shall be constrained to 10 characters";
393             type string;
394           }
395
396           leaf vdu-id-ref {
397             type leafref {
398               path "../../vnfd/vdu/id";
399             }
400           }
401
402           leaf vim-id {
403             description "Allocated VM resource id";
404             type string;
405           }
406
407           leaf flavor-id {
408             description "VIM assigned flavor id";
409             type string;
410           }
411
412           leaf image-id {
413             description "VIM assigned image id";
414             type string;
415           }
416
417           leaf management-ip {
418             description "Management IP address";
419             type inet:ip-address;
420           }
421
422           leaf vm-management-ip {
423             description "VM Private Management IP address";
424             type inet:ip-address;
425           }
426
427           leaf console-url {
428             description "Console URL for this VDU, if available";
429             type inet:uri;
430           }
431
432           uses manotypes:vm-flavor;
433           uses manotypes:guest-epa;
434           uses manotypes:vswitch-epa;
435           uses manotypes:hypervisor-epa;
436           uses manotypes:host-epa;
437
438           uses manotypes:supplemental-boot-data;
439
440         container vdu-configuration {
441           uses manotypes:vca-configuration;
442         }
443
444           list volumes {
445             key "name";
446
447             leaf name {
448               description "Name of the disk-volumes, e.g. vda, vdb etc";
449               type string;
450             }
451
452             leaf volume-id {
453               description "VIM assigned volume id";
454               type string;
455             }
456
457             uses manotypes:volume-info;
458           }
459
460           list internal-connection-point {
461             key "id";
462             description
463               "List for internal connection points. Each VNFC
464                has zero or more internal connection points.
465                Internal connection points are used for connecting
466                the VNF components internal to the VNF. If a VNF
467                has only one VNFC, it may not have any internal
468                connection points.";
469
470             uses vnfd-base:common-connection-point;
471
472             leaf ip-address {
473               description
474                 "IP address assigned to the internal connection point";
475               type inet:ip-address;
476             }
477
478             leaf mac-address {
479               description
480                 "MAC address assigned to the internal connection point";
481               // type inet:mac-address;
482               type string;
483             }
484
485             leaf connection-point-id {
486               type string;
487             }
488
489             uses associated-virtual-cps;
490           }
491
492         list interface {
493           description
494               "List of interfaces (internal and external) for the VNF";
495           key name;
496
497           leaf name {
498             description
499                 "Name of the interface. Note that this
500                 name has only local significance to the VDU.";
501             type string;
502           }
503
504           leaf position {
505             description
506                 "Explicit Position of the interface within the list";
507             type uint32;
508           }
509
510           leaf type {
511             description
512                 "Type of the Interface";
513
514             type vnfd-base:interface-type;
515
516             default "EXTERNAL";
517           }
518           choice connection-point-type {
519             case internal {
520               leaf internal-connection-point-ref {
521                 description
522                     "Leaf Ref to the particular internal connection point";
523                 type leafref {
524                   path "../../internal-connection-point/id";
525                 }
526               }
527             }
528             case external {
529               leaf external-connection-point-ref {
530                 description
531                     "Leaf Ref to the particular external connection point";
532                 type leafref {
533                   path "../../../connection-point/name";
534                 }
535               }
536             }
537           }
538           uses virtual-interface;
539         }
540
541          leaf operational-status {
542             description
543               "The operational status of the VDU
544                 init                : The VDU has just started.
545                 vm-init-phase       : The VDUs in the VNF is being created in VIM.
546                 vm-alloc-pending    : The  VM alloc is pending in VIM
547                 running             : The VDU is active in VM
548                 upgrading           : The VDU is being upgraded (EXPERIMENTAL)
549                 terminate           : The VDU is being terminated
550                 vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
551                 terminated          : The VDU is in the terminated state.
552                 failed              : The VDU  instantiation failed.
553               ";
554             type vdu-operational-status;
555          }
556
557           uses placement-group-info;
558         }
559
560         uses manotypes:monitoring-param;
561
562         leaf operational-status {
563           description
564             "The operational status of the VNFR instance
565               pre-init            : The VNF before Input Param Substitution.
566               init                : The VNF has just started.
567               vl-init-phase       : The internal VLs in the VNF are being instantiated.
568               vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
569               running             : The VNF is in running state.
570               terminate           : The VNF is being terminated.
571               vm-terminate-phase  : The VMs in the VNF are being terminated.
572               vl-terminate-phase  : The internal VLs in the VNF are being terminated.
573               terminated          : The VNF is in the terminated state.
574               failed              : The VNF instantiation failed
575             ";
576           type vnf-operational-status;
577         }
578
579         leaf config-status {
580           description
581             "The configuration status of the NS instance
582             configuring: At least one of the VNFs in this instance is in configuring state
583             configured:  All the VNFs in this NS instance are configured or config-not-needed state
584           ";
585
586           type enumeration {
587             enum configuring {
588               value 1;
589             }
590             enum configured {
591               value 2;
592             }
593             enum failed {
594               value 3;
595             }
596             enum config-not-needed {
597               value 4;
598             }
599           }
600         }
601         uses placement-group-info;
602
603         container cloud-config {
604           uses manotypes:cloud-config;
605         }
606       }
607     }
608   }
609 }