4 * Copyright 2017 RIFT.IO Inc
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 namespace "urn:etsi:osm:yang:vnfd-base";
30 import ietf-inet-types {
36 "Initial revision. This YANG file defines
37 the common types for Virtual Network Function
40 "Derived from earlier versions of base YANG files";
43 grouping common-connection-point {
45 description "Name of the connection point";
50 description "Identifier for the internal connection points";
55 description "Short name to appear as label in the UI";
60 description "Type of the connection point.";
61 type manotypes:connection-point-type;
64 leaf port-security-enabled {
65 description "Enables the port security for the port.";
71 typedef interface-type {
78 typedef vnf-operational-status {
89 grouping virtual-interface {
90 container virtual-interface {
92 "Container for the virtual interface properties";
96 "Specifies the type of virtual interface
98 PARAVIRT : Use the default paravirtualized interface for the VIM (virtio, vmxnet3, etc.).
99 VIRTIO : Deprecated! Use the traditional VIRTIO interface.
100 PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
101 SR-IOV : Use SR-IOV interface.
102 E1000 : Emulate E1000 interface.
103 RTL8139 : Emulate RTL8139 interface.
104 PCNET : Emulate PCNET interface.
105 OM-MGMT : Deprecated! Use PARAVIRT instead and set the VNF management interface at vnfd:mgmt-interface:cp";
110 enum PCI-PASSTHROUGH;
122 "Specifies the virtual PCI address. Expressed in
123 the following format dddd:dd:dd.d. For example
124 0000:00:12.0. This information can be used to
125 pass as metadata during the VM creation.";
131 "Aggregate bandwidth of the NIC.";
137 grouping vnfd-descriptor {
139 description "Identifier for the VNFD.";
146 description "VNFD name.";
152 description "Short name to appear as label in the UI";
157 description "Vendor of the VNFD.";
163 "Vendor logo for the Virtual Network Function";
168 description "Description of the VNFD.";
173 description "Version of the VNFD";
177 container vnf-configuration {
178 uses manotypes:vca-configuration;
181 leaf operational-status {
183 "The operational status of the VNF
184 init : The VNF has just started.
185 running : The VNF is active in VM
186 upgrading : The VNF is being upgraded (EXPERIMENTAL)
187 terminate : The VNF is being terminated
188 terminated : The VNF is in the terminated state.
189 failed : The VNF instantiation failed.
191 type vnf-operational-status;
194 container mgmt-interface {
196 "Interface over which the VNF is managed.";
198 choice endpoint-type {
200 "Indicates the type of management endpoint.";
204 "Specifies the static IP address for managing the VNF.";
206 type inet:ip-address;
212 "Use the default management interface on this VDU.";
222 "Use the ip address associated with this connection point. This cp is then considered as management.";
225 path "../../connection-point/name";
233 "Port for the management interface.";
234 type inet:port-number;
237 container dashboard-params {
238 description "Parameters for the VNF dashboard";
241 description "The HTTP path for the dashboard";
246 description "Pick HTTPS instead of HTTP , Default is false";
251 description "The HTTP port for the dashboard";
252 type inet:port-number;
260 "List of Internal Virtual Link Descriptors (VLD).
261 The internal VLD describes the basic topology of
262 the connectivity such as E-LAN, E-Line, E-Tree.
263 between internal VNF components of the system.";
266 description "Identifier for the VLD";
271 description "Name of the internal VLD";
276 description "Short name to appear as label in the UI";
285 type manotypes:virtual-link-type;
288 leaf root-bandwidth {
290 "For ELAN this is the aggregate bandwidth.";
294 leaf leaf-bandwidth {
296 "For ELAN this is the bandwidth of branches.";
300 list internal-connection-point {
302 description "List of internal connection points in this VLD";
304 description "Reference to the internal connection point id";
306 path "../../../vdu/internal-connection-point/id";
311 description "IP address of the internal connection point";
312 type inet:ip-address;
316 uses manotypes:provider-network;
318 description "Extra parameters for VLD instantiation";
320 case vim-network-ref {
321 leaf vim-network-name {
323 "Name of network in VIM account. This is used to indicate
324 pre-provisioned network name in cloud account.";
329 case vim-network-profile {
330 leaf ip-profile-ref {
331 description "Named reference to IP-profile object";
339 uses manotypes:ip-profile-list;
341 list connection-point {
344 "List for external connection points. Each VNF has one
345 or more external connection points that connect the VNF
346 to other VNFs or to external networks. Each VNF exposes
347 connection points to the orchestrator, which can construct
348 network services by connecting the connection points
349 between different VNFs. The NFVO will use VLDs and VNFFGs
350 at the network service level to construct network services.";
352 uses common-connection-point;
354 leaf internal-vld-ref {
356 "Reference to an internal VLD of the VNF. This field is
357 optional. It allows exposing an internal VLD through a
358 connection point. When building a NS, this VNF CP might be
359 connected to a NS VLD, then both VLDs (the i-VLD of the VNF and the
360 VLD of the NS) will become the same network and the IP profile will
361 be the one configured at NS level.";
363 path "../../internal-vld/id";
369 description "List of Virtual Deployment Units";
373 description "Unique id for the VDU";
378 description "Unique name for the VDU";
383 description "Description of the VDU.";
389 "Type of PDU. If this field exists, the deployment unit must be
390 understood as a PDU, not as a VDU. This field is used to identify
391 the category of PDU instances to be used at instantiation time. For
392 the instantiation to be successful, there must be available
393 PDU instances of this type in the selected datacenter.";
398 description "Number of instances of VDU";
404 "Specifies the virtual PCI address. Expressed in
405 the following format dddd:dd:dd.d. For example
406 0000:00:12.0. This information can be used to
407 pass as metadata during the VM creation.";
411 uses manotypes:vm-flavor;
412 uses manotypes:guest-epa;
413 uses manotypes:vswitch-epa;
414 uses manotypes:hypervisor-epa;
415 uses manotypes:host-epa;
422 "This field is reserved for the identifier assigned by the VIM provider";
428 leaf vnf-monitoring-param-ref {
430 "Reference to the VNF level monitoring parameter
433 path "../../monitoring-param/id";
437 uses manotypes:alarm-properties;
440 uses manotypes:image-properties;
442 list alternative-images {
445 "List of alternative images per VIM type.
446 Different images can be used for specific types of VIMs instead
447 of the default image. This allows deployments in sites where the
448 image identifier in the VIM is given by the VIM provider and
450 If an alternative image is specified for a VIM type, it will prevail
451 over the default image";
454 description "VIM type: openvim, openstack, vmware, aws, etc.";
458 uses manotypes:image-properties;
461 container vdu-configuration {
462 uses manotypes:vca-configuration;
465 list monitoring-param {
467 "List of VDU-related monitoring parameters at NFVI level";
470 description "The unique id of the monitoring param at VDU level";
475 description "The associated NFVI metric to be monitored";
476 type manotypes:nfvi-metric-type;
479 leaf interface-name-ref {
481 "Reference to a VDU interface name. Applicable only when the nfvi-metric
482 refers to an interface and not to the VM";
484 path "../../interface/name";
489 choice cloud-init-input {
491 "Indicates how the contents of cloud-init script are provided.
492 There are 2 choices - inline or in a file";
497 "Contents of cloud-init script, provided inline, in cloud-config format";
503 leaf cloud-init-file {
505 "Name of file with contents of cloud-init script in cloud-config format";
511 uses manotypes:supplemental-boot-data;
513 list internal-connection-point {
516 "List for internal connection points. Each VNFC
517 has zero or more internal connection points.
518 Internal connection points are used for connecting
519 the VNF with components internal to the VNF. If a VNF
520 has only one VNFC, it may not have any internal
523 uses common-connection-point;
525 leaf internal-vld-ref {
527 path "../../../internal-vld/id";
534 "List of Interfaces (external and internal) for the VNF";
539 "Name of the interface. Note that this
540 name has only local significance to the VDU.";
546 "Explicit Position of the interface within the list";
550 leaf mgmt-interface {
552 "Flag to indicate that this is the mgmt interface
553 to be used for VDU configuration";
560 "Type of the Interface";
568 "MAC address of the interface.
569 Some VNFs require a specific MAC address to be configured
570 in the interface. While this is not recommended at all in
571 NFV environments, this parameter exists to allow those
573 This parameter will be likely deprecated in the future.";
577 choice connection-point-type {
579 leaf internal-connection-point-ref {
581 "Leaf Ref to the particular internal connection point";
583 path "../../internal-connection-point/id";
588 leaf external-connection-point-ref {
590 "Leaf Ref to the particular external connection point";
592 path "../../../connection-point/name";
598 uses virtual-interface;
606 description "Name of the disk-volumes, e.g. vda, vdb etc";
610 uses manotypes:volume-info;
614 list vdu-dependency {
616 "List of VDU dependencies.";
619 leaf vdu-source-ref {
625 leaf vdu-depends-on-ref {
627 "Reference to the VDU on which
628 the source VDU depends.";
635 leaf service-function-chain {
636 description "Type of node in Service Function Chaining Architecture";
647 leaf service-function-type {
649 "Type of Service Function.
650 NOTE: This needs to map with Service Function Type in ODL to
651 support VNFFG. Service Function Type is mandatory param in ODL
652 SFC. This is temporarily set to string for ease of use";
656 uses manotypes:http-endpoints;
658 list scaling-group-descriptor {
660 "scaling group descriptor within the VNF.
661 The scaling group defines a group of VDUs,
662 and the ratio of VDUs in the VNF
663 that is used as target for scaling action";
668 description "Name of this scaling group.";
672 list scaling-policy {
678 "Name of the scaling policy";
685 type manotypes:scaling-policy-type;
690 "Specifies if the scaling policy can be applied";
695 leaf scale-in-operation-type {
697 "Operation to be applied to check between scaling criterias to
698 check if the scale in threshold condition has been met.
700 type manotypes:scaling-criteria-operation;
704 leaf scale-out-operation-type {
706 "Operation to be applied to check between scaling criterias to
707 check if the scale out threshold condition has been met.
709 type manotypes:scaling-criteria-operation;
713 leaf threshold-time {
715 "The duration for which the criteria must hold true";
722 "The duration after a scaling-in/scaling-out action has been
723 triggered, for which there will be no further optional";
728 list scaling-criteria {
730 "list of conditions to be met for generating scaling
738 leaf scale-in-threshold {
740 "Value below which scale-in requests are generated";
746 leaf scale-in-relational-operation {
748 "The relational operator used to compare the monitoring param
749 against the scale-in-threshold.";
750 type manotypes:relational-operation-type;
754 leaf scale-out-threshold {
756 "Value above which scale-out requests are generated";
762 leaf scale-out-relational-operation {
764 "The relational operator used to compare the monitoring param
765 against the scale-out-threshold.";
766 type manotypes:relational-operation-type;
770 leaf vnf-monitoring-param-ref {
772 "Reference to the VNF level monitoring parameter
775 path "../../../../monitoring-param/id";
782 description "List of VDUs in this scaling group";
786 description "Reference to the VDU id";
788 path "../../../vdu/id";
794 "count of this VDU id within this scaling group.
795 The count allows to define the number of instances
796 when a scaling action targets this scaling group";
802 leaf min-instance-count {
804 "Minimum instances of the scaling group which are allowed.
805 These instances are created by default when the network service
811 leaf max-instance-count {
813 "Maximum instances of this scaling group that are allowed
814 in a single network service. The network service scaling
815 will fail, when the number of service group instances
816 exceed the max-instance-count specified.";
821 list scaling-config-action {
822 description "List of scaling config actions";
826 description "scaling trigger";
827 type manotypes:scaling-trigger;
830 leaf vnf-config-primitive-name-ref {
831 description "Reference to the VNF config primitive";
833 path "../../../vnf-configuration/config-primitive/name";
839 list monitoring-param {
841 "List of monitoring parameters at the network service level";
851 uses manotypes:monitoring-param-aggregation;
853 choice monitoring-type {
855 "Defines the type of monitoring param to be used:
856 * vdu-monitorin-param: VDU-related metric (from NFVI)
857 * vnf-metric: VNF-related metric (from VCA)
858 * vdu-metric: VDU-related metric (from VCA)
861 case vdu-monitoring-param {
862 description "VDU-related metric from the infrastructure";
863 container vdu-monitoring-param {
866 path "../../../vdu/id";
869 leaf vdu-monitoring-param-ref {
871 path "../../../vdu[id = current()/../vdu-ref]/monitoring-param/id";
878 description "VNF-related metric (from VCA)";
879 container vnf-metric {
880 leaf vnf-metric-name-ref {
882 path "../../../vnf-configuration/metrics/name";
889 description "VDU-related metric (from VCA)";
890 container vdu-metric {
893 path "../../../vdu/id";
896 leaf vdu-metric-name-ref {
898 path "../../../vdu[id = current()/../vdu-ref]/vdu-configuration/metrics/name";
906 leaf http-endpoint-ref {
908 path "../../http-endpoint/path";
912 leaf json-query-method {
913 type manotypes:json-query-method;
917 container json-query-params {
920 "The jsonpath to use to extract value from JSON structure";
925 "The objectpath to use to extract value from JSON structure";
930 uses manotypes:monitoring-param-ui-data;
931 uses manotypes:monitoring-param-value;
935 list placement-groups {
936 description "List of placement groups at VNF level";
939 uses manotypes:placement-group-info;
944 "List of VDUs that are part of this placement group";
945 key "member-vdu-ref";
947 leaf member-vdu-ref {
949 path "../../../vdu/id";