Set default true to 'port-security-enable'
[osm/IM.git] / models / yang / vnfd-base.yang
1
2 /*
3  *
4  *   Copyright 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 vnfd-base
22 {
23   namespace "http://riftio.com/ns/riftware-1.0/vnfd-base";
24   prefix "vnfd-base";
25
26   import mano-types {
27     prefix "manotypes";
28   }
29
30   import ietf-inet-types {
31     prefix "inet";
32   }
33
34   revision 2017-02-28 {
35     description
36       "Initial revision. This YANG file defines
37        the common types for Virtual Network Function
38        (VNF) descriptor";
39     reference
40       "Derived from earlier versions of base YANG files";
41   }
42
43   grouping common-connection-point {
44     leaf name {
45       description "Name of the connection point";
46       type string;
47     }
48
49     leaf id {
50       description "Identifier for the internal connection points";
51       type string;
52     }
53
54     leaf short-name {
55       description "Short name to appear as label in the UI";
56       type string;
57     }
58
59     leaf type {
60       description "Type of the connection point.";
61       type manotypes:connection-point-type;
62     }
63
64     leaf port-security-enabled {
65       description "Enables the port security for the port";
66       type boolean;
67       default true;
68     }
69   }
70
71   typedef interface-type {
72     type enumeration {
73       enum INTERNAL;
74       enum EXTERNAL;
75     }
76   }
77
78   typedef vnf-operational-status {
79     type enumeration {
80       enum init;
81       enum running;
82       enum upgrading;
83       enum terminate;
84       enum terminated;
85       enum failed;
86     }
87   }
88
89   grouping virtual-interface {
90     container virtual-interface {
91       description
92           "Container for the virtual interface properties";
93
94       leaf type {
95         description
96             "Specifies the type of virtual interface
97              between VM and host.
98              VIRTIO          : Use the traditional VIRTIO interface.
99              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
100              SR-IOV          : Use SR-IOV interface.
101              E1000           : Emulate E1000 interface.
102              RTL8139         : Emulate RTL8139 interface.
103              PCNET           : Emulate PCNET interface.
104              OM-MGMT         : Used to specify openmano mgmt external-connection type";
105
106         type enumeration {
107           enum OM-MGMT;
108           enum PCI-PASSTHROUGH;
109           enum SR-IOV;
110           enum VIRTIO;
111           enum E1000;
112           enum RTL8139;
113           enum PCNET;
114         }
115         default "VIRTIO";
116       }
117
118       leaf vpci {
119         description
120             "Specifies the virtual PCI address. Expressed in
121              the following format dddd:dd:dd.d. For example
122              0000:00:12.0. This information can be used to
123              pass as metadata during the VM creation.";
124         type string;
125       }
126
127       leaf bandwidth {
128         description
129             "Aggregate bandwidth of the NIC.";
130         type uint64;
131       }
132     }
133   }
134
135   grouping vnfd-descriptor {
136       leaf id {
137         description "Identifier for the VNFD.";
138         type string {
139           length "1..63";
140         }
141       }
142
143       leaf name {
144         description "VNFD name.";
145         mandatory true;
146         type string;
147       }
148
149       leaf short-name {
150         description "Short name to appear as label in the UI";
151         type string;
152       }
153
154       leaf vendor {
155         description "Vendor of the VNFD.";
156         type string;
157       }
158
159       leaf logo {
160         description
161             "Vendor logo for the Virtual Network Function";
162         type string;
163       }
164
165       leaf description {
166         description "Description of the VNFD.";
167         type string;
168       }
169
170       leaf version {
171         description "Version of the VNFD";
172         type string;
173       }
174
175       container vnf-configuration {
176         uses manotypes:vca-configuration;
177       }
178
179       leaf operational-status {
180          description
181            "The operational status of the VNF
182              init                : The VNF has just started.
183              running             : The VNF is active in VM
184              upgrading           : The VNF is being upgraded (EXPERIMENTAL)
185              terminate           : The VNF is being terminated
186              terminated          : The VNF is in the terminated state.
187              failed              : The VNF  instantiation failed.
188            ";
189          type vnf-operational-status;
190       }
191
192       container mgmt-interface {
193         description
194             "Interface over which the VNF is managed.";
195
196         choice endpoint-type {
197           description
198               "Indicates the type of management endpoint.";
199
200           case ip {
201             description
202                 "Specifies the static IP address for managing the VNF.";
203             leaf ip-address {
204               type inet:ip-address;
205             }
206           }
207
208           case vdu-id {
209             description
210                 "Use the default management interface on this VDU.";
211             leaf vdu-id {
212               type leafref {
213                 path "../../vdu/id";
214               }
215             }
216           }
217
218           case cp {
219             description
220                 "Use the ip address associated with this connection point.";
221             leaf cp {
222               type leafref {
223                 path "../../connection-point/name";
224               }
225             }
226           }
227         }
228
229         leaf port {
230           description
231               "Port for the management interface.";
232           type inet:port-number;
233         }
234
235         container dashboard-params {
236           description "Parameters for the VNF dashboard";
237
238           leaf path {
239             description "The HTTP path for the dashboard";
240             type string;
241           }
242
243           leaf https {
244             description "Pick HTTPS instead of HTTP , Default is false";
245             type boolean;
246           }
247
248           leaf port {
249             description "The HTTP port for the dashboard";
250             type inet:port-number;
251           }
252         }
253       }
254
255       list internal-vld {
256         key "id";
257         description
258           "List of Internal Virtual Link Descriptors (VLD).
259           The internal VLD describes the basic topology of
260           the connectivity such as E-LAN, E-Line, E-Tree.
261           between internal VNF components of the system.";
262
263         leaf id {
264           description "Identifier for the VLD";
265           type string;
266         }
267
268         leaf name {
269           description "Name of the internal VLD";
270           type string;
271         }
272
273         leaf short-name {
274           description "Short name to appear as label in the UI";
275           type string;
276         }
277
278         leaf description {
279           type string;
280         }
281
282         leaf type {
283           type manotypes:virtual-link-type;
284         }
285
286         leaf root-bandwidth {
287           description
288               "For ELAN this is the aggregate bandwidth.";
289           type uint64;
290         }
291
292         leaf leaf-bandwidth {
293           description
294               "For ELAN this is the bandwidth of branches.";
295           type uint64;
296         }
297
298         list internal-connection-point {
299           key "id-ref";
300           description "List of internal connection points in this VLD";
301           leaf id-ref {
302             description "reference to the internal connection point id";
303             type leafref {
304               path "../../../vdu/internal-connection-point/id";
305             }
306           }
307         }
308
309         uses manotypes:provider-network;
310         choice init-params {
311           description "Extra parameters for VLD instantiation";
312
313           case vim-network-ref {
314             leaf vim-network-name {
315               description
316                   "Name of network in VIM account. This is used to indicate
317                     pre-provisioned network name in cloud account.";
318               type string;
319             }
320           }
321
322           case vim-network-profile {
323             leaf ip-profile-ref {
324               description "Named reference to IP-profile object";
325               type string;
326             }
327           }
328
329         }
330       }
331
332       uses manotypes:ip-profile-list;
333
334       list connection-point {
335         key "name";
336         description
337           "List for external connection points. Each VNF has one
338           or more external connection points that connect the VNF
339           to other VNFs or to external networks. Each VNF exposes
340           connection points to the orchestrator, which can construct
341           network services by connecting the connection points
342           between different VNFs. The NFVO will use VLDs and VNFFGs
343           at the network service level to construct network services.";
344
345         uses common-connection-point;
346       }
347
348       list vdu {
349         description "List of Virtual Deployment Units";
350         key "id";
351
352         leaf id {
353           description "Unique id for the VDU";
354           type string;
355         }
356
357         leaf name {
358           description "Unique name for the VDU";
359           type string;
360         }
361
362         leaf description {
363             description "Description of the VDU.";
364             type string;
365         }
366
367         leaf count {
368           description "Number of instances of VDU";
369           type uint64;
370         }
371
372         leaf mgmt-vpci {
373           description
374               "Specifies the virtual PCI address. Expressed in
375              the following format dddd:dd:dd.d. For example
376              0000:00:12.0. This information can be used to
377              pass as metadata during the VM creation.";
378           type string;
379         }
380
381         uses manotypes:vm-flavor;
382         uses manotypes:guest-epa;
383         uses manotypes:vswitch-epa;
384         uses manotypes:hypervisor-epa;
385         uses manotypes:host-epa;
386
387         list alarm {
388           key "alarm-id";
389
390           uses manotypes:alarm;
391         }
392
393         uses manotypes:image-properties;
394
395         container vdu-configuration {
396           uses manotypes:vca-configuration;
397         }
398
399         choice cloud-init-input {
400           description
401             "Indicates how the contents of cloud-init script are provided.
402              There are 2 choices - inline or in a file";
403
404           case inline {
405             leaf cloud-init {
406               description
407                 "Contents of cloud-init script, provided inline, in cloud-config format";
408               type string;
409             }
410           }
411
412           case filename {
413             leaf cloud-init-file {
414               description
415                 "Name of file with contents of cloud-init script in cloud-config format";
416                 type string;
417             }
418           }
419         }
420
421         uses manotypes:supplemental-boot-data;
422
423         list internal-connection-point {
424           key "id";
425           description
426             "List for internal connection points. Each VNFC
427             has zero or more internal connection points.
428             Internal connection points are used for connecting
429             the VNF with components internal to the VNF. If a VNF
430             has only one VNFC, it may not have any internal
431             connection points.";
432
433           uses common-connection-point;
434
435           leaf internal-vld-ref {
436             type leafref {
437               path "../../../internal-vld/id";
438             }
439           }
440         }
441
442         list interface {
443           description
444               "List of Interfaces (external and internal) for the VNF";
445           key name;
446
447           leaf name {
448             description
449                 "Name of the interface. Note that this
450                 name has only local significance to the VDU.";
451             type string;
452           }
453
454           leaf position {
455             description
456                 "Explicit Position of the interface within the list";
457             type uint32;
458           }
459
460           leaf type {
461             description
462                 "Type of the Interface";
463             type interface-type;
464
465             default "EXTERNAL";
466           }
467
468           choice connection-point-type {
469             case internal {
470               leaf internal-connection-point-ref {
471                 description
472                     "Leaf Ref to the particular internal connection point";
473                 type leafref {
474                    path "../../internal-connection-point/id";
475                  }
476               }
477             }
478             case external {
479               leaf external-connection-point-ref {
480                 description
481                     "Leaf Ref to the particular external connection point";
482                 type leafref {
483                    path "../../../connection-point/name";
484                  }
485               }
486             }
487           }
488
489           uses virtual-interface;
490         }
491
492
493         list volumes {
494           key "name";
495
496           leaf name {
497             description "Name of the disk-volumes, e.g. vda, vdb etc";
498             type string;
499           }
500
501           uses manotypes:volume-info;
502         }
503       }
504
505       list vdu-dependency {
506         description
507             "List of VDU dependencies.";
508
509         key vdu-source-ref;
510         leaf vdu-source-ref {
511           type leafref {
512             path "../../vdu/id";
513           }
514         }
515
516         leaf vdu-depends-on-ref {
517           description
518             "Reference to the VDU on which
519             the source VDU depends.";
520           type leafref {
521             path "../../vdu/id";
522           }
523         }
524       }
525
526       leaf service-function-chain {
527         description "Type of node in Service Function Chaining Architecture";
528
529         type enumeration {
530           enum UNAWARE;
531           enum CLASSIFIER;
532           enum SF;
533           enum SFF;
534         }
535         default "UNAWARE";
536       }
537
538       leaf service-function-type {
539         description
540           "Type of Service Function.
541            NOTE: This needs to map with Service Function Type in ODL to
542            support VNFFG. Service Function Type is mandatory param in ODL
543            SFC. This is temporarily set to string for ease of use";
544         type string;
545       }
546
547       uses manotypes:monitoring-param;
548
549       list placement-groups {
550         description "List of placement groups at VNF level";
551
552         key "name";
553         uses manotypes:placement-group-info;
554
555         list member-vdus {
556
557           description
558               "List of VDUs that are part of this placement group";
559           key "member-vdu-ref";
560
561           leaf member-vdu-ref {
562             type leafref {
563               path "../../../vdu/id";
564             }
565           }
566         }
567       }
568   }
569 }
570
571 // vim: sw=2