blob: 1407016dd2aaf476fefe481943aeeaa330161bfc [file] [log] [blame]
Rajesh Velandye27e0b22017-09-18 17:21:48 -04001
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
21module 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 {
garciadeblas0ec676d2017-12-18 18:22:27 +010065 description "Enables the port security for the port.";
Rajesh Velandye27e0b22017-09-18 17:21:48 -040066 type boolean;
67 }
68 }
69
70 typedef interface-type {
71 type enumeration {
72 enum INTERNAL;
73 enum EXTERNAL;
74 }
75 }
76
Adam Israelfcfb1cb2017-10-10 12:12:30 -040077 typedef vnf-operational-status {
78 type enumeration {
79 enum init;
80 enum running;
81 enum upgrading;
82 enum terminate;
83 enum terminated;
84 enum failed;
85 }
86 }
87
Rajesh Velandye27e0b22017-09-18 17:21:48 -040088 grouping virtual-interface {
89 container virtual-interface {
90 description
91 "Container for the virtual interface properties";
92
93 leaf type {
94 description
95 "Specifies the type of virtual interface
96 between VM and host.
97 VIRTIO : Use the traditional VIRTIO interface.
98 PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
99 SR-IOV : Use SR-IOV interface.
100 E1000 : Emulate E1000 interface.
101 RTL8139 : Emulate RTL8139 interface.
102 PCNET : Emulate PCNET interface.
tierno19a20de2017-11-03 16:29:05 +0100103 OM-MGMT : Deprecated! Use VIRTIO instead and set the VNF management interface at vnfd:mgmt-interface:cp";
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400104
105 type enumeration {
106 enum OM-MGMT;
107 enum PCI-PASSTHROUGH;
108 enum SR-IOV;
109 enum VIRTIO;
110 enum E1000;
111 enum RTL8139;
112 enum PCNET;
113 }
114 default "VIRTIO";
115 }
116
117 leaf vpci {
118 description
119 "Specifies the virtual PCI address. Expressed in
120 the following format dddd:dd:dd.d. For example
121 0000:00:12.0. This information can be used to
122 pass as metadata during the VM creation.";
123 type string;
124 }
125
126 leaf bandwidth {
127 description
128 "Aggregate bandwidth of the NIC.";
129 type uint64;
130 }
131 }
132 }
133
134 grouping vnfd-descriptor {
135 leaf id {
136 description "Identifier for the VNFD.";
137 type string {
138 length "1..63";
139 }
140 }
141
142 leaf name {
143 description "VNFD name.";
144 mandatory true;
145 type string;
146 }
147
148 leaf short-name {
149 description "Short name to appear as label in the UI";
150 type string;
151 }
152
153 leaf vendor {
154 description "Vendor of the VNFD.";
155 type string;
156 }
157
158 leaf logo {
159 description
160 "Vendor logo for the Virtual Network Function";
161 type string;
162 }
163
164 leaf description {
165 description "Description of the VNFD.";
166 type string;
167 }
168
169 leaf version {
170 description "Version of the VNFD";
171 type string;
172 }
173
Rajesh Velandyce30ffe2017-09-25 15:15:25 +0000174 container vnf-configuration {
175 uses manotypes:vca-configuration;
176 }
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400177
Adam Israelfcfb1cb2017-10-10 12:12:30 -0400178 leaf operational-status {
179 description
180 "The operational status of the VNF
181 init : The VNF has just started.
182 running : The VNF is active in VM
183 upgrading : The VNF is being upgraded (EXPERIMENTAL)
184 terminate : The VNF is being terminated
185 terminated : The VNF is in the terminated state.
186 failed : The VNF instantiation failed.
187 ";
188 type vnf-operational-status;
189 }
190
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400191 container mgmt-interface {
192 description
193 "Interface over which the VNF is managed.";
194
195 choice endpoint-type {
196 description
197 "Indicates the type of management endpoint.";
198
199 case ip {
200 description
201 "Specifies the static IP address for managing the VNF.";
202 leaf ip-address {
203 type inet:ip-address;
204 }
205 }
206
207 case vdu-id {
208 description
209 "Use the default management interface on this VDU.";
210 leaf vdu-id {
211 type leafref {
212 path "../../vdu/id";
213 }
214 }
215 }
216
217 case cp {
218 description
tierno19a20de2017-11-03 16:29:05 +0100219 "Use the ip address associated with this connection point. This cp is then considered as management.";
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400220 leaf cp {
221 type leafref {
222 path "../../connection-point/name";
223 }
224 }
225 }
226 }
227
228 leaf port {
229 description
230 "Port for the management interface.";
231 type inet:port-number;
232 }
233
234 container dashboard-params {
235 description "Parameters for the VNF dashboard";
236
237 leaf path {
238 description "The HTTP path for the dashboard";
239 type string;
240 }
241
242 leaf https {
243 description "Pick HTTPS instead of HTTP , Default is false";
244 type boolean;
245 }
246
247 leaf port {
248 description "The HTTP port for the dashboard";
249 type inet:port-number;
250 }
251 }
252 }
253
254 list internal-vld {
255 key "id";
256 description
257 "List of Internal Virtual Link Descriptors (VLD).
258 The internal VLD describes the basic topology of
259 the connectivity such as E-LAN, E-Line, E-Tree.
260 between internal VNF components of the system.";
261
262 leaf id {
263 description "Identifier for the VLD";
264 type string;
265 }
266
267 leaf name {
268 description "Name of the internal VLD";
269 type string;
270 }
271
272 leaf short-name {
273 description "Short name to appear as label in the UI";
274 type string;
275 }
276
277 leaf description {
278 type string;
279 }
280
281 leaf type {
282 type manotypes:virtual-link-type;
283 }
284
285 leaf root-bandwidth {
286 description
287 "For ELAN this is the aggregate bandwidth.";
288 type uint64;
289 }
290
291 leaf leaf-bandwidth {
292 description
293 "For ELAN this is the bandwidth of branches.";
294 type uint64;
295 }
296
297 list internal-connection-point {
298 key "id-ref";
299 description "List of internal connection points in this VLD";
300 leaf id-ref {
garciadeblas0ec676d2017-12-18 18:22:27 +0100301 description "Reference to the internal connection point id";
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400302 type leafref {
303 path "../../../vdu/internal-connection-point/id";
304 }
305 }
garciadeblas0ec676d2017-12-18 18:22:27 +0100306
garciadeblas1edb98c2017-12-05 13:47:09 +0100307 leaf ip-address {
308 description "IP address of the internal connection point";
309 type inet:ip-address;
310 }
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400311 }
312
313 uses manotypes:provider-network;
314 choice init-params {
315 description "Extra parameters for VLD instantiation";
316
317 case vim-network-ref {
318 leaf vim-network-name {
319 description
320 "Name of network in VIM account. This is used to indicate
321 pre-provisioned network name in cloud account.";
322 type string;
323 }
324 }
325
326 case vim-network-profile {
327 leaf ip-profile-ref {
328 description "Named reference to IP-profile object";
329 type string;
330 }
331 }
332
333 }
334 }
335
336 uses manotypes:ip-profile-list;
337
338 list connection-point {
339 key "name";
340 description
341 "List for external connection points. Each VNF has one
342 or more external connection points that connect the VNF
343 to other VNFs or to external networks. Each VNF exposes
344 connection points to the orchestrator, which can construct
345 network services by connecting the connection points
346 between different VNFs. The NFVO will use VLDs and VNFFGs
347 at the network service level to construct network services.";
348
349 uses common-connection-point;
garciadeblasa75e0bb2017-12-12 13:33:33 +0100350
351 leaf internal-vld-ref {
352 description
353 "Reference to an internal VLD of the VNF. This field is
354 optional. It allows exposing an internal VLD through a
355 connection point. When building a NS, this VNF CP might be
356 connected to a NS VLD, then both VLDs (the i-VLD of the VNF and the
357 VLD of the NS) will become the same network and the IP profile will
358 be the one configured at NS level.";
359 type leafref {
360 path "../../internal-vld/id";
361 }
362 }
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400363 }
364
365 list vdu {
366 description "List of Virtual Deployment Units";
367 key "id";
368
369 leaf id {
370 description "Unique id for the VDU";
371 type string;
372 }
373
374 leaf name {
375 description "Unique name for the VDU";
376 type string;
377 }
378
379 leaf description {
380 description "Description of the VDU.";
381 type string;
382 }
383
garciadeblas0ec676d2017-12-18 18:22:27 +0100384 leaf pdu-type {
385 description
386 "Type of PDU. If this field exists, the deployment unit must be
387 understood as a PDU, not as a VDU. This field is used to identify
388 the category of PDU instances to be used at instantiation time. For
389 the instantiation to be successful, there must be available
390 PDU instances of this type in the selected datacenter.";
391 type string;
392 }
393
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400394 leaf count {
395 description "Number of instances of VDU";
396 type uint64;
397 }
398
399 leaf mgmt-vpci {
400 description
401 "Specifies the virtual PCI address. Expressed in
402 the following format dddd:dd:dd.d. For example
403 0000:00:12.0. This information can be used to
404 pass as metadata during the VM creation.";
405 type string;
406 }
407
408 uses manotypes:vm-flavor;
409 uses manotypes:guest-epa;
410 uses manotypes:vswitch-epa;
411 uses manotypes:hypervisor-epa;
412 uses manotypes:host-epa;
413
414 list alarm {
415 key "alarm-id";
416
417 uses manotypes:alarm;
418 }
419
420 uses manotypes:image-properties;
421
garciadeblase304a4d2017-12-05 12:30:17 +0100422 list alternative-images {
423 key "vim-type";
424 description
425 "List of alternative images per VIM type.
426 Different images can be used for specific types of VIMs instead
427 of the default image. This allows deployments in sites where the
428 image identifier in the VIM is given by the VIM provider and
429 cannot be modified.
430 If an alternative image is specified for a VIM type, it will prevail
431 over the default image";
432
433 leaf vim-type {
434 description "VIM type: openvim, openstack, vmware, aws, etc.";
435 type string;
436 }
437
438 uses manotypes:image-properties;
439 }
440
Rajesh Velandyce30ffe2017-09-25 15:15:25 +0000441 container vdu-configuration {
442 uses manotypes:vca-configuration;
443 }
444
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400445 choice cloud-init-input {
446 description
447 "Indicates how the contents of cloud-init script are provided.
448 There are 2 choices - inline or in a file";
449
450 case inline {
451 leaf cloud-init {
452 description
453 "Contents of cloud-init script, provided inline, in cloud-config format";
454 type string;
455 }
456 }
457
458 case filename {
459 leaf cloud-init-file {
460 description
461 "Name of file with contents of cloud-init script in cloud-config format";
462 type string;
463 }
464 }
465 }
466
467 uses manotypes:supplemental-boot-data;
468
469 list internal-connection-point {
470 key "id";
471 description
472 "List for internal connection points. Each VNFC
473 has zero or more internal connection points.
474 Internal connection points are used for connecting
475 the VNF with components internal to the VNF. If a VNF
476 has only one VNFC, it may not have any internal
477 connection points.";
478
479 uses common-connection-point;
480
481 leaf internal-vld-ref {
482 type leafref {
483 path "../../../internal-vld/id";
484 }
485 }
486 }
487
488 list interface {
489 description
490 "List of Interfaces (external and internal) for the VNF";
491 key name;
492
493 leaf name {
494 description
495 "Name of the interface. Note that this
496 name has only local significance to the VDU.";
497 type string;
498 }
499
500 leaf position {
501 description
502 "Explicit Position of the interface within the list";
503 type uint32;
504 }
505
506 leaf type {
507 description
508 "Type of the Interface";
509 type interface-type;
510
511 default "EXTERNAL";
512 }
513
garciadeblas98048d22017-12-05 10:30:26 +0100514 leaf mac-address {
515 description
516 "MAC address of the interface.
517 Some VNFs require a specific MAC address to be configured
518 in the interface. While this is not recommended at all in
519 NFV environments, this parameter exists to allow those
520 scenarios.
521 This parameter will be likely deprecated in the future.";
522 type string;
523 }
524
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400525 choice connection-point-type {
526 case internal {
527 leaf internal-connection-point-ref {
528 description
529 "Leaf Ref to the particular internal connection point";
530 type leafref {
531 path "../../internal-connection-point/id";
532 }
533 }
534 }
535 case external {
536 leaf external-connection-point-ref {
537 description
538 "Leaf Ref to the particular external connection point";
539 type leafref {
540 path "../../../connection-point/name";
541 }
542 }
543 }
544 }
545
546 uses virtual-interface;
547 }
548
549
550 list volumes {
551 key "name";
552
553 leaf name {
554 description "Name of the disk-volumes, e.g. vda, vdb etc";
555 type string;
556 }
557
558 uses manotypes:volume-info;
559 }
560 }
561
562 list vdu-dependency {
563 description
564 "List of VDU dependencies.";
565
566 key vdu-source-ref;
567 leaf vdu-source-ref {
568 type leafref {
569 path "../../vdu/id";
570 }
571 }
572
573 leaf vdu-depends-on-ref {
574 description
575 "Reference to the VDU on which
576 the source VDU depends.";
577 type leafref {
578 path "../../vdu/id";
579 }
580 }
581 }
582
583 leaf service-function-chain {
584 description "Type of node in Service Function Chaining Architecture";
585
586 type enumeration {
587 enum UNAWARE;
588 enum CLASSIFIER;
589 enum SF;
590 enum SFF;
591 }
592 default "UNAWARE";
593 }
594
595 leaf service-function-type {
596 description
597 "Type of Service Function.
598 NOTE: This needs to map with Service Function Type in ODL to
599 support VNFFG. Service Function Type is mandatory param in ODL
600 SFC. This is temporarily set to string for ease of use";
601 type string;
602 }
603
604 uses manotypes:monitoring-param;
605
606 list placement-groups {
607 description "List of placement groups at VNF level";
608
609 key "name";
610 uses manotypes:placement-group-info;
611
612 list member-vdus {
613
614 description
615 "List of VDUs that are part of this placement group";
616 key "member-vdu-ref";
617
618 leaf member-vdu-ref {
619 type leafref {
620 path "../../../vdu/id";
621 }
622 }
623 }
624 }
625 }
626}
627
628// vim: sw=2