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;
179 uses manotypes:vca-config-access;
182 leaf operational-status {
184 "The operational status of the VNF
185 init : The VNF has just started.
186 running : The VNF is active in VM
187 upgrading : The VNF is being upgraded (EXPERIMENTAL)
188 terminate : The VNF is being terminated
189 terminated : The VNF is in the terminated state.
190 failed : The VNF instantiation failed.
192 type vnf-operational-status;
195 container mgmt-interface {
197 "Interface over which the VNF is managed.";
199 choice endpoint-type {
201 "Indicates the type of management endpoint.";
205 "Specifies the static IP address for managing the VNF.";
207 type inet:ip-address;
213 "Use the default management interface on this VDU.";
223 "Use the ip address associated with this connection point. This cp is then considered as management.";
226 path "../../connection-point/name";
234 "Port for the management interface.";
235 type inet:port-number;
238 container dashboard-params {
239 description "Parameters for the VNF dashboard";
242 description "The HTTP path for the dashboard";
247 description "Pick HTTPS instead of HTTP , Default is false";
252 description "The HTTP port for the dashboard";
253 type inet:port-number;
261 "List of Internal Virtual Link Descriptors (VLD).
262 The internal VLD describes the basic topology of
263 the connectivity such as E-LAN, E-Line, E-Tree.
264 between internal VNF components of the system.";
267 description "Identifier for the VLD";
272 description "Name of the internal VLD";
277 description "Short name to appear as label in the UI";
286 type manotypes:virtual-link-type;
289 leaf root-bandwidth {
291 "For ELAN this is the aggregate bandwidth.";
295 leaf leaf-bandwidth {
297 "For ELAN this is the bandwidth of branches.";
301 list internal-connection-point {
303 description "List of internal connection points in this VLD";
305 description "Reference to the internal connection point id";
307 path "../../../vdu/internal-connection-point/id";
312 description "IP address of the internal connection point";
313 type inet:ip-address;
317 uses manotypes:provider-network;
319 description "Extra parameters for VLD instantiation";
321 case vim-network-ref {
322 leaf vim-network-name {
324 "Name of network in VIM account. This is used to indicate
325 pre-provisioned network name in cloud account.";
330 case vim-network-profile {
331 leaf ip-profile-ref {
332 description "Named reference to IP-profile object";
340 uses manotypes:ip-profile-list;
342 list connection-point {
345 "List for external connection points. Each VNF has one
346 or more external connection points that connect the VNF
347 to other VNFs or to external networks. Each VNF exposes
348 connection points to the orchestrator, which can construct
349 network services by connecting the connection points
350 between different VNFs. The NFVO will use VLDs and VNFFGs
351 at the network service level to construct network services.";
353 uses common-connection-point;
355 leaf internal-vld-ref {
357 "Reference to an internal VLD of the VNF. This field is
358 optional. It allows exposing an internal VLD through a
359 connection point. When building a NS, this VNF CP might be
360 connected to a NS VLD, then both VLDs (the i-VLD of the VNF and the
361 VLD of the NS) will become the same network and the IP profile will
362 be the one configured at NS level.";
364 path "../../internal-vld/id";
370 description "List of Virtual Deployment Units";
374 description "Unique id for the VDU";
379 description "Unique name for the VDU";
384 description "Description of the VDU.";
390 "Type of PDU. If this field exists, the deployment unit must be
391 understood as a PDU, not as a VDU. This field is used to identify
392 the category of PDU instances to be used at instantiation time. For
393 the instantiation to be successful, there must be available
394 PDU instances of this type in the selected datacenter.";
399 description "Number of instances of VDU";
405 "Specifies the virtual PCI address. Expressed in
406 the following format dddd:dd:dd.d. For example
407 0000:00:12.0. This information can be used to
408 pass as metadata during the VM creation.";
412 uses manotypes:vm-flavor;
413 uses manotypes:guest-epa;
414 uses manotypes:vswitch-epa;
415 uses manotypes:hypervisor-epa;
416 uses manotypes:host-epa;
423 "This field is reserved for the identifier assigned by the VIM provider";
429 leaf vnf-monitoring-param-ref {
431 "Reference to the VNF level monitoring parameter
434 path "../../monitoring-param/id";
438 uses manotypes:alarm-properties;
441 uses manotypes:image-properties;
443 list alternative-images {
446 "List of alternative images per VIM type.
447 Different images can be used for specific types of VIMs instead
448 of the default image. This allows deployments in sites where the
449 image identifier in the VIM is given by the VIM provider and
451 If an alternative image is specified for a VIM type, it will prevail
452 over the default image";
455 description "VIM type: openvim, openstack, vmware, aws, etc.";
459 uses manotypes:image-properties;
462 container vdu-configuration {
463 uses manotypes:vca-configuration;
464 uses manotypes:vca-config-access;
467 list monitoring-param {
469 "List of VDU-related monitoring parameters at NFVI level";
472 description "The unique id of the monitoring param at VDU level";
477 description "The associated NFVI metric to be monitored";
478 type manotypes:nfvi-metric-type;
481 leaf interface-name-ref {
483 "Reference to a VDU interface name. Applicable only when the nfvi-metric
484 refers to an interface and not to the VM";
486 path "../../interface/name";
491 choice cloud-init-input {
493 "Indicates how the contents of cloud-init script are provided.
494 There are 2 choices - inline or in a file";
499 "Contents of cloud-init script, provided inline, in cloud-config format";
505 leaf cloud-init-file {
507 "Name of file with contents of cloud-init script in cloud-config format";
513 uses manotypes:supplemental-boot-data;
515 list internal-connection-point {
518 "List for internal connection points. Each VNFC
519 has zero or more internal connection points.
520 Internal connection points are used for connecting
521 the VNF with components internal to the VNF. If a VNF
522 has only one VNFC, it may not have any internal
525 uses common-connection-point;
527 leaf internal-vld-ref {
529 path "../../../internal-vld/id";
536 "List of Interfaces (external and internal) for the VNF";
541 "Name of the interface. Note that this
542 name has only local significance to the VDU.";
548 "Explicit Position of the interface within the list";
552 leaf mgmt-interface {
554 "Flag to indicate that this is the mgmt interface
555 to be used for VDU configuration";
562 "Type of the Interface";
570 "MAC address of the interface.
571 Some VNFs require a specific MAC address to be configured
572 in the interface. While this is not recommended at all in
573 NFV environments, this parameter exists to allow those
575 This parameter will be likely deprecated in the future.";
579 choice connection-point-type {
581 leaf internal-connection-point-ref {
583 "Leaf Ref to the particular internal connection point";
585 path "../../internal-connection-point/id";
590 leaf external-connection-point-ref {
592 "Leaf Ref to the particular external connection point";
594 path "../../../connection-point/name";
600 uses virtual-interface;
608 description "Name of the disk-volumes, e.g. vda, vdb etc";
612 uses manotypes:volume-info;
616 list vdu-dependency {
618 "List of VDU dependencies.";
621 leaf vdu-source-ref {
627 leaf vdu-depends-on-ref {
629 "Reference to the VDU on which
630 the source VDU depends.";
637 leaf service-function-chain {
638 description "Type of node in Service Function Chaining Architecture";
649 leaf service-function-type {
651 "Type of Service Function.
652 NOTE: This needs to map with Service Function Type in ODL to
653 support VNFFG. Service Function Type is mandatory param in ODL
654 SFC. This is temporarily set to string for ease of use";
658 uses manotypes:http-endpoints;
660 list scaling-group-descriptor {
662 "scaling group descriptor within the VNF.
663 The scaling group defines a group of VDUs,
664 and the ratio of VDUs in the VNF
665 that is used as target for scaling action";
670 description "Name of this scaling group.";
674 list scaling-policy {
680 "Name of the scaling policy";
687 type manotypes:scaling-policy-type;
692 "Specifies if the scaling policy can be applied";
697 leaf scale-in-operation-type {
699 "Operation to be applied to check between scaling criterias to
700 check if the scale in threshold condition has been met.
702 type manotypes:scaling-criteria-operation;
706 leaf scale-out-operation-type {
708 "Operation to be applied to check between scaling criterias to
709 check if the scale out threshold condition has been met.
711 type manotypes:scaling-criteria-operation;
715 leaf threshold-time {
717 "The duration for which the criteria must hold true";
724 "The duration after a scaling-in/scaling-out action has been
725 triggered, for which there will be no further optional";
730 list scaling-criteria {
732 "list of conditions to be met for generating scaling
740 leaf scale-in-threshold {
742 "Value below which scale-in requests are generated";
748 leaf scale-in-relational-operation {
750 "The relational operator used to compare the monitoring param
751 against the scale-in-threshold.";
752 type manotypes:relational-operation-type;
756 leaf scale-out-threshold {
758 "Value above which scale-out requests are generated";
764 leaf scale-out-relational-operation {
766 "The relational operator used to compare the monitoring param
767 against the scale-out-threshold.";
768 type manotypes:relational-operation-type;
772 leaf vnf-monitoring-param-ref {
774 "Reference to the VNF level monitoring parameter
777 path "../../../../monitoring-param/id";
784 description "List of VDUs in this scaling group";
788 description "Reference to the VDU id";
790 path "../../../vdu/id";
796 "count of this VDU id within this scaling group.
797 The count allows to define the number of instances
798 when a scaling action targets this scaling group";
804 leaf min-instance-count {
806 "Minimum instances of the scaling group which are allowed.
807 These instances are created by default when the network service
813 leaf max-instance-count {
815 "Maximum instances of this scaling group that are allowed
816 in a single network service. The network service scaling
817 will fail, when the number of service group instances
818 exceed the max-instance-count specified.";
823 list scaling-config-action {
824 description "List of scaling config actions";
828 description "scaling trigger";
829 type manotypes:scaling-trigger;
832 leaf vnf-config-primitive-name-ref {
833 description "Reference to the VNF config primitive";
835 path "../../../vnf-configuration/config-primitive/name";
841 list monitoring-param {
843 "List of monitoring parameters at the network service level";
853 uses manotypes:monitoring-param-aggregation;
855 choice monitoring-type {
857 "Defines the type of monitoring param to be used:
858 * vdu-monitorin-param: VDU-related metric (from NFVI)
859 * vnf-metric: VNF-related metric (from VCA)
860 * vdu-metric: VDU-related metric (from VCA)
863 case vdu-monitoring-param {
864 description "VDU-related metric from the infrastructure";
865 container vdu-monitoring-param {
868 path "../../../vdu/id";
871 leaf vdu-monitoring-param-ref {
873 path "../../../vdu[id = current()/../vdu-ref]/monitoring-param/id";
880 description "VNF-related metric (from VCA)";
881 container vnf-metric {
882 leaf vnf-metric-name-ref {
884 path "../../../vnf-configuration/metrics/name";
891 description "VDU-related metric (from VCA)";
892 container vdu-metric {
895 path "../../../vdu/id";
898 leaf vdu-metric-name-ref {
900 path "../../../vdu[id = current()/../vdu-ref]/vdu-configuration/metrics/name";
908 leaf http-endpoint-ref {
910 path "../../http-endpoint/path";
914 leaf json-query-method {
915 type manotypes:json-query-method;
919 container json-query-params {
922 "The jsonpath to use to extract value from JSON structure";
927 "The objectpath to use to extract value from JSON structure";
932 uses manotypes:monitoring-param-ui-data;
933 uses manotypes:monitoring-param-value;
937 list placement-groups {
938 description "List of placement groups at VNF level";
941 uses manotypes:placement-group-info;
946 "List of VDUs that are part of this placement group";
947 key "member-vdu-ref";
949 leaf member-vdu-ref {
951 path "../../../vdu/id";