blob: 9163e331309599b246c59a9a3fcfae2293c5ee82 [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 {
65 description "Enables the port security for the port";
66 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 {
301 description "reference to the internal connection point id";
302 type leafref {
303 path "../../../vdu/internal-connection-point/id";
304 }
305 }
garciadeblas1edb98c2017-12-05 13:47:09 +0100306 leaf ip-address {
307 description "IP address of the internal connection point";
308 type inet:ip-address;
309 }
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400310 }
311
312 uses manotypes:provider-network;
313 choice init-params {
314 description "Extra parameters for VLD instantiation";
315
316 case vim-network-ref {
317 leaf vim-network-name {
318 description
319 "Name of network in VIM account. This is used to indicate
320 pre-provisioned network name in cloud account.";
321 type string;
322 }
323 }
324
325 case vim-network-profile {
326 leaf ip-profile-ref {
327 description "Named reference to IP-profile object";
328 type string;
329 }
330 }
331
332 }
333 }
334
335 uses manotypes:ip-profile-list;
336
337 list connection-point {
338 key "name";
339 description
340 "List for external connection points. Each VNF has one
341 or more external connection points that connect the VNF
342 to other VNFs or to external networks. Each VNF exposes
343 connection points to the orchestrator, which can construct
344 network services by connecting the connection points
345 between different VNFs. The NFVO will use VLDs and VNFFGs
346 at the network service level to construct network services.";
347
348 uses common-connection-point;
349 }
350
351 list vdu {
352 description "List of Virtual Deployment Units";
353 key "id";
354
355 leaf id {
356 description "Unique id for the VDU";
357 type string;
358 }
359
360 leaf name {
361 description "Unique name for the VDU";
362 type string;
363 }
364
365 leaf description {
366 description "Description of the VDU.";
367 type string;
368 }
369
370 leaf count {
371 description "Number of instances of VDU";
372 type uint64;
373 }
374
375 leaf mgmt-vpci {
376 description
377 "Specifies the virtual PCI address. Expressed in
378 the following format dddd:dd:dd.d. For example
379 0000:00:12.0. This information can be used to
380 pass as metadata during the VM creation.";
381 type string;
382 }
383
384 uses manotypes:vm-flavor;
385 uses manotypes:guest-epa;
386 uses manotypes:vswitch-epa;
387 uses manotypes:hypervisor-epa;
388 uses manotypes:host-epa;
389
390 list alarm {
391 key "alarm-id";
392
393 uses manotypes:alarm;
394 }
395
396 uses manotypes:image-properties;
397
garciadeblase304a4d2017-12-05 12:30:17 +0100398 list alternative-images {
399 key "vim-type";
400 description
401 "List of alternative images per VIM type.
402 Different images can be used for specific types of VIMs instead
403 of the default image. This allows deployments in sites where the
404 image identifier in the VIM is given by the VIM provider and
405 cannot be modified.
406 If an alternative image is specified for a VIM type, it will prevail
407 over the default image";
408
409 leaf vim-type {
410 description "VIM type: openvim, openstack, vmware, aws, etc.";
411 type string;
412 }
413
414 uses manotypes:image-properties;
415 }
416
Rajesh Velandyce30ffe2017-09-25 15:15:25 +0000417 container vdu-configuration {
418 uses manotypes:vca-configuration;
419 }
420
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400421 choice cloud-init-input {
422 description
423 "Indicates how the contents of cloud-init script are provided.
424 There are 2 choices - inline or in a file";
425
426 case inline {
427 leaf cloud-init {
428 description
429 "Contents of cloud-init script, provided inline, in cloud-config format";
430 type string;
431 }
432 }
433
434 case filename {
435 leaf cloud-init-file {
436 description
437 "Name of file with contents of cloud-init script in cloud-config format";
438 type string;
439 }
440 }
441 }
442
443 uses manotypes:supplemental-boot-data;
444
445 list internal-connection-point {
446 key "id";
447 description
448 "List for internal connection points. Each VNFC
449 has zero or more internal connection points.
450 Internal connection points are used for connecting
451 the VNF with components internal to the VNF. If a VNF
452 has only one VNFC, it may not have any internal
453 connection points.";
454
455 uses common-connection-point;
456
457 leaf internal-vld-ref {
458 type leafref {
459 path "../../../internal-vld/id";
460 }
461 }
462 }
463
464 list interface {
465 description
466 "List of Interfaces (external and internal) for the VNF";
467 key name;
468
469 leaf name {
470 description
471 "Name of the interface. Note that this
472 name has only local significance to the VDU.";
473 type string;
474 }
475
476 leaf position {
477 description
478 "Explicit Position of the interface within the list";
479 type uint32;
480 }
481
482 leaf type {
483 description
484 "Type of the Interface";
485 type interface-type;
486
487 default "EXTERNAL";
488 }
489
garciadeblas98048d22017-12-05 10:30:26 +0100490 leaf mac-address {
491 description
492 "MAC address of the interface.
493 Some VNFs require a specific MAC address to be configured
494 in the interface. While this is not recommended at all in
495 NFV environments, this parameter exists to allow those
496 scenarios.
497 This parameter will be likely deprecated in the future.";
498 type string;
499 }
500
Rajesh Velandye27e0b22017-09-18 17:21:48 -0400501 choice connection-point-type {
502 case internal {
503 leaf internal-connection-point-ref {
504 description
505 "Leaf Ref to the particular internal connection point";
506 type leafref {
507 path "../../internal-connection-point/id";
508 }
509 }
510 }
511 case external {
512 leaf external-connection-point-ref {
513 description
514 "Leaf Ref to the particular external connection point";
515 type leafref {
516 path "../../../connection-point/name";
517 }
518 }
519 }
520 }
521
522 uses virtual-interface;
523 }
524
525
526 list volumes {
527 key "name";
528
529 leaf name {
530 description "Name of the disk-volumes, e.g. vda, vdb etc";
531 type string;
532 }
533
534 uses manotypes:volume-info;
535 }
536 }
537
538 list vdu-dependency {
539 description
540 "List of VDU dependencies.";
541
542 key vdu-source-ref;
543 leaf vdu-source-ref {
544 type leafref {
545 path "../../vdu/id";
546 }
547 }
548
549 leaf vdu-depends-on-ref {
550 description
551 "Reference to the VDU on which
552 the source VDU depends.";
553 type leafref {
554 path "../../vdu/id";
555 }
556 }
557 }
558
559 leaf service-function-chain {
560 description "Type of node in Service Function Chaining Architecture";
561
562 type enumeration {
563 enum UNAWARE;
564 enum CLASSIFIER;
565 enum SF;
566 enum SFF;
567 }
568 default "UNAWARE";
569 }
570
571 leaf service-function-type {
572 description
573 "Type of Service Function.
574 NOTE: This needs to map with Service Function Type in ODL to
575 support VNFFG. Service Function Type is mandatory param in ODL
576 SFC. This is temporarily set to string for ease of use";
577 type string;
578 }
579
580 uses manotypes:monitoring-param;
581
582 list placement-groups {
583 description "List of placement groups at VNF level";
584
585 key "name";
586 uses manotypes:placement-group-info;
587
588 list member-vdus {
589
590 description
591 "List of VDUs that are part of this placement group";
592 key "member-vdu-ref";
593
594 leaf member-vdu-ref {
595 type leafref {
596 path "../../../vdu/id";
597 }
598 }
599 }
600 }
601 }
602}
603
604// vim: sw=2